亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C++版本簡易Flappy bird

2020-01-26 15:08:03
字體:
來源:轉載
供稿:網友

大一,上學期學完了C,寫了幾個控制臺游戲
這學期自學C++,由于學校課程第七周才有C++

邊學邊寫了這個小游戲,SDL 圖形庫完成的圖形繪畫
時間匆忙,BUG也有,代碼效率比較低
和原作品還是很大的差別, 源代碼在附件游戲文件夾中

演示圖

#include <stdlib.h> #include<windows.h>   #include <time.h>#include<conio.h>#include <iostream> #include <mmsystem.h> #include "SDL/SDL_image.h"#include "SDL/SDL_ttf.h"#include "SDL/SDL.h"using namespace std;#pragma comment(lib, "winmm.lib") #pragma comment(linker, "/subsystem:/"windows/" /entry:/"mainCRTStartup/"")  int iii=0; int score =0; int y=0; int posi[3][2]= {{640,-300},{940,-300},{1240,-300}};int i=0,n=3;  //n為管道對數SDL_Color textColor_1 = { 37, 134, 108 };//綠色//SDL_Color textColor_2 = { 112, 112, 35 };SDL_Color textColor_2 = { 255, 255, 255 }; //白色 SDL_Color textColor_3 = { 0, 88, 132 }; //白色 class Event{public:  SDL_Event event;  Uint8 *keystates;  Event()  {    keystates=SDL_GetKeyState( NULL );  }  };Event thing;class Data{public:  int bird_y;  int score;  int posi[20][2];  SDL_Rect bird_1;  SDL_Rect bird_2;  SDL_Rect bg;  SDL_Rect welcome;  SDL_Rect pipe_up;  SDL_Rect pipe_down;  SDL_Rect bird_cls;  SDL_Rect foot;   SDL_Surface* load_imag(char *s)  {    SDL_Surface* temp;    temp=IMG_Load(s);     bg.x=0;    bg.y=0;    bg.w=640;    bg.h=480;     welcome.x=681;    welcome.y=0;    welcome.w=640;    welcome.h=480;     bird_1.x=17;    bird_1.y=508;    bird_1.w=52;    bird_1.h=34;     bird_2.x=461;    bird_2.y=531;    bird_2.w=52;    bird_2.h=33;     bird_cls.w=52;    bird_cls.h=33;    bird_cls.x=0;    bird_cls.y=0;         pipe_up.x=1361;    pipe_up.y=11;    pipe_up.w=103;    pipe_up.h=410;     pipe_down.x=1487;    pipe_down.y=14;    pipe_down.w=103;    pipe_down.h=443;     foot.x=0;    foot.y=404;    foot.w=640;    foot.h=80;         return temp;//SDL_DisplayFormat( temp );  }   TTF_Font* load_font()  {    SDL_Init( SDL_INIT_EVERYTHING );    TTF_Init();    return TTF_OpenFont( "main_1.dat", 36 );   }}; Data data; class Pri{ public:  SDL_Surface* out; //輸出  SDL_Surface* main ; //主窗口  TTF_Font *font;  SDL_Rect a; //設置初始位置  SDL_Surface*bird;  SDL_Rect xy;  SDL_Surface*font_1;  SDL_Surface*font_2;  SDL_Surface*font_11;  SDL_Surface*font_22;    Pri()  {      TTF_Font *font = NULL;      init();//初始化輸出設備       }   int init()  {    SDL_Init( SDL_INIT_EVERYTHING );    TTF_Init();    main= SDL_SetVideoMode( 640, 478, 32, SDL_SWSURFACE );    SDL_WM_SetCaption("Flappy bird",NULL);//標題    font=data.load_font();    out=data.load_imag("main_2.dat");    y=150;       posi[0][0]=640;    posi[0][1]=-300;    posi[1][0]=940;    posi[1][1]=-300;    posi[2][0]=1240;    posi[2][1]=-300;    return 1;  }   int pipe()  {   }   int bir(int y)//x=150  {int ii;  i+=1;  xy.x=150;  xy.y=y;  if(i<14)       {      xy.x=150;      xy.y=y;      SDL_BlitSurface(out,&data.bg,main,NULL);              for(ii=0;ii<n;ii++)      {        xy.x=posi[ii][0];        xy.y=posi[ii][1];        SDL_BlitSurface(out,&data.pipe_down,main,&xy);        xy.x=posi[ii][0];        xy.y=posi[ii][1]+600;        SDL_BlitSurface(out,&data.pipe_up,main,&xy);       }           xy.x=150;      xy.y=y;      SDL_BlitSurface(out,&data.bird_1,main,&xy);    xy.x=0;      xy.y=404;      SDL_BlitSurface(out,&data.foot,main,&xy);       }          else    {      xy.x=150;      xy.y=y;      SDL_BlitSurface(out,&data.bg,main,NULL);      for(ii=0;ii<n;ii++)      {        xy.x=posi[ii][0];        xy.y=posi[ii][1];        SDL_BlitSurface(out,&data.pipe_down,main,&xy);         xy.x=posi[ii][0];        xy.y=posi[ii][1]+600;        SDL_BlitSurface(out,&data.pipe_up,main,&xy);       }       xy.x=150;      xy.y=y;      SDL_BlitSurface(out,&data.bird_2,main,&xy);      xy.x=0;      xy.y=404;      SDL_BlitSurface(out,&data.foot,main,&xy);      if(i>28)i=0;    }    return 0;        }   int bg()  {      SDL_BlitSurface(out,&data.bg,main,&xy);             return 0;  }   int over()  {    int x=0,y=0,i=0;     xy.x=250;    xy.y=150;    font_1=TTF_RenderText_Solid( font, "Game over !", textColor_3);    SDL_BlitSurface( font_1 , NULL, main, &xy);     SDL_Flip(main);     xy.x=350;    xy.y=200;    font_1=TTF_RenderText_Solid( font, "Retry game", textColor_1 );    font_11=TTF_RenderText_Solid( font, "Retry game", textColor_2 );    SDL_BlitSurface( font_1 , NULL, main, &xy);           xy.x=350;    xy.y=280;     font_2=TTF_RenderText_Solid( font, " Exit game", textColor_1 );    font_22=TTF_RenderText_Solid( font, " Exit game", textColor_2 );    SDL_BlitSurface( font_2 , NULL, main, &xy); /*    xy.x=10;    xy.y=440;    //野指針    SDL_BlitSurface( TTF_RenderText_Solid( font, "Esc:exit game  Space:to jump hekun ", textColor_1 ) , NULL, main, &xy);     SDL_Flip( main ); //更新窗口    */     while(SDL_PollEvent( &thing.event ), 1)    {      i+=2;      Sleep(1);      if( thing.keystates[ SDLK_ESCAPE] )exit(0);      if( thing.event.type == SDL_QUIT )// 點擊了SDL關閉按鈕      {        exit(0);      }         if((x>350&&x<540)&&(y<240)&&(y>200))      {        if(thing. event.type == SDL_MOUSEBUTTONDOWN)          if(thing.event.button.button== SDL_BUTTON_LEFT )          {            SDL_FreeSurface(font_1);            SDL_FreeSurface(font_11);            SDL_FreeSurface(font_22);            SDL_FreeSurface(font_2);          WinExec("Flappy bird.exe",NULL);          exit(0);            return 11;          }        }      else      {        }         if((x>350&&x<540)&&(y<320)&&(y>280))  //結束游戲      {        if(thing. event.type == SDL_MOUSEBUTTONDOWN)          if(thing.event.button.button== SDL_BUTTON_LEFT )exit(0);       }        if(thing. event.type == SDL_MOUSEMOTION )      {        x=thing.event.motion.x;        y=thing.event.motion.y;         //獲得鼠標坐標        if((thing.event.motion.x>350&&thing.event .motion .x<540)&&(thing.event.motion.y<240)&&(thing.event.motion.y>200))        {          xy.x=350;          xy.y=200;          SDL_BlitSurface( font_11, NULL, main, &xy);           SDL_Flip(main);        }        else        {          xy.x=350;          xy.y=200;          SDL_BlitSurface( font_1 , NULL, main, &xy);           SDL_Flip(main);        }           if((thing.event.motion.x>350&&thing.event .motion .x<540)&&(thing.event.motion.y<320)&&(thing.event.motion.y>280))        {          xy.x=350;          xy.y=280;          SDL_BlitSurface( font_22 , NULL, main, &xy);           SDL_Flip(main);          }        else        {          xy.x=350;          xy.y=280;          SDL_BlitSurface( font_2 , NULL, main, &xy);           SDL_Flip(main);        }      }       }    return 0;  }   int welcome()  {         int x=0,y=0,i=0;      SDL_BlitSurface(out,&data.welcome,main,NULL);    bird=out;    xy.x=350;    xy.y=200;    font_1=TTF_RenderText_Solid( font, "Start game", textColor_1 );    font_11=TTF_RenderText_Solid( font, "Start game", textColor_2 );    SDL_BlitSurface( font_1 , NULL, main, &xy);      xy.x=350;    xy.y=280;     font_2=TTF_RenderText_Solid( font, " Exit game", textColor_1 );    font_22=TTF_RenderText_Solid( font, " Exit game", textColor_2 );    SDL_BlitSurface( font_2 , NULL, main, &xy);      xy.x=10;    xy.y=440;    //野指針    SDL_BlitSurface( TTF_RenderText_Solid( font, "Esc:exit game  Space:to jump hekun ", textColor_1 ) , NULL, main, &xy);     SDL_Flip( main ); //更新窗口          while(SDL_PollEvent( &thing.event ), 1)    {      i+=2;      Sleep(1);      if( thing.keystates[ SDLK_ESCAPE] )exit(0);      if( thing.event.type == SDL_QUIT )// 點擊了SDL關閉按鈕      {        exit(0);      }         if((x>350&&x<540)&&(y<240)&&(y>200))      {        if(thing. event.type == SDL_MOUSEBUTTONDOWN)          if(thing.event.button.button== SDL_BUTTON_LEFT )          {            SDL_FreeSurface(font_1);            SDL_FreeSurface(font_11);            SDL_FreeSurface(font_22);            SDL_FreeSurface(font_2);            return 0;          }                  }      else      {                      }         if((x>350&&x<540)&&(y<320)&&(y>280))  //結束游戲      {        if(thing. event.type == SDL_MOUSEBUTTONDOWN)          if(thing.event.button.button== SDL_BUTTON_LEFT )exit(0);       }            if(thing. event.type == SDL_MOUSEMOTION )      {        x=thing.event.motion.x;        y=thing.event.motion.y;         //獲得鼠標坐標        if((thing.event.motion.x>350&&thing.event .motion .x<540)&&(thing.event.motion.y<240)&&(thing.event.motion.y>200))        {          xy.x=350;          xy.y=200;          SDL_BlitSurface( font_11, NULL, main, &xy);           SDL_Flip(main);        }        else        {          xy.x=350;          xy.y=200;          SDL_BlitSurface( font_1 , NULL, main, &xy);           SDL_Flip(main);        }            if((thing.event.motion.x>350&&thing.event .motion .x<540)&&(thing.event.motion.y<320)&&(thing.event.motion.y>280))        {          xy.x=350;          xy.y=280;          SDL_BlitSurface( font_22 , NULL, main, &xy);           SDL_Flip(main);                }        else        {          xy.x=350;          xy.y=280;          SDL_BlitSurface( font_2 , NULL, main, &xy);           SDL_Flip(main);        }      }              if(i==400)      {        xy.x=150;        xy.y=250;        SDL_BlitSurface(bird,&data.bird_1,main,&xy);        SDL_Flip(main);      }             if(i==800)      {        xy.x=150;        xy.y=250;        SDL_BlitSurface(bird,&data.bird_2,main,&xy);        i=0;        SDL_Flip(main);      }      }    return 0;     }   }; Pri pri;   int game_judge(){int i=0;  if(y>370||y<-10)  {    if(pri.over()==11)return 12;   }   for(i=0;i<3;i++)  {    if(posi[i][0]<202 &&posi[i][0]>50)    {      if(y<posi[i][1]+ 420 ||y>posi[i][1]+570)      {if(pri.over()==11)return 12;}    }   }    return 0;}   int game_loop(){ y=150,i=0;  int ii=0,iii=0;  SDL_Surface *font;  pri.bg();   char s[50];  Uint32 start = 0;  sprintf(s," FPS:%d/t/t/t/t/t/t/t/tScore:%d",1000/(SDL_GetTicks()-start),score);   int q=0;while(SDL_PollEvent( &thing.event ), 1){   start = SDL_GetTicks();  i++;  Sleep(1);  SDL_Flip(pri.main);  y+=4;  if(y>430)y=100;   if(thing.event.button.state==SDL_PRESSED)y-=20;  if( thing.keystates[ SDLK_SPACE] )y-=20;  if( thing.keystates[ SDLK_ESCAPE] )exit(0);  if( thing.event.type == SDL_QUIT )// 點擊了SDL關閉按鈕  {    exit(0);  }      if(game_judge()==12)return 0;     pri.bir(y);       //顯示 每秒循環的次數     ii++;    if(ii>20)      {      sprintf(s," FPS:%d/t/t/t/t/t/t/t/tScore:%d",1000/(SDL_GetTicks()-start)+rand()%5,score);      ii=0;    }                  font=TTF_RenderText_Solid( pri.font, s, textColor_2 );      SDL_BlitSurface(font , NULL,pri. main, NULL);       SDL_Flip(pri.main);      SDL_FreeSurface(font);       posi[0][0]-=2;      posi[1][0]-=2;      posi[2][0]-=2;       if(posi[0][0]<=(-110))      {posi[0][0]=posi[2][0]+300;posi[0][1]=-(rand()%180)-220;}         if(posi[1][0]<=(-110))      {posi[1][0]=posi[0][0]+300;posi[1][1]=-(rand()%180)-220;}        if(posi[2][0]<=(-110))      {posi[2][0]=posi[1][0]+300;posi[2][1]=-(rand()%180)-220;}                   iii++;      if(iii>50)       for(iii=0;iii<3;iii++)      {        if(posi[iii][0]<50);        score++;        iii=0;        break;      } }   return 0; } int main(int argc, char* argv[]){     while(1)  {       pri.init();//初始化輸出設備    pri.welcome();    game_loop();     }  return 0;} 

以上所述就是本文的全部內容了,希望大家能夠喜歡。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美日韩中文在线| 亚洲成人性视频| 日韩h在线观看| 精品一区二区电影| 久久综合久久美利坚合众国| 欧美最猛性xxxxx亚洲精品| 欧美激情高清视频| 亚洲美女www午夜| 欧美日韩成人网| 91精品国产高清| 久久久精品一区二区| 97久久久久久| 亚洲国产高清高潮精品美女| 一本大道亚洲视频| 一个人看的www久久| 疯狂蹂躏欧美一区二区精品| 日韩有码在线视频| 国产精品国模在线| 国产亚洲人成网站在线观看| 国产精品久在线观看| 中文字幕亚洲一区二区三区| 亚洲国产精品久久精品怡红院| 亚洲日韩第一页| 久久精品视频导航| 国产亚洲人成网站在线观看| 国产成人aa精品一区在线播放| 综合136福利视频在线| www日韩欧美| 国产成人精品免费久久久久| 欧美激情啊啊啊| 日韩毛片在线看| 欧美另类极品videosbest最新版本| 国产日韩欧美视频在线| 亲爱的老师9免费观看全集电视剧| 九九精品在线视频| 一个人www欧美| 日韩美女在线观看一区| 91九色国产视频| 亚洲无限乱码一二三四麻| 深夜福利91大全| 日本高清+成人网在线观看| 亚洲性日韩精品一区二区| 8050国产精品久久久久久| 欧美尤物巨大精品爽| 亚洲国产精品高清久久久| 久久久久久久成人| 色偷偷9999www| 欧美精品生活片| 国产精品久久久久久久久粉嫩av| 欧美理论片在线观看| 亚洲综合成人婷婷小说| 国模精品视频一区二区三区| 日本一区二区在线播放| 亚洲男人的天堂在线播放| 亚洲第一av在线| 精品美女久久久久久免费| 亚洲国产毛片完整版| 91在线高清免费观看| 欧美日韩国产区| www.99久久热国产日韩欧美.com| 欧美日韩国产中文精品字幕自在自线| 国产精品美女网站| 欧美性xxxxxx| 福利一区福利二区微拍刺激| 国产精品h在线观看| 国产这里只有精品| 欧美成人午夜激情| 国产成人精品a视频一区www| 色综合久久88| 最好看的2019的中文字幕视频| 欧美大片第1页| 亚洲欧美激情在线视频| 97精品国产91久久久久久| 92看片淫黄大片欧美看国产片| 亚洲白拍色综合图区| 欧美成人免费va影院高清| 精品一区二区三区三区| 国产亚洲欧美另类中文| 中文字幕一精品亚洲无线一区| 亚洲电影免费观看高清完整版在线| 亚洲国产精品高清久久久| xxav国产精品美女主播| 欧美久久精品午夜青青大伊人| 久久亚洲精品网站| 国产免费观看久久黄| 欧美大片在线免费观看| 色综合久久天天综线观看| 韩国国内大量揄拍精品视频| 欧美性开放视频| 最近中文字幕mv在线一区二区三区四区| 色噜噜亚洲精品中文字幕| 亚洲天堂2020| 热门国产精品亚洲第一区在线| 午夜精品一区二区三区av| 国产精品美女久久久久久免费| 欧美亚洲视频一区二区| 中文字幕成人在线| 精品视频www| 欧美精品一区三区| 成人a级免费视频| 日本精品免费一区二区三区| 亚洲免费影视第一页| 国产精品91在线观看| 在线播放日韩精品| 久久综合88中文色鬼| 亚洲色图日韩av| 亚洲第一免费播放区| 国产综合视频在线观看| 久久全球大尺度高清视频| 91视频免费网站| 国模叶桐国产精品一区| 国产成人亚洲综合91精品| 久久国产精品久久久| 中文字幕日韩av综合精品| 久久国产精品久久精品| 91天堂在线视频| 国产一区二区三区三区在线观看| 欧美激情中文字幕在线| 久久久精品久久| 97香蕉超级碰碰久久免费软件| 欧美一级片一区| 久久综合久久八八| 日韩在线视频国产| 亚洲一区二区精品| 亚洲日本中文字幕免费在线不卡| 国产成人aa精品一区在线播放| 九色精品免费永久在线| 亚洲黄色片网站| 国产精品白丝jk喷水视频一区| 精品国产一区二区三区久久久| 中文字幕日韩专区| 久久久久久999| 欧美一区二区三区免费视| 久久久久成人网| 亚洲高清不卡av| 国产精品99久久久久久www| 亚洲人成欧美中文字幕| 精品亚洲男同gayvideo网站| 色99之美女主播在线视频| 国内精品中文字幕| 久久亚洲精品一区| 丝袜美腿亚洲一区二区| 午夜精品国产精品大乳美女| 国产欧美一区二区三区久久| 精品视频久久久久久| 久久久视频在线| 亚洲成人黄色在线观看| 久久久91精品国产| 亚洲一区二区三区在线免费观看| 亚洲综合国产精品| 亚洲国产精品久久久久久| 欧美日韩中国免费专区在线看| 日韩视频欧美视频| 在线观看成人黄色| 91九色在线视频| 最近2019年日本中文免费字幕| 欧美一级片免费在线| 美女av一区二区三区| 日韩成人黄色av| 中文字幕综合一区| 欧美猛交ⅹxxx乱大交视频| 国产精品久久久亚洲| 成人福利免费观看| 亚洲欧美日韩国产精品|