横スクロールアクションゲーム

#include <SDL2/SDL.h>

#define SCREEN_WIDTH 640
#define SCREEN_HEIGHT 480
#define PLAYER_WIDTH 50
#define PLAYER_HEIGHT 50

int main(int argc, char* argv[])
{
   SDL_Window* window = NULL;
   SDL_Renderer* renderer = NULL;
   SDL_Texture* playerTexture = NULL;
   SDL_Texture* obstacleTexture = NULL;
   SDL_Rect playerRect = {SCREEN_WIDTH/2 - PLAYER_WIDTH/2, SCREEN_HEIGHT/2 - PLAYER_HEIGHT/2, PLAYER_WIDTH, PLAYER_HEIGHT};
   SDL_Rect obstacleRect = {SCREEN_WIDTH, SCREEN_HEIGHT - 100, 50, 50};
   int obstacleSpeed = 5;
   int playerSpeed = 10;
   int isJumping = 0;
   int jumpSpeed = 20;
   int jumpHeight = 200;
   int jumpCounter = 0;

   SDL_Init(SDL_INIT_VIDEO);

   window = SDL_CreateWindow("Simple Game", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);
   renderer = SDL_CreateRenderer(window, -1, 0);

   SDL_Surface* surface = SDL_LoadBMP("player.bmp");
   playerTexture = SDL_CreateTextureFromSurface(renderer, surface);
   SDL_FreeSurface(surface);

   surface = SDL_LoadBMP("obstacle.bmp");
   obstacleTexture = SDL_CreateTextureFromSurface(renderer, surface);
   SDL_FreeSurface(surface);

   while (1)
   {
       SDL_Event event;
       while (SDL_PollEvent(&event))
       {
           if (event.type == SDL_QUIT)
               return 0;
           else if (event.type == SDL_KEYDOWN)
           {
               if (event.key.keysym.sym == SDLK_SPACE && !isJumping)
               {
                   isJumping = 1;
               }
           }
       }

       if (isJumping)
       {
           jumpCounter += jumpSpeed;
           playerRect.y -= jumpSpeed;
           if (jumpCounter >= jumpHeight)
           {
               isJumping = 0;
               jumpCounter = 0;
           }
       }
       else
       {
           playerRect.y += playerSpeed;
       }

       obstacleRect.x -= obstacleSpeed;
       if (obstacleRect.x < -obstacleRect.w)
       {
           obstacleRect.x = SCREEN_WIDTH;
       }

       SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
       SDL_RenderClear(renderer);

       SDL_RenderCopy(renderer, playerTexture, NULL, &playerRect);
       SDL_RenderCopy(renderer, obstacleTexture, NULL, &obstacleRect);

       SDL_RenderPresent(renderer);
       SDL_Delay(10);
   }

   SDL_DestroyTexture(playerTexture);
   SDL_DestroyTexture(obstacleTexture);
   SDL_DestroyRenderer(renderer);
   SDL_DestroyWindow(window);
   SDL_Quit

この記事が気に入ったらサポートをしてみませんか?