#include "raylib.h" #include int main() { const int pantallaAncho = 800; const int pantallaAlto = 600; InitWindow( pantallaAncho, pantallaAlto, "Attacks for Bombs 1" ); SetTargetFPS(60); // ========================= // JUGADOR // ========================= float x = 400.0f; float y = 300.0f; float tamaño = 50.0f; float velocidad = 300.0f; // ========================= // DIRECCIÓN DEL JUGADOR // ========================= float direccionX = 1.0f; float direccionY = 0.0f; // ========================= // PROYECTIL // ========================= float proyectilX = 0.0f; float proyectilY = 0.0f; float proyectilAncho = 20.0f; float proyectilAlto = 8.0f; float proyectilVelocidad = 600.0f; bool proyectilActivo = false; // Dirección congelada del proyectil float proyectilDireccionX = 0.0f; float proyectilDireccionY = 0.0f; // ========================= // ENEMIGO // ========================= float enemigoX = 600.0f; float enemigoY = 300.0f; float enemigoTamaño = 50.0f; // ========================= // CONTADOR // ========================= int impactos = 0; // ========================= // BUCLE PRINCIPAL // ========================= while (!WindowShouldClose()) { float deltaTime = GetFrameTime(); // ========================= // MOUSE // ========================= Vector2 mouse = GetMousePosition(); // Dirección del jugador hacia el mouse float angulo = atan2(mouse.y - y, mouse.x - x); direccionX = cos(angulo); direccionY = sin(angulo); // ========================= // MOVIMIENTO // ========================= if (IsKeyDown(KEY_W)) { x += direccionX * velocidad * deltaTime; y += direccionY * velocidad * deltaTime; } if (IsKeyDown(KEY_S)) { x -= direccionX * velocidad * deltaTime; y -= direccionY * velocidad * deltaTime; } if (IsKeyDown(KEY_A)) { x += direccionY * velocidad * deltaTime; y -= direccionX * velocidad * deltaTime; } if (IsKeyDown(KEY_D)) { x -= direccionY * velocidad * deltaTime; y += direccionX * velocidad * deltaTime; } // ========================= // LÍMITES DEL JUGADOR // ========================= float mitad = tamaño / 2.0f; if (x < mitad) x = mitad; if (x > pantallaAncho - mitad) x = pantallaAncho - mitad; if (y < mitad) y = mitad; if (y > pantallaAlto - mitad) y = pantallaAlto - mitad; // ========================= // DISPARAR // ========================= if (IsKeyPressed(KEY_SPACE) && !proyectilActivo) { proyectilActivo = true; // El proyectil aparece en el jugador proyectilX = x; proyectilY = y; // Guardamos la dirección EXACTA // que tenía el jugador al disparar proyectilDireccionX = direccionX; proyectilDireccionY = direccionY; } // ========================= // MOVIMIENTO DEL PROYECTIL // ========================= if (proyectilActivo) { proyectilX += proyectilDireccionX * proyectilVelocidad * deltaTime; proyectilY += proyectilDireccionY * proyectilVelocidad * deltaTime; // ========================= // COLISIÓN CON ENEMIGO // ========================= Rectangle proyectilRect = { proyectilX - proyectilAncho / 2.0f, proyectilY - proyectilAlto / 2.0f, proyectilAncho, proyectilAlto }; Rectangle enemigoRect = { enemigoX - enemigoTamaño / 2.0f, enemigoY - enemigoTamaño / 2.0f, enemigoTamaño, enemigoTamaño }; if (CheckCollisionRecs( proyectilRect, enemigoRect)) { impactos++; proyectilActivo = false; } // ========================= // SALIR DE LA PANTALLA // ========================= if ( proyectilX < 0 || proyectilX > pantallaAncho || proyectilY < 0 || proyectilY > pantallaAlto ) { proyectilActivo = false; } } // ========================= // DIBUJAR // ========================= BeginDrawing(); ClearBackground(WHITE); // ========================= // CONTADOR // ========================= DrawText( TextFormat("Impactos: %d", impactos), 10, 10, 25, BLACK ); // ========================= // ENEMIGO // ========================= DrawRectangle( enemigoX - enemigoTamaño / 2.0f, enemigoY - enemigoTamaño / 2.0f, enemigoTamaño, enemigoTamaño, BLUE ); // ========================= // PROYECTIL // ========================= if (proyectilActivo) { float anguloProyectil = atan2( proyectilDireccionY, proyectilDireccionX ) * RAD2DEG; DrawRectanglePro( { proyectilX, proyectilY, proyectilAncho, proyectilAlto }, { proyectilAncho / 2.0f, proyectilAlto / 2.0f }, anguloProyectil, BLACK ); } // ========================= // JUGADOR // ========================= DrawRectanglePro( { x, y, tamaño, tamaño }, { mitad, mitad }, angulo * RAD2DEG, RED ); EndDrawing(); } CloseWindow(); return 0; }