/******************************************************************************************* * * raylib game - Dr. Turtle & Mr. Gamera * * Welcome to raylib! * * To test examples, just press F6 and execute raylib_compile_execute script * Note that compiled executable is placed in the same folder as .c file * * You can find all basic examples on C:\raylib\raylib\examples folder or * raylib official webpage: www.raylib.com * * Enjoy using raylib. :) * * This game has been created using raylib 1.1 (www.raylib.com) * raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) * * Copyright (c) 2014 Ramon Santamaria (Ray San - raysan@raysanweb.com) * ********************************************************************************************/ #include "raylib.h" #define MAX_ENEMIES 10 typedef enum { TITLE, GAMEPLAY, ENDING } GameScreen; int main() { // Initialization //-------------------------------------------------------------------------------------- const int screenWidth = 1280; const int screenHeight = 720; // Init window InitWindow(screenWidth, screenHeight, "Dr. Turtle & Mr. GAMERA"); // Load game resources: textures Texture2D sky = LoadTexture("resources/sky.png"); Texture2D mountains = LoadTexture("resources/mountains.png"); Texture2D sea = LoadTexture("resources/sea.png"); Texture2D title = LoadTexture("resources/title.png"); Texture2D turtle = LoadTexture("resources/turtle.png"); Texture2D gamera = LoadTexture("resources/gamera.png"); // Define scrolling variables int backScrolling = 0; int seaScrolling = 0; // Define current screen GameScreen currentScreen = TITLE; // Define player variables int playerRail = 1; Rectangle playerBounds = { 30 + 14, playerRail*120 + 90 + 14, 100, 100 }; bool gameraMode = false; // Define additional game variables int framesCounter = 0; SetTargetFPS(60); // Setup game frames per second //-------------------------------------------------------------------------------------- // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { // Update //---------------------------------------------------------------------------------- framesCounter++; // Game screens management switch (currentScreen) { case TITLE: { // Sea scrolling seaScrolling -= 2; if (seaScrolling <= -screenWidth) seaScrolling = 0; // Press enter to change to gameplay screen if (IsKeyPressed(KEY_ENTER)) { currentScreen = GAMEPLAY; framesCounter = 0; } } break; case GAMEPLAY: { // Background scrolling logic backScrolling--; if (backScrolling <= -screenWidth) backScrolling = 0; // Sea scrolling logic seaScrolling -= 8; if (seaScrolling <= -screenWidth) seaScrolling = 0; // Player movement logic if (IsKeyPressed(KEY_DOWN)) playerRail++; else if (IsKeyPressed(KEY_UP)) playerRail--; // Check player not out of rails if (playerRail > 4) playerRail = 4; else if (playerRail < 0) playerRail = 0; // Update player bounds playerBounds = (Rectangle){ 30 + 14, playerRail*120 + 90 + 14, 100, 100 }; if (IsKeyPressed(KEY_SPACE)) gameraMode = !gameraMode; if (IsKeyPressed(KEY_ENTER)) currentScreen = ENDING; } break; case ENDING: { // Press enter to play again if (IsKeyPressed(KEY_ENTER)) { currentScreen = GAMEPLAY; // Reset player playerRail = 1; playerBounds = (Rectangle){ 30 + 14, playerRail*120 + 90 + 14, 100, 100 }; gameraMode = false; framesCounter = 0; } } break; default: break; } //---------------------------------------------------------------------------------- // Draw //---------------------------------------------------------------------------------- BeginDrawing(); ClearBackground(RAYWHITE); // Draw background (common to all screens) DrawTexture(sky, 0, 0, WHITE); DrawTexture(mountains, backScrolling, 0, WHITE); DrawTexture(mountains, screenWidth + backScrolling, 0, WHITE); if (!gameraMode) { DrawTexture(sea, seaScrolling, 0, BLUE); DrawTexture(sea, screenWidth + seaScrolling, 0, BLUE); } else { DrawTexture(sea, seaScrolling, 0, RED); DrawTexture(sea, screenWidth + seaScrolling, 0, RED); } switch (currentScreen) { case TITLE: { // Draw title //DrawTexture(title, screenWidth/2 - title.width/2, screenHeight/2 - title.height/2 - 80, WHITE); DrawRectangle(380, 140, 500, 300, GRAY); // Draw blinking text if ((framesCounter/30) % 2) DrawText("PRESS ENTER", 480, 480, 40, BLACK); } break; case GAMEPLAY: { // Draw player //if (!gameraMode) DrawTexture(turtle, playerBounds.x - 14, playerBounds.y - 14, WHITE); //else DrawTexture(gamera, playerBounds.x - 64, playerBounds.y - 64, WHITE); // Draw player bounding box if (!gameraMode) DrawRectangleRec(playerBounds, GREEN); else DrawRectangleRec(playerBounds, ORANGE); } break; case ENDING: { // Draw a transparent black rectangle that covers all screen DrawRectangle(0, 0, screenWidth, screenHeight, Fade(BLACK, 0.4f)); DrawText("GAME OVER", 300, 200, 100, MAROON); // Draw blinking text if ((framesCounter/30) % 2) DrawText("PRESS ENTER to REPLAY", 400, 420, 30, LIGHTGRAY); } break; default: break; } EndDrawing(); //---------------------------------------------------------------------------------- } // De-Initialization //-------------------------------------------------------------------------------------- // Unload textures UnloadTexture(sky); UnloadTexture(mountains); UnloadTexture(sea); UnloadTexture(title); UnloadTexture(turtle); UnloadTexture(gamera); CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- return 0; }