2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩19頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p>  《面向?qū)ο缶幊碳夹g(shù)》</p><p><b>  課程設(shè)計(jì)實(shí)習(xí)報(bào)告</b></p><p>  課題名稱:子彈打飛機(jī)</p><p>  一、課題名稱:子彈打飛機(jī) </p><p>  二、課程設(shè)計(jì)目的與意義:</p><p>  (1)學(xué)會(huì)綜合運(yùn)用C++教材中的基礎(chǔ)理論知識(shí)

2、,并學(xué)習(xí)專業(yè)編程中廣為借鑒的一些經(jīng)典的編程模式,聯(lián)系具體事例,解決實(shí)際問題,達(dá)到深入領(lǐng)會(huì)理論分析解決實(shí)際問題,培養(yǎng)一定的編程實(shí)踐能力的目的;</p><p>  (2)要求學(xué)生對(duì)生活中許多具體的事物抽象出類并掌握繼承和派生類、基類、虛函數(shù)和多態(tài)的概念,通過課程設(shè)計(jì)掌握《C++語(yǔ)言程序設(shè)計(jì)》的編程思想,培養(yǎng)我實(shí)際操作能力和實(shí)踐能力,為后續(xù)課程打下基礎(chǔ)。</p><p>  (3)通過課程設(shè)計(jì)

3、,加深對(duì)結(jié)構(gòu)化設(shè)計(jì)思想的理解,能對(duì)系統(tǒng)功能進(jìn)行分析,并設(shè)計(jì)合理的模塊化結(jié)構(gòu);</p><p> ?。?)通過課程設(shè)計(jì),提高程序開發(fā)功能,能合理的清晰高效的流程;</p><p> ?。?)通過課程設(shè)計(jì),訓(xùn)練C++語(yǔ)言的調(diào)試能力,培養(yǎng)分析問題和解決實(shí)際問題的能力。</p><p>  三、設(shè)計(jì)思路簡(jiǎn)介與流程圖:</p><p>  1、子彈打飛

4、機(jī)簡(jiǎn)介:</p><p>  該課程設(shè)計(jì)--《子彈打飛機(jī)》寫于2013年11月下旬至12月中下旬,于2013年12月21日,在圖書館一樓書吧完成?!蹲訌棿蝻w機(jī)》基本實(shí)現(xiàn)了游戲的需求,但是由于個(gè)人能力有限,現(xiàn)在已經(jīng)實(shí)現(xiàn)了飛機(jī)的平行移動(dòng)、飛機(jī)的移動(dòng)速度以及子彈的飛行速度的控制,在《子彈打飛機(jī)》游戲里面建立了一個(gè)滿足該游戲需要的地圖資源,子彈的模擬運(yùn)動(dòng)過程以及飛機(jī)的運(yùn)動(dòng)過程。地圖資源其中包含地圖資源坐標(biāo)的建立,游戲資源

5、的地圖清單、緩沖區(qū)控制臺(tái)屏幕的處理以及游戲聲音效果的產(chǎn)生。子彈的模擬運(yùn)動(dòng)過程包括子彈的飛行軌跡的產(chǎn)生、繪制、消除以及障礙物碰撞情況的分析。</p><p>  《子彈打飛機(jī)》通過玩家發(fā)射子彈攻擊飛機(jī),當(dāng)飛機(jī)子彈打中的時(shí)候會(huì)發(fā)生消除,飛機(jī)消失,游戲共設(shè)15發(fā)子彈,子彈打完游戲結(jié)束,,玩家按下“j ”鍵發(fā)射子彈,每發(fā)射一發(fā)子彈,,每打中一次飛機(jī),分?jǐn)?shù)加一,一直到滿100,游戲結(jié)束!</p><p&

6、gt;  2、子彈打飛機(jī)技術(shù):</p><p>  該課程設(shè)計(jì)--《子彈打飛機(jī)》應(yīng)用了面向?qū)ο蟪绦蛟O(shè)計(jì)的基本內(nèi)容,由于在初創(chuàng)時(shí)期的思路以及后期的補(bǔ)充,采用了游戲的設(shè)計(jì)思路,但是沒有采用到考慮用游戲引擎,所以采用了大量?jī)?nèi)容,但是歸根結(jié)底都沒有脫離面向?qū)ο蟪绦蛟O(shè)計(jì)的內(nèi)容。該課程設(shè)計(jì)使用了SDL庫(kù),以及相關(guān)的擴(kuò)展庫(kù)?!蹲訌棿蝻w機(jī)》中主要的還是在地圖的建立方面,對(duì)于這一方面我做了很長(zhǎng)時(shí)間,去網(wǎng)上查了好多資料,然后才開始寫

7、的地圖構(gòu)建部分。另一個(gè)主要的東西就是C++類的構(gòu)建與調(diào)用、類的結(jié)構(gòu)。由于SDL資料甚少,其中有些功能還未實(shí)現(xiàn),例如背景空白的圖片仍然有背景。</p><p>  3、子彈打飛機(jī)運(yùn)行環(huán)境:</p><p>  Visual Studio 2012 </p><p>  四、設(shè)計(jì)實(shí)現(xiàn)與運(yùn)行:</p><p>  1.首先使用load_im

8、age()函數(shù)對(duì)圖片的格式進(jìn)行轉(zhuǎn)化成標(biāo)準(zhǔn)格式然后用load_files()函數(shù)加載圖片。接著初始化SDL以及各類。</p><p>  2、Board、Buffet、Plane、Welcome類的構(gòu)建:</p><p>  下表為Board、Buffet、Plane、Welcome類的成員函數(shù)一覽表</p><p>  COORD point是新指針位置坐標(biāo); CO

9、ORD 是一個(gè)基于地理坐標(biāo)及其他參數(shù),生成一個(gè)前往地圖資源清單的鏈接,并提供一個(gè)標(biāo)準(zhǔn)化的坐標(biāo)表示法。</p><p>  3、游戲主要運(yùn)行界面介紹</p><p>  1、主界面:用于告知玩家游戲選擇</p><p><b>  2、游戲界面</b></p><p><b>  3、游戲結(jié)束界面</b&g

10、t;</p><p><b>  五、分析與總結(jié):</b></p><p>  1、static局部對(duì)象在函數(shù)調(diào)用結(jié)束時(shí)對(duì)象并不釋放局部對(duì)象,因此也不調(diào)用析構(gòu)函數(shù),只在main函數(shù)結(jié)束或調(diào)用exit函數(shù)結(jié)束程序時(shí),才調(diào)用static局部對(duì)象的析構(gòu)函數(shù);</p><p>  2、在應(yīng)用new和delete時(shí)報(bào)錯(cuò)許多,因?yàn)閷?duì)new和delete的用

11、法不是很好,所以導(dǎo)致錯(cuò)誤連連,以至于只在Buffet文件中用了此用法。</p><p>  3、在類的成員調(diào)用時(shí),因?yàn)槌蓡T變量為私有變量,所以調(diào)用時(shí)是受保護(hù)的,必須通過成員函數(shù)對(duì)成員變量進(jìn)行修改、賦值等操作。</p><p>  4、構(gòu)造函數(shù)是一種特殊的成員函數(shù),與其他成員函數(shù)不同,不需要用戶來調(diào)用,而是在建立對(duì)象時(shí)自動(dòng)執(zhí)行。構(gòu)造函數(shù)的名字必須與類名同名,而不能由用戶任意命名,以便編譯系統(tǒng)

12、能識(shí)別它并把它作為構(gòu)造函數(shù)處理編譯系統(tǒng)能識(shí)別;</p><p>  5、構(gòu)造函數(shù)沒有返回值,因此也不需要在定義構(gòu)造函數(shù)時(shí)聲明類型,這是它和一般函數(shù)的一個(gè)重要的不同之點(diǎn)。在構(gòu)造函數(shù)的函數(shù)體中不僅可以對(duì)數(shù)據(jù)成員賦初值值,而且可以包含其他語(yǔ)句。但是一般不提倡在構(gòu)造函數(shù)中加入與初始化無關(guān)的內(nèi)容,以保持程序的清晰;構(gòu)造函數(shù)會(huì)隨著對(duì)象的創(chuàng)建自動(dòng)被調(diào)用,主要是為對(duì)象作初始化,與類同名的成員函數(shù)就是構(gòu)造函數(shù),公有的 ;</

13、p><p>  6、關(guān)于重載一定要注意:重載函數(shù)的參數(shù)類型和參數(shù)個(gè)數(shù)一定要不同(即:要么參數(shù)的類型不同,要么參數(shù)的個(gè)數(shù)不同,要么參數(shù)的類型和個(gè)數(shù)都不同),否則,編譯器就不知道該調(diào)用那個(gè)函數(shù)了; </p><p>  7、析構(gòu)函數(shù)的作用并不是刪除對(duì)象析構(gòu)函數(shù)的作用,而是在撤銷對(duì)象占用的內(nèi)存之前完成一些清理工作,使這部分內(nèi)存可以被程序分配給新對(duì)象使用。析構(gòu)函數(shù)不返回任何值析構(gòu)函數(shù),沒有函數(shù)類型,也

14、沒有函數(shù)參數(shù);</p><p>  8、一個(gè)類可以有多個(gè)構(gòu)造函數(shù),但只能有一個(gè)析構(gòu)函數(shù),想讓析構(gòu)函數(shù)完成任何工作,都必須在定義的析構(gòu)函數(shù)中指定。并且析構(gòu)函數(shù)的調(diào)用順序和構(gòu)造函數(shù)的調(diào)用順序正好相反,在類的繼承與派生上具有很好的應(yīng)用。</p><p><b>  六、心得體會(huì):</b></p><p>  在這次的面向?qū)ο蟪绦蛟O(shè)計(jì)課程設(shè)計(jì)中,我了解

15、了關(guān)于C++的許多基本用法,以前模模糊糊的東西現(xiàn)在也基本清楚了,對(duì)于C++的學(xué)習(xí),我認(rèn)為:</p><p>  第一,是要加強(qiáng)實(shí)踐。C++程序設(shè)計(jì)語(yǔ)言是一門實(shí)踐性非常強(qiáng)的課程,若要真正掌握編程技術(shù),使編程能力有較大的實(shí)質(zhì)性的提高,必須在扎實(shí)的理論的基礎(chǔ)上,通過上機(jī)實(shí)驗(yàn)的基本技能訓(xùn)練。只有勤學(xué)苦練才能積累寶貴的編程經(jīng)驗(yàn),悟出編程技術(shù)的要領(lǐng),牢固地掌握Microsoft Visual C++開發(fā)工具,才能快速進(jìn)步。

16、</p><p>  第二,便是要學(xué)習(xí)掌握相關(guān)的C++標(biāo)準(zhǔn)庫(kù)、開發(fā)平臺(tái)技術(shù)。在眾多的計(jì)算機(jī)學(xué)科中,有很多都出現(xiàn)了內(nèi)容的交叉現(xiàn)象。我們?cè)趯W(xué)習(xí)C++的時(shí)候,能多看看有關(guān)這方面的書和查查相關(guān)的資料,對(duì)我們地學(xué)習(xí)也不無裨益。在這些庫(kù)和開發(fā)平臺(tái)技術(shù)上,我們還要鍛煉自己對(duì)目標(biāo)問題的分析和歸納能力,做到能夠知其然且知其所以然,并能舉一反三,扎實(shí)、靈活和系統(tǒng)地掌握編程要點(diǎn)。 </p><p>  第三,便

17、是要多看有關(guān)C++的資料書(應(yīng)用類書籍最好)。選取一兩本自己能夠容易看懂的書,進(jìn)行精讀,和細(xì)讀。在學(xué)校的圖書館閱覽室有很多關(guān)于編程這方面的書籍和資料,對(duì)我們的學(xué)習(xí)是一定有幫助的。 </p><p>  第四,要持之以恒,鍥而不舍。學(xué)習(xí)編程本身就是一項(xiàng)艱苦的歷程。浮躁的人、沒有忍性的人,是肯定學(xué)不好編程的。我們必須有狂熱的編程熱情,否則是很難堅(jiān)持下去的。我們也必須學(xué)會(huì)自信,因?yàn)橛行r(shí)候盡管我們花了相當(dāng)多的時(shí)間和精力

18、,我們也不能寫出一個(gè)程序。寫程序確實(shí)是很麻煩的,有時(shí)需要頓悟,有時(shí)需要漸悟。當(dāng)我們真正學(xué)好了,學(xué)精通了,我們就會(huì)因此而有一種莫言的自豪感。</p><p><b>  附源碼:</b></p><p>  #include"SDL.h"</p><p>  #include"SDL_image.h"<

19、;/p><p>  #include<string></p><p>  #include<Windows.h></p><p>  #include<time.h></p><p>  using namespace std;</p><p>  //*****************

20、***初始化所有***************************/</p><p>  SDL_Surface *background_image = NULL;</p><p>  SDL_Surface *plane_image =NULL;</p><p>  SDL_Surface *bullet_image = NULL;</p>&l

21、t;p>  SDL_Surface *screen = NULL;</p><p>  SDL_Surface *enemy_image = NULL;</p><p>  SDL_Surface* gameover_image =NULL;</p><p>  SDL_Surface* gamewin_image =NULL;</p><

22、p>  SDL_Surface* menu_image =NULL;</p><p>  SDL_Surface* start_image1 =NULL;</p><p>  SDL_Surface* start_image2 = NULL;</p><p>  SDL_Surface* boom_image = NULL;</p><p&

23、gt;  const int SCREEN_WIDTH = 320;</p><p>  const int SCREEN_HEIGHT = 480;</p><p>  const int SCREEN_BPP = 32;</p><p>  SDL_Event event;</p><p>  SDL_Rect clip[7];</

24、p><p>  /*********************功能函數(shù)*****************************/</p><p>  bool init_sdl()</p><p><b>  {</b></p><p>  if(SDL_Init(SDL_INIT_EVERYTHING)==-1)</

25、p><p><b>  {</b></p><p>  return false;</p><p><b>  }</b></p><p>  screen = SDL_SetVideoMode( SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SDL_SWSURFAC

26、E );</p><p>  if(screen == NULL)</p><p><b>  {</b></p><p>  return false;</p><p><b>  }</b></p><p>  SDL_WM_SetCaption("BAT PL

27、ANE",NULL);</p><p>  return true;</p><p><b>  }</b></p><p>  SDL_Surface *load_image(string filename)</p><p><b>  {</b></p><p>

28、;  SDL_Surface* loadedImage = NULL;</p><p>  SDL_Surface* optimizedImage = NULL;</p><p>  loadedImage = IMG_Load(filename.c_str());</p><p>  if(loadedImage!=NULL)</p><p&g

29、t;<b>  {</b></p><p>  optimizedImage = SDL_DisplayFormat(loadedImage);</p><p>  SDL_FreeSurface(loadedImage);</p><p>  if(optimizedImage!=NULL)</p><p><b

30、>  {</b></p><p>  SDL_SetColorKey(optimizedImage,SDL_SRCCOLORKEY,SDL_MapRGB( optimizedImage->format, 0, 0xFF, 0xFF ) );</p><p><b>  }</b></p><p><b>  }

31、</b></p><p>  return optimizedImage;</p><p><b>  }</b></p><p>  void apply_surface( int x, int y, SDL_Surface* source, SDL_Surface* destination,SDL_Rect* clip = NU

32、LL)</p><p><b>  {</b></p><p>  SDL_Rect offset;</p><p>  offset.x = x;</p><p>  offset.y = y;</p><p>  SDL_BlitSurface( source, clip, destinati

33、on, &offset );</p><p><b>  }</b></p><p>  bool load_files()</p><p><b>  {</b></p><p>  background_image = load_image("background.png&qu

34、ot;);</p><p>  plane_image = load_image("plane.png");</p><p>  bullet_image = load_image("bullet.png");</p><p>  enemy_image = load_image("enemy.png");

35、</p><p>  gameover_image = load_image("gameover.png");</p><p>  gamewin_image =load_image("gamewin.png");</p><p>  menu_image = load_image("menu.png");

36、</p><p>  start_image1 = load_image("start1.png");</p><p>  start_image2 = load_image("start2.png");</p><p>  if(background_image == NULL||plane_image==NULL||bul

37、let_image==NULL)</p><p><b>  {</b></p><p>  return false;</p><p><b>  }</b></p><p>  clip[0].x = 0;</p><p>  clip[0].y = 0;</p&g

38、t;<p>  clip[0].h = 49;</p><p>  clip[0].w = 44;</p><p>  clip[1].x = 0;</p><p>  clip[1].y = 44;</p><p>  clip[1].h = 49;</p><p>  clip[1].w = 44;&

39、lt;/p><p>  clip[2].x = 0;</p><p>  clip[2].y = 88;</p><p>  clip[2].h = 49;</p><p>  clip[2].w = 44;</p><p>  clip[3].x = 0;</p><p>  clip[3].y

40、= 132;</p><p>  clip[3].h = 49;</p><p>  clip[3].w = 44;</p><p>  clip[4].x = 0;</p><p>  clip[4].y = 176;</p><p>  clip[4].h = 49;</p><p>  c

41、lip[4].w = 44;</p><p>  clip[5].x = 0;</p><p>  clip[5].y = 220;</p><p>  clip[5].h = 49;</p><p>  clip[5].w = 44;</p><p>  clip[6].x = 0;</p><p

42、>  clip[6].y = 264;</p><p>  clip[6].h = 49;</p><p>  clip[6].w = 44;</p><p><b>  }</b></p><p>  void clean_sdl()</p><p><b>  {</b&

43、gt;</p><p>  SDL_FreeSurface(background_image);</p><p>  SDL_FreeSurface(plane_image);</p><p>  SDL_FreeSurface(bullet_image);</p><p>  SDL_FreeSurface(screen);</p&g

44、t;<p>  SDL_Quit();</p><p><b>  }</b></p><p>  void init_Game()</p><p><b>  {</b></p><p>  if(init_sdl()==false)</p><p><

45、b>  {</b></p><p><b>  exit(1);</b></p><p><b>  }</b></p><p>  if(load_files()==false)</p><p><b>  {</b></p><p>

46、;<b>  exit(1);</b></p><p><b>  }</b></p><p>  srand((int)time(0));</p><p><b>  }</b></p><p><b>  //刷新屏幕</b></p>&

47、lt;p>  void flip()</p><p><b>  {</b></p><p>  if( SDL_Flip( screen ) == -1 )</p><p><b>  {</b></p><p><b>  exit(1);</b></p>

48、<p><b>  }</b></p><p><b>  }</b></p><p>  int random(int a, int b)</p><p><b>  {</b></p><p>  int c=(rand() % (a-b))+ a;</

49、p><p><b>  return c;</b></p><p><b>  }</b></p><p>  //在兩個(gè)坐標(biāo)包括的矩形框內(nèi)隨機(jī)產(chǎn)生一個(gè)坐標(biāo)</p><p>  COORD random(COORD a, COORD b)</p><p><b>  {

50、</b></p><p>  int x=random(a.X, b.X);</p><p>  int y=random(a.Y, b.Y);</p><p>  COORD c={x, y};</p><p><b>  return c;</b></p><p><b>

51、;  }</b></p><p>  int ab(int n){</p><p>  if(n >= 0) </p><p>  return n ;</p><p><b>  else</b></p><p>  return -n ; </p><p&

52、gt;<b>  }</b></p><p>  //判斷兩個(gè)正方形是否重疊 </p><p>  bool judge_Coord(int x01,int x02,int y01,int y02,int x11,int x12,int y11,int y12)</p><p><b>  {</b></p>

53、<p>  int zx = ab(x01+x02-x11-x12) ; //兩個(gè)矩形重心在x軸上的距離的兩倍</p><p>  int x = ab(x01-x02)+ab(x11-x12) ; //兩矩形在x方向的邊長(zhǎng)的和</p><p>  int zy = ab(y01+y02-y11-y12) ; //重心在y軸上距離的兩倍</p><p&g

54、t;  int y = ab(y01-y02)+ab(y11-y12) ; //y方向邊長(zhǎng)的和</p><p>  if(zx <= x && zy <= y)</p><p>  return true;</p><p><b>  else</b></p><p>  return fal

55、se;</p><p><b>  }</b></p><p>  /****************************初始化飛機(jī)功能***********************************/</p><p>  typedef struct Frame</p><p><b>  {<

56、;/b></p><p>  COORD position[2];</p><p><b>  int flag;</b></p><p><b>  }Frame;</b></p><p>  class Bullet{</p><p><b>  publ

57、ic:</b></p><p>  COORD bullet[15];</p><p><b>  Bullet()</b></p><p><b>  {</b></p><p>  for(int i=0;i<15;i++)</p><p><b&

58、gt;  {</b></p><p>  bullet[i].Y=395;</p><p><b>  }</b></p><p><b>  }</b></p><p>  void draw_Bullet(int x,int y)</p><p><b&

59、gt;  {</b></p><p>  apply_surface(x,y,bullet_image,screen);</p><p><b>  }</b></p><p>  void bullet_Move()</p><p><b>  {</b></p><

60、;p>  for(int i=0;i<15;i++)</p><p><b>  {</b></p><p>  if(bullet[i].Y!=395)</p><p><b>  {</b></p><p>  bullet[i].Y-=17;</p><p>

61、;  if(bullet[i].Y<=0)</p><p><b>  {</b></p><p>  bullet[i].Y=395;</p><p><b>  }</b></p><p><b>  else </b></p><p><

62、;b>  {</b></p><p>  draw_Bullet(bullet[i].X,bullet[i].Y);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p>

63、<p><b>  }</b></p><p><b>  };</b></p><p>  class Enemy{</p><p><b>  public:</b></p><p>  Frame enemy[8];</p><p>&l

64、t;b>  //初始化</b></p><p><b>  Enemy()</b></p><p><b>  {</b></p><p>  bool flag;</p><p>  COORD a={1,-300};</p><p>  COORD b

65、= {291,1};</p><p>  COORD temp;</p><p>  for(int i=0;i<8;i++)</p><p><b>  {</b></p><p><b>  while(1)</b></p><p><b>  {<

66、/b></p><p>  flag=false;</p><p>  temp=random(a,b);</p><p>  for(int j=0;j<i;j++)</p><p><b>  {</b></p><p><b>  //處理重疊問題</b>&

67、lt;/p><p>  if(judge_Coord(temp.X,temp.X+23,temp.Y,temp.Y+32,enemy[j].position[0].X,enemy[j].position[1].X,enemy[j].position[0].Y,enemy[j].position[1].Y))</p><p><b>  {</b></p>&

68、lt;p>  flag=true;</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if(false==flag)</p><p><b&g

69、t;  {</b></p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  enemy[i].position[0] = temp;</p><p>

70、;  enemy[i].position[1].X =enemy[i].position[0].X+23;</p><p>  enemy[i].position[1].Y = enemy[i].position[0].Y+32;</p><p><b>  }</b></p><p><b>  }</b></p&

71、gt;<p>  void enemy_Move()</p><p><b>  {</b></p><p>  bool flag;</p><p>  COORD temp;</p><p>  for(int i=0;i<8;i++)</p><p><b> 

72、 {</b></p><p>  for(int j=0;j<2;j++)</p><p><b>  {</b></p><p>  enemy[i].position[j].Y+=10;</p><p><b>  }</b></p><p>  if(

73、480<=enemy[i].position[0].Y)</p><p><b>  {</b></p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  COORD a={1,-200};</p>&

74、lt;p>  COORD b={291,1};</p><p>  flag=false;</p><p>  temp=random(a,b);</p><p>  for(int j=0;j<8;j++)</p><p><b>  {</b></p><p><b> 

75、 //處理重疊問題</b></p><p>  if(judge_Coord(temp.X,temp.X+23,temp.Y,temp.Y+32,enemy[j].position[0].X,enemy[j].position[1].X,enemy[j].position[0].Y,enemy[j].position[1].Y))</p><p><b>  {<

76、;/b></p><p>  flag=true;</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if(false==flag)</p&g

77、t;<p><b>  {</b></p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  enemy[i].position[0] = temp;

78、</p><p>  enemy[i].position[1].X =enemy[i].position[0].X+23;</p><p>  enemy[i].position[1].Y = enemy[i].position[0].Y+32;</p><p><b>  continue;</b></p><p>&

79、lt;b>  }</b></p><p>  apply_surface(enemy[i].position[0].X,enemy[i].position[0].Y,enemy_image,screen);</p><p><b>  }</b></p><p><b>  }</b></p>

80、<p>  int judge_Enemy(COORD bullet[])</p><p><b>  {</b></p><p>  int num=0;</p><p>  for(int i=0;i<8;i++)</p><p><b>  {</b></p>

81、<p>  for(int j=0;j<15;j++)</p><p><b>  {</b></p><p>  if(judge_Coord(enemy[i].position[0].X,enemy[i].position[1].X,enemy[i].position[0].Y,enemy[i].position[1].Y,bullet[j].X

82、,bullet[j].X+17,bullet[j].Y,bullet[j].Y+29))</p><p><b>  {</b></p><p>  drawBoom(enemy[i].position[0].X,enemy[i].position[0].Y);</p><p>  enemy[i].position[0].Y=1000;<

83、;/p><p>  enemy[i].position[1].Y=1000;</p><p>  bullet[j].X = 395;</p><p><b>  num++;</b></p><p><b>  break;</b></p><p><b>  }&l

84、t;/b></p><p><b>  }</b></p><p><b>  }</b></p><p>  return num;</p><p><b>  }</b></p><p>  void draw(int x,int y)<

85、/p><p><b>  {</b></p><p>  apply_surface(x,y,enemy_image,screen);</p><p><b>  }</b></p><p>  void drawBoom(int x,int y)</p><p><b&g

86、t;  {</b></p><p>  for(int i=0;i<7;i++)</p><p><b>  {</b></p><p>  apply_surface(x,y,boom_image,screen,&clip[i]);</p><p><b>  flip();<

87、/b></p><p>  //SDL_Delay(200);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  };</b></p><p>  class Plane{</p&g

88、t;<p><b>  public:</b></p><p>  COORD position;</p><p>  Bullet bullet; //bullet 17*29</p><p><b>  Plane()</b></p><p><b>  {</b

89、></p><p>  position.X=140;</p><p>  position.Y=424;</p><p><b>  }</b></p><p>  void draw_Plane(COORD position)</p><p><b>  {</b>

90、</p><p>  apply_surface(position.X,position.Y,plane_image,screen);</p><p><b>  }</b></p><p><b>  //飛機(jī)的移動(dòng)</b></p><p>  void plane_Move(char ch)&l

91、t;/p><p><b>  {</b></p><p>  if('w'==ch)</p><p><b>  {</b></p><p>  if(position.Y>=20)</p><p>  position.Y-= 20;</p>

92、<p><b>  }</b></p><p>  if('a'==ch)</p><p><b>  {</b></p><p>  if(position.X>=20)</p><p>  position.X-=20;</p><p>

93、<b>  }</b></p><p>  if('s'==ch)</p><p><b>  {</b></p><p>  if(position.Y<=424)</p><p>  position.Y+=20;</p><p><b>

94、  }</b></p><p>  if('d'==ch)</p><p><b>  {</b></p><p>  if(position.X<=263)</p><p>  position.X+=20;</p><p><b>  }</b

95、></p><p><b>  }</b></p><p>  void plane_shoot()</p><p><b>  {</b></p><p>  for(int i=0;i<15;i++)</p><p><b>  {</b>

96、;</p><p>  if(bullet.bullet[i].Y==395)</p><p><b>  {</b></p><p>  bullet.bullet[i].Y=position.Y-10;</p><p>  bullet.bullet[i].X=position.X+9;</p><

97、;p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  bool judge_Plane(Enemy enemy)</p

98、><p><b>  {</b></p><p>  for(int i=0;i<8;i++)</p><p><b>  {</b></p><p>  if(judge_Coord(position.X,position.X+47,position.Y,position.Y+56,enemy.

99、enemy[i].position[0].X,enemy.enemy[i].position[1].X,enemy.enemy[i].position[0].Y,enemy.enemy[i].position[1].Y))</p><p><b>  {</b></p><p>  return false;</p><p><b>

100、  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  };</b></p><p>  class Game{</p><p><b>  public:<

101、/b></p><p>  Plane plane;</p><p>  Enemy enemy;</p><p>  int batEnemyNum;</p><p><b>  int time;</b></p><p><b>  Game()</b></p

102、><p><b>  {</b></p><p>  batEnemyNum=0;</p><p><b>  time=0;</b></p><p><b>  }</b></p><p>  void startGame()</p><

103、;p><b>  {</b></p><p>  bool quit=false;</p><p>  apply_surface(0,0,menu_image,screen);</p><p>  apply_surface(0,400,start_image1,screen);</p><p>  apply_

104、surface(180,400,start_image2,screen);</p><p><b>  flip();</b></p><p>  while(quit==false)</p><p><b>  {</b></p><p>  if(SDL_PollEvent(&event

105、))</p><p><b>  {</b></p><p>  if(event.type == SDL_KEYDOWN)</p><p><b>  {</b></p><p>  switch(event.key.keysym.sym)</p><p><b>

106、;  {</b></p><p>  case SDLK_1: time = 80;quit = true;break;</p><p>  case SDLK_2: time = 50;quit = true;break;</p><p>  case SDLK_3: time = 20;quit = true;break;</p>&l

107、t;p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  else if( event.type == SDL_QUIT )</p><p><b>  {</b></p

108、><p>  quit = true;</p><p><b>  exit(1);</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p>

109、<p>  void draw_background(int x=0,int y=0)</p><p><b>  {</b></p><p>  apply_surface(x,y,background_image,screen);</p><p><b>  }</b></p><p>

110、;  bool gamewin()</p><p><b>  {</b></p><p>  apply_surface(0,0,gamewin_image,screen);</p><p><b>  flip();</b></p><p>  SDL_Delay(20000);</p&g

111、t;<p><b>  exit(0);</b></p><p><b>  }</b></p><p>  bool gameover()</p><p><b>  {</b></p><p>  bool quit=false;</p><

112、;p>  apply_surface(0,0,gameover_image,screen);</p><p><b>  flip();</b></p><p>  while(quit==false)</p><p><b>  {</b></p><p>  if(SDL_PollEven

113、t(&event))</p><p><b>  {</b></p><p>  if(event.type == SDL_KEYDOWN)</p><p><b>  {</b></p><p>  switch(event.key.keysym.sym)</p><p

114、><b>  {</b></p><p>  case SDLK_y: return true;break;</p><p>  case SDLK_n: return false;break;</p><p><b>  }</b></p><p><b>  }</b>

115、;</p><p><b>  }</b></p><p><b>  else </b></p><p>  if( event.type == SDL_QUIT )</p><p><b>  {</b></p><p>  quit = true;

116、</p><p><b>  exit(1);</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void playing()<

117、/p><p><b>  {</b></p><p><b>  while(1)</b></p><p><b>  {</b></p><p><b>  //小循環(huán)</b></p><p><b>  int y=0;&

118、lt;/b></p><p>  bool quit = false;</p><p>  while( quit == false )</p><p><b>  {</b></p><p>  SDL_Delay(time);</p><p>  if( SDL_PollEvent(&a

119、mp;event))</p><p><b>  {</b></p><p>  if( event.type == SDL_KEYDOWN )</p><p><b>  {</b></p><p><b>  //獲取按鍵信息</b></p><p>

120、;  switch( event.key.keysym.sym )</p><p><b>  {</b></p><p>  case SDLK_w: plane.plane_Move('w'); break;</p><p>  case SDLK_s: plane.plane_Move('s'); brea

121、k;</p><p>  case SDLK_a: plane.plane_Move('a'); break;</p><p>  case SDLK_d: plane.plane_Move('d'); break;</p><p>  case SDLK_j: plane.plane_shoot();break;</p>

122、<p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  else if( event.type == SDL_QUIT )</p><p><b>  {</b>&l

123、t;/p><p>  quit = true;</p><p><b>  exit(1);</b></p><p><b>  }</b></p><p>  draw_background(0,y-203);</p><p>  draw_background(0,y-683

124、); </p><p><b>  //處理敵人</b></p><p>  enemy.enemy_Move();</p><p>  plane.draw_Plane(plane.position);</p><p>  plane.bullet.bullet_Move();</p><p>

125、  batEnemyNum+=enemy.judge_Enemy(plane.bullet.bullet);</p><p>  if(batEnemyNum>=10)</p><p><b>  {</b></p><p>  gamewin();</p><p><b>  }</b>&

126、lt;/p><p><b>  y+=2;</b></p><p><b>  if(y>683)</b></p><p><b>  y=0;</b></p><p><b>  //刷新屏幕</b></p><p><b

127、>  flip();</b></p><p>  if(plane.judge_Plane(enemy)==false)</p><p><b>  {</b></p><p><b>  break;</b></p><p><b>  }</b></

128、p><p><b>  }</b></p><p>  if(gameover()) //你想要復(fù)活么?</p><p><b>  {</b></p><p><b>  continue;</b></p><p><b>  }</b&g

129、t;</p><p><b>  else</b></p><p><b>  break;</b></p><p>  SDL_Delay(20000);</p><p><b>  }</b></p><p><b>  }</b&g

130、t;</p><p><b>  };</b></p><p>  /*******************************程序主體************************************/</p><p>  int main( int argc, char* args[] )</p><p>

131、<b>  {</b></p><p>  init_Game();</p><p>  Game game;</p><p>  game.startGame();</p><p>  SDL_Delay(2000);</p><p>  game.playing();</p>&

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論