thecplusplusguy

Simple pong game (SDL) - main.cpp

Jul 4th, 2011
1,822
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.46 KB | None | 0 0
  1. //Simple pong game - main.cpp
  2. //created by thecplusplusguy
  3. //     http://www.youtube.com/user/thecplusplusguy
  4. #include <SDL/SDL.h>
  5. #include <iostream>
  6. #include <SDL/SDL_ttf.h>
  7. #include <SDL/SDL_mixer.h>
  8. #include "ball.h"
  9. #include "paddle.h"
  10.  
  11. SDL_Surface* load_image(const char* c,Uint32 colorkey=0)
  12. {
  13.     SDL_Surface* tmp=SDL_LoadBMP(c);
  14.     if(colorkey!=0)
  15.     {
  16.         SDL_SetColorKey(tmp,SDL_SRCCOLORKEY,colorkey);
  17.     }
  18.     return tmp;
  19. }
  20.  
  21. int main(int argc,char* argv[])
  22. {
  23.     SDL_Surface* screen,*icon;
  24.     const int width=640;
  25.     const int FPS=30;
  26.     const int height=480;
  27.     screen=SDL_SetVideoMode(width,height,32,SDL_SWSURFACE);
  28.     icon=load_image("icon.bmp");
  29.     SDL_WM_SetIcon(icon,NULL);
  30.     SDL_WM_SetCaption("Pong game",NULL);
  31.     TTF_Font* font;
  32.     TTF_Init();
  33.     Mix_OpenAudio(22050,MIX_DEFAULT_FORMAT,2,4096);
  34.     Mix_Music* music;
  35.     Mix_Chunk* effect;
  36.     music=Mix_LoadMUS("Hackbeat.wav");
  37.     effect=Mix_LoadWAV("bassdrum1.wav");
  38.     Mix_PlayMusic(music,-1);
  39.     font=TTF_OpenFont("air.ttf",20);
  40.     SDL_Color color = {0,0,0};
  41.     SDL_Event event;
  42.     Uint32 start;
  43.     bool running=true;
  44.     bool arr[4] = {0,0,0,0};
  45.     paddle player1(load_image("paddle.bmp"),0,225,10,50,3);
  46.     paddle player2(load_image("paddle.bmp"),width-10,225,10,50,3);
  47.     ball ball1(load_image("ball.bmp",SDL_MapRGB(screen->format,0x00,0xff,0xff)),320,240,20,20,3,3);
  48.     while(running)
  49.     {
  50.         start=SDL_GetTicks();
  51.         //handle events
  52.         while(SDL_PollEvent(&event))
  53.         {
  54.             switch(event.type)
  55.             {
  56.                 case SDL_QUIT:
  57.                     running=false;
  58.                     break;
  59.                 case SDL_KEYDOWN:
  60.                     switch(event.key.keysym.sym)
  61.                     {
  62.                         case SDLK_UP:
  63.                             arr[0]=1;
  64.                             break;
  65.                         case SDLK_DOWN:
  66.                             arr[1]=1;
  67.                             break;
  68.  
  69.                         case SDLK_w:
  70.                             arr[2]=1;
  71.                             break;
  72.                         case SDLK_s:
  73.                             arr[3]=1;
  74.                             break;
  75.                     }
  76.                     break;
  77.                 case SDL_KEYUP:
  78.                     switch(event.key.keysym.sym)
  79.                     {
  80.                         case SDLK_UP:
  81.                             arr[0]=0;
  82.                             break;
  83.                         case SDLK_DOWN:
  84.                             arr[1]=0;
  85.                             break;
  86.  
  87.                         case SDLK_w:
  88.                             arr[2]=0;
  89.                             break;
  90.                         case SDLK_s:
  91.                             arr[3]=0;
  92.                             break;
  93.                     }
  94.                     break;
  95.             }
  96.         }
  97.         //logic
  98.         if(arr[0])
  99.             player2.moveUp();
  100.         else if(arr[1])
  101.             player2.moveDown();
  102.         if(arr[2])
  103.             player1.moveUp();
  104.         else if(arr[3])
  105.             player1.moveDown();
  106.         ball1.move(player1.getRect(),player2.getRect(),effect);
  107.         switch(ball1.isOut())
  108.         {
  109.             case 1:
  110.                 player2.incpoint();
  111.                 player1.setBack(0,225,10,50,3);
  112.                 player2.setBack(width-10,225,10,50,3);
  113.                 ball1.setBack(320,240,20,20,3,3);
  114.                 break;
  115.             case 2:
  116.                 player1.incpoint();
  117.                 player1.setBack(0,225,10,50,3);
  118.                 player2.setBack(width-10,225,10,50,3);
  119.                 ball1.setBack(320,240,20,20,3,3);
  120.                 break;
  121.         }
  122.  
  123.         //render
  124.         SDL_FillRect(screen,&screen->clip_rect,SDL_MapRGB(screen->format,0xff,0xff,0xff));
  125.         player1.show();
  126.         player2.show();
  127.         ball1.show();
  128.  
  129.         char c[5];
  130.         SDL_Rect tmp = {10,0};
  131.         sprintf(c,"%d",player1.getPoints());
  132.         SDL_Surface* text=TTF_RenderText_Solid(font,c,color);
  133.         SDL_BlitSurface(text,NULL,screen,&tmp);
  134.  
  135.         tmp.x=width-40;
  136.         sprintf(c,"%d",player2.getPoints());
  137.         text=TTF_RenderText_Solid(font,c,color);
  138.         SDL_BlitSurface(text,NULL,screen,&tmp);
  139.         SDL_FreeSurface(text);
  140.  
  141.         SDL_Flip(screen);
  142.         //regulate FPS
  143.         if(1000/FPS>(SDL_GetTicks()-start))
  144.             SDL_Delay(1000/FPS-(SDL_GetTicks()-start));
  145.     }
  146.     //deinitailaze everything
  147.     SDL_FreeSurface(icon);
  148.     Mix_FreeMusic(music);
  149.     Mix_FreeChunk(effect);
  150.     Mix_CloseAudio();
  151.     TTF_CloseFont(font);
  152.     TTF_Quit();
  153.     SDL_Quit();
  154. }
Advertisement
Add Comment
Please, Sign In to add comment