c語言課程設計--推箱子游戲_第1頁
已閱讀1頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、<p>  C語言課程設計說明書</p><p>  設計課題: 推箱子游戲 </p><p><b>  目 錄</b></p><p><b>  一、選題的意義3</b></p><p><b>  二、系統(tǒng)的分析3</b></p>

2、<p>  三、系統(tǒng)的實現(xiàn):流程圖5</p><p><b>  四、總結6</b></p><p><b>  五、參考文獻7</b></p><p>  六、附錄(程序源代碼)8</p><p><b>  一、選題的意義</b></p>

3、<p>  經(jīng)典的推箱子是一個來自日本的古老游戲,目的是在訓練你的邏輯思考能力。在一個狹小的倉庫中,要求把木箱放到指定的位置,稍不小心就會出現(xiàn)箱子無法移動或者通道被堵住的情況,所以需要巧妙的利用有限的空間和通道,合理安排移動的次序和位置,才能順利的完成任務。</p><p>  通過推箱子課程設計,進一步鞏固、加深所學c語言專業(yè)的基本理論知識,理論聯(lián)系實際,進一步培養(yǎng)綜合分析問題,解決問題的能力。<

4、;/p><p>  利用所學知識,開發(fā)小型應用系統(tǒng),掌握運用c語言編寫調(diào)試應用系統(tǒng)程序,訓練獨立開發(fā)應用系統(tǒng),進行數(shù)據(jù)處理的綜合能力。</p><p><b>  二、系統(tǒng)的分析</b></p><p><b>  1、系統(tǒng)概述</b></p><p>  游戲的功能描述如下:首先運行游戲并載入相應的地

5、圖,屏幕中出現(xiàn)一個推箱子的小人,起周圍是預制好的地圖、圍墻、人可以行走的通道、幾個可以移動的箱子和游戲勝利結束時安放這些箱子的目標位置。玩家先通過功能按鍵選擇希望到達的關卡,再通過編輯區(qū)中的方向鍵操縱推箱子小人的位置。當小人靠近箱子并朝箱子位置移動的時候,箱子在其移動方向沒有被其他物件所阻礙的情況下可以被移動。當所有箱子被小人移動到指定的安放位置后,則勝利通關進入下一關的游戲。</p><p><b>

6、  2、系統(tǒng)構成</b></p><p>  本程序總體大致可分為三大模塊,即讀入、判斷調(diào)整、輸出。</p><p>  讀 入:即設置讀入操作把使用者的輸入操作符讀入程序,并定義變量儲存起立為下一步的判斷做好準備;</p><p>  判斷調(diào)整:這一操作為下一步的調(diào)整二維數(shù)組內(nèi)容提供依據(jù),通過大量的判斷語句對所有可能出現(xiàn)的情況提供想對應的唯一操作

7、,使用戶能樹立使用軟件并起到規(guī)范化輸入的目的——當輸入不明字符時不作處理。判斷結束后,執(zhí)行相應操作改變數(shù)組內(nèi)容從而改變輸出內(nèi)容,使用戶順利進行下一步操作。</p><p>  (3) 輸 出:通過刷屏后重新輸出從而使背景得以改變,進而等待用戶下一步的輸入操作。</p><p><b>  3、各模塊功能</b></p><p>  3.

8、1、定義二維數(shù)組ghouse來記錄屏幕上各點的狀態(tài),</p><p>  char ghouse[20][20];//其中:0表示什么都沒有,'b'表示箱子,'w'表示墻壁,'m'表示目的地,'i'表示箱子在目的地。</p><p>  3.2、直接寫屏函數(shù),很酷的函數(shù)哦!</p><p>  char

9、 far *screen=(char far* )0xb8000000;</p><p>  void putchxy(int y,int x,char ch,char fc,char bc)</p><p><b>  {</b></p><p>  screen[(x*160)+(y<<1)+0]=ch;</p>

10、<p>  screen[(x*160)+(y<<1)+1]=(bc*16)+fc;</p><p><b>  }</b></p><p>  3.3、在特定的坐標上畫人的函數(shù)</p><p>  void printman(int x,int y)</p><p><b>  {<

11、;/b></p><p>  gotoxy(y,x);</p><p>  _AL=02;_CX=01;_AH=0xa;</p><p>  geninterrupt(0x10);</p><p><b>  }</b></p><p>  3.4、在特定的坐標上畫人的函數(shù)</p>

12、;<p>  void printman(int x,int y)</p><p><b>  {</b></p><p>  gotoxy(y,x);</p><p>  _AL=02;_CX=01;_AH=0xa;</p><p>  geninterrupt(0x10);</p><

13、;p><b>  }</b></p><p>  3.5、按下空格鍵后,回到本關開頭的函數(shù)</p><p>  void reset(int i)</p><p><b>  {</b></p><p><b>  switch(i)</b></p><

14、;p><b>  {</b></p><p>  case 0: init();</p><p>  inithouse1();break;</p><p>  case 1: init();</p><p>  inithouse2();break;</p><p>  case 2:

15、 init();</p><p>  inithouse3();break;</p><p>  case 3: init();</p><p>  inithouse4();break; </p><p>  default:break;</p><p><b>  }</b></p

16、><p><b>  }</b></p><p><b>  4、系統(tǒng)的運行環(huán)境</b></p><p><b>  Win-tc</b></p><p>  三、系統(tǒng)的實現(xiàn):流程圖</p><p><b>  否</b></p&

17、gt;<p><b>  是</b></p><p><b>  否</b></p><p><b>  是</b></p><p><b>  四、總結</b></p><p>  為了提高我們的實踐能力,讓我們學以致用,能靈活運用所學的知

18、識進行再創(chuàng)造,學校特安排我們進行為期一周的c語言課程設計,并安排了指導老師幫助輔導,讓我們在規(guī)范化、嚴謹化、實用化上面有了很大進展。在此次推箱子游戲程序開發(fā)過程中,有很多東西值得我們思考并總結。</p><p>  開發(fā)過程大體可分為以下幾個步驟: (1)思考總體設計方案:總體結構和模塊外部設計,功能分配。思考要實現(xiàn)整個程序大體需要的幾個模塊和其中用到的C語言基本操作符、語句等。 (2)畫出總體設計方

19、案流程圖:用流程圖的形式展現(xiàn)你的基本編程思想。 (3)流程圖具體化:即將流程圖中的幾大模塊的具體實現(xiàn)思考清楚,可以用流程圖的形式展現(xiàn).并想好實現(xiàn)的關鍵代碼。 (4)編輯程序代碼:這是一個至關重要復雜而且需要反復修改的環(huán)節(jié),在此環(huán)節(jié)中你將發(fā)現(xiàn)總體設計和模塊思想會存在很多問題,需不斷改進.如何實現(xiàn)各函數(shù)功能,達到預期效果也將是一項繁復的工作。 (5)代碼的調(diào)試:在Dev C++環(huán)境下輸入代碼并進行調(diào)試和正確運行。在調(diào)試過程

20、中會遇到很多需要精化的地方,需要十足的耐心與細心,不斷改進完善程序。 (6)最后修飾:程序可以正確運行之后,再不影響程序功能的情況下,運用各種輔助性符號,使界面更加美觀漂亮,操作更人性化.增強程序的新意與可行性。 </p><p>  C語言是一門計算機基礎語言,通過這次的課程設計,對于它的一些特點和算法有了一定程度的了解,并能夠做一些中等的題目,但并沒有完全掌握。這1周的課程設計正是讓我們鞏固以前的知識并

21、在此基礎上能夠有所突破。這次做的是推箱子,對于我來說有一定困難,因為我的C語言基礎并不是很過硬,所以在開始我的程序并沒有太大的進展,除了一個框架外并無其他任何功能,每天別人在絞盡腦汁想如何做程序的時候,我都會看著自己寫的框架發(fā)呆,或者做一些與課程無關的事情,開始過的蠻無聊,蠻郁悶的,心情也不是很好。不過我一直在看課本,重溫一下基礎知識。最后幾天我通過同學的幫助以及通過在網(wǎng)上查資料,終于設計出了比較理想的程序。雖然程序有的是COPY的,外

22、形也不如別人的美觀,可其中包含了我的心血以及我的理解。 C語言是一門較難的語言,我感覺學的蠻累的,尤其是這1周的課程設計,我更體會到了這一點,雖然我們是在同一條起跑線上學習的,可每個人的能力都是不同的,有人掌握的好,也有人掌握的不是很好。而我屬于中等,因此,在做設計的時候,單單靠我自己的能力是不行的,需要靠大家的幫忙,需要運用集體的智慧,需要大家團結合作。所以,通過1個禮拜的努力和同</p><p><b&

23、gt;  五、參考文獻</b></p><p>  1、《C程序設計(第三版)》,譚浩強 編,清華大學出版社</p><p>  2、《Turbo C 2.0實用大全》,常玉龍等 編寫,北京航空航天大學出版社</p><p>  3、《C游戲編程從入門到精通》,浦濱著,北京希望電子出版社</p><p>  4、《C函數(shù)實用手冊》

24、,張曜 郭立山 吳天著,冶金工業(yè)出版社</p><p>  六、附錄(程序源代碼)</p><p>  #include <dos.h></p><p>  #include <stdio.h></p><p>  #include <ctype.h></p><p>  #incl

25、ude <conio.h></p><p>  #include <bios.h></p><p>  #include <alloc.h></p><p>  /* 定義二維數(shù)組ghouse來記錄屏幕上各點的狀態(tài),</p><p>  其中:0表示什么都沒有,'b'表示箱子,'w

26、'表示墻壁,'m'表示目的地,'i'表示箱子在目的地。 */</p><p>  char ghouse[20][20];</p><p>  /* 以下函數(shù)為直接寫屏函數(shù),很酷的函數(shù)哦!是我朋友告訴我的。 */</p><p>  char far *screen=(char far* )0xb8000000;</p

27、><p>  void putchxy(int y,int x,char ch,char fc,char bc)</p><p><b>  {</b></p><p>  screen[(x*160)+(y<<1)+0]=ch;</p><p>  screen[(x*160)+(y<<1)+1]=

28、(bc*16)+fc;</p><p><b>  }</b></p><p>  /* 定義判斷是否勝利的數(shù)據(jù)結構 */</p><p>  typedef struct winer {</p><p><b>  int x,y;</b></p><p>  struct

29、 winer *p;</p><p><b>  }winer;</b></p><p>  /* 箱子位置的數(shù)據(jù)結構 */</p><p>  typedef struct boxs {</p><p><b>  int x,y;</b></p><p>  struct

30、 boxs *next;</p><p><b>  }boxs;</b></p><p>  /* 在特定的坐標上畫墻壁并用數(shù)組記錄狀態(tài)的函數(shù) */</p><p>  void printwall(int x,int y)</p><p><b>  {</b></p><p

31、>  putchxy(y-1,x-1,219,MAGENTA,BLACK);</p><p>  ghouse[x][y]='w';</p><p><b>  }</b></p><p>  /* 在特定的坐標上畫箱子并用數(shù)組記錄狀態(tài)的函數(shù) */</p><p>  void printbox(i

32、nt x,int y)</p><p><b>  {</b></p><p>  putchxy(y-1,x-1,10,WHITE,BLACK);</p><p>  ghouse[x][y]='b';</p><p><b>  }</b></p><p>

33、;  /* 在特定的坐標上畫目的地并用數(shù)組記錄狀態(tài)的函數(shù) */</p><p>  void printwhither1(int x,int y,winer **win,winer **pw)</p><p><b>  {</b></p><p>  winer *qw;</p><p>  putchxy(y-1,

34、x-1,'*',YELLOW,BLACK);</p><p>  ghouse[x][y]='m';</p><p>  if(*win==NULL)</p><p><b>  {</b></p><p>  *win=*pw=qw=(winer* )malloc(sizeof(wine

35、r));</p><p>  (*pw)->x=x;(*pw)->y=y;(*pw)->p=NULL;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><

36、p>  qw=(winer* )malloc(sizeof(winer));</p><p>  qw->x=x;qw->y=y;(*pw)->p=qw;(*pw)=qw;qw->p=NULL;</p><p><b>  }</b></p><p><b>  }</b></p>

37、<p>  /* 在特定的坐標上畫目的地并用數(shù)組記錄狀態(tài)的函數(shù) */</p><p>  void printwhither(int x,int y)</p><p><b>  {</b></p><p>  putchxy(y-1,x-1,'*',YELLOW,BLACK);</p><p&

38、gt;  ghouse[x][y]='m';</p><p><b>  }</b></p><p>  /* 在特定的坐標上畫人的函數(shù) */</p><p>  void printman(int x,int y)</p><p><b>  {</b></p>&l

39、t;p>  gotoxy(y,x);</p><p>  _AL=02;_CX=01;_AH=0xa;</p><p>  geninterrupt(0x10);</p><p><b>  }</b></p><p>  /* 在特定的坐標上畫箱子在目的地上并用數(shù)組記錄狀態(tài)的函數(shù) */</p>&l

40、t;p>  void printboxin(int x,int y)</p><p><b>  {</b></p><p>  putchxy(y-1,x-1,10,YELLOW,BLACK);</p><p>  ghouse[x][y]='i';</p><p><b>  }<

41、;/b></p><p>  /* 初始化函數(shù),初始化數(shù)組和屏幕 */</p><p>  void init()</p><p><b>  {</b></p><p><b>  int i,j;</b></p><p><b>  clrscr();&l

42、t;/b></p><p>  for(i=0;i<20;i++)</p><p>  for(j=0;j<20;j++)</p><p>  ghouse[i][j]=0;</p><p><b>  _AL=3;</b></p><p><b>  _AH=0;&l

43、t;/b></p><p>  geninterrupt(0x10);</p><p>  gotoxy(40,4);</p><p>  printf("Welcome to push box world!");</p><p>  gotoxy(40,6);</p><p>  print

44、f("Press up,down,left,right to play.");</p><p>  gotoxy(40,8);</p><p>  printf("Press Esc to quit it.");</p><p>  gotoxy(40,10);</p><p>  printf(&qu

45、ot;Press space to reset the game.");</p><p>  gotoxy(40,12);</p><p>  printf("April 30th 2004.");</p><p><b>  }</b></p><p>  /* 第一關的圖象初始化 */&

46、lt;/p><p>  winer *inithouse1()</p><p><b>  {</b></p><p><b>  int x,y;</b></p><p>  winer *win=NULL,*pw;</p><p>  gotoxy(8,2);</p&g

47、t;<p>  printf("Level No.1");</p><p>  for(x=1,y=5;y<=9;y++)</p><p>  printwall(x+4,y+10);</p><p>  for(y=5,x=2;x<=5;x++)</p><p>  printwall(x+4,

48、y+10);</p><p>  for(y=9,x=2;x<=5;x++)</p><p>  printwall(x+4,y+10);</p><p>  for(y=1,x=3;x<=8;x++)</p><p>  printwall(x+4,y+10);</p><p>  for(x=3,y=3

49、;x<=5;x++)</p><p>  printwall(x+4,y+10);</p><p>  for(x=5,y=8;x<=9;x++)</p><p>  printwall(x+4,y+10);</p><p>  for(x=7,y=4;x<=9;x++)</p><p>  prin

50、twall(x+4,y+10);</p><p>  for(x=9,y=5;y<=7;y++)</p><p>  printwall(x+4,y+10);</p><p>  for(x=8,y=2;y<=3;y++)</p><p>  printwall(x+4,y+10);</p><p>  p

51、rintwall(5+4,4+10);</p><p>  printwall(5+4,7+10);</p><p>  printwall(3+4,2+10);</p><p>  printbox(3+4,6+10);</p><p>  printbox(3+4,7+10);</p><p>  printbox

52、(4+4,7+10);</p><p>  printwhither1(4+4,2+10,&win,&pw);</p><p>  printwhither1(5+4,2+10,&win,&pw);</p><p>  printwhither1(6+4,2+10,&win,&pw);</p><p

53、>  printman(2+4,8+10);</p><p>  return win;</p><p><b>  }</b></p><p>  /* 第三關的圖象初始化 */</p><p>  winer *inithouse3()</p><p><b>  {int x

54、,y;</b></p><p>  winer *win=NULL,*pw;</p><p>  gotoxy(8,3);</p><p>  printf("Level No.3");</p><p>  for(x=1,y=2;y<=8;y++)</p><p>  print

55、wall(x+4,y+10);</p><p>  for(x=2,y=2;x<=4;x++)</p><p>  printwall(x+4,y+10);</p><p>  for(x=4,y=1;y<=3;y++)</p><p>  printwall(x+4,y+10);</p><p>  fo

56、r(x=5,y=1;x<=8;x++)</p><p>  printwall(x+4,y+10);</p><p>  for(x=8,y=2;y<=5;y++)</p><p>  printwall(x+4,y+10);</p><p>  for(x=5,y=5;x<=7;x++)</p><p&

57、gt;  printwall(x+4,y+10);</p><p>  for(x=7,y=6;y<=9;y++)</p><p>  printwall(x+4,y+10);</p><p>  for(x=3,y=9;x<=6;x++)</p><p>  printwall(x+4,y+10);</p><

58、;p>  for(x=3,y=6;y<=8;y++)</p><p>  printwall(x+4,y+10);</p><p>  printwall(2+4,8+10);</p><p>  printwall(5+4,7+10);</p><p>  printbox(6+4,3+10);</p><p

59、>  printbox(4+4,4+10);</p><p>  printbox(5+4,6+10);</p><p>  printwhither1(2+4,5+10,&win,&pw);</p><p>  printwhither1(2+4,6+10,&win,&pw);</p><p>  pr

60、intwhither1(2+4,7+10,&win,&pw);</p><p>  printman(2+4,4+10);</p><p>  return win;</p><p><b>  }</b></p><p>  /* 第二關的圖象初始化 */</p><p>  w

61、iner *inithouse2()</p><p><b>  {int x,y;</b></p><p>  winer *win=NULL,*pw;</p><p>  gotoxy(8,2);</p><p>  printf("Level No.2");</p><p&g

62、t;  for(x=1,y=4;y<=7;y++)</p><p>  printwall(x+4,y+10);</p><p>  for(x=2,y=2;y<=4;y++)</p><p>  printwall(x+4,y+10);</p><p>  for(x=2,y=7;x<=4;x++)</p>

63、<p>  printwall(x+4,y+10);</p><p>  for(x=4,y=1;x<=8;x++)</p><p>  printwall(x+4,y+10);</p><p>  for(x=8,y=2;y<=8;y++)</p><p>  printwall(x+4,y+10);</p>

64、;<p>  for(x=4,y=8;x<=8;x++)</p><p>  printwall(x+4,y+10);</p><p>  for(x=4,y=6;x<=5;x++)</p><p>  printwall(x+4,y+10);</p><p>  for(x=3,y=2;x<=4;x++)&l

65、t;/p><p>  printwall(x+4,y+10);</p><p>  for(x=4,y=4;x<=5;x++)</p><p>  printwall(x+4,y+10);</p><p>  printwall(6+4,3+10);</p><p>  printbox(3+4,5+10);<

66、/p><p>  printbox(6+4,6+10);</p><p>  printbox(7+4,3+10);</p><p>  printwhither1(5+4,7+10,&win,&pw);</p><p>  printwhither1(6+4,7+10,&win,&pw);</p>

67、<p>  printwhither1(7+4,7+10,&win,&pw);</p><p>  printman(2+4,6+10);</p><p>  return win;</p><p><b>  }</b></p><p>  /* 第四關的圖象初始化 */</p>

68、<p>  winer *inithouse4()</p><p><b>  {</b></p><p><b>  int x,y;</b></p><p>  winer *win=NULL,*pw;</p><p>  gotoxy(8,2);</p><p&

69、gt;  printf("Level No.4");</p><p>  for(x=1,y=1;y<=6;y++)</p><p>  printwall(x+4,y+10);</p><p>  for(x=2,y=7;y<=8;y++)</p><p>  printwall(x+4,y+10);<

70、/p><p>  for(x=2,y=1;x<=7;x++)</p><p>  printwall(x+4,y+10);</p><p>  for(x=7,y=2;y<=4;y++)</p><p>  printwall(x+4,y+10);</p><p>  for(x=6,y=4;y<=9;y

71、++)</p><p>  printwall(x+4,y+10);</p><p>  for(x=3,y=9;x<=5;x++)</p><p>  printwall(x+4,y+10);</p><p>  for(x=3,y=3;y<=4;y++)</p><p>  printwall(x+4,

72、y+10);</p><p>  printwall(3+4,8+10);</p><p>  printbox(3+4,5+10);</p><p>  printbox(4+4,4+10);</p><p>  printbox(4+4,6+10);</p><p>  printbox(5+4,5+10);<

73、;/p><p>  printbox(5+4,3+10);</p><p>  printwhither1(3+4,7+10,&win,&pw);</p><p>  printwhither1(4+4,7+10,&win,&pw);</p><p>  printwhither1(5+4,7+10,&wi

74、n,&pw);</p><p>  printwhither1(4+4,8+10,&win,&pw);</p><p>  printwhither1(5+4,8+10,&win,&pw);</p><p>  printman(2+4,2+10);</p><p>  return win;</

75、p><p><b>  }</b></p><p>  /* 移動在空地上的箱子到空地上 */</p><p>  movebox(int x,int y,char a)</p><p><b>  {</b></p><p><b>  switch(a)</b

76、></p><p><b>  {</b></p><p>  case 'u':ghouse[x-1][y]=0;printf(" ");</p><p>  printbox(x-2,y);printman(x-1,y);</p><p>  ghouse[x-2][y]=&

77、#39;b';break;</p><p>  case 'd':ghouse[x+1][y]=0;printf(" ");</p><p>  printbox(x+2,y);printman(x+1,y);</p><p>  ghouse[x+2][y]='b';break;</p>&

78、lt;p>  case 'l':ghouse[x][y-1]=0;printf(" ");</p><p>  printbox(x,y-2);printman(x,y-1);</p><p>  ghouse[x][y-2]='b';break;</p><p>  case 'r':gho

79、use[x][y+1]=0;printf(" ");</p><p>  printbox(x,y+2);printman(x,y+1);</p><p>  ghouse[x][y+2]='b';break;</p><p>  default: break;</p><p><b>  }&l

80、t;/b></p><p><b>  }</b></p><p>  /* 移動在目的地上的箱子到空地上 */</p><p>  moveinbox(int x,int y,char a)</p><p><b>  {</b></p><p><b> 

81、 switch(a)</b></p><p><b>  {</b></p><p>  case 'u':ghouse[x-1][y]='m';printf(" ");</p><p>  printbox(x-2,y);printman(x-1,y);</p>&

82、lt;p>  ghouse[x-2][y]='b';break;</p><p>  case 'd':ghouse[x+1][y]='m';printf(" ");</p><p>  printbox(x+2,y);printman(x+1,y);</p><p>  ghouse[x+2

83、][y]='b';break;</p><p>  case 'l':ghouse[x][y-1]='m';printf(" ");</p><p>  printbox(x,y-2);printman(x,y-1);</p><p>  ghouse[x][y-2]='b';bre

84、ak;</p><p>  case 'r':ghouse[x][y+1]='m';printf(" ");</p><p>  printbox(x,y+2);printman(x,y+1);</p><p>  ghouse[x][y+2]='b';break;</p><p

85、>  default: break;</p><p><b>  }</b></p><p><b>  }</b></p><p>  /* 移動在空地上的箱子到目的地上 */</p><p>  moveboxin(int x,int y,char a)</p><p&

86、gt;<b>  {</b></p><p><b>  switch(a)</b></p><p><b>  {</b></p><p>  case 'u':ghouse[x-1][y]=0;printf(" ");</p><p> 

87、 printboxin(x-2,y);printman(x-1,y);</p><p>  ghouse[x-2][y]='i';break;</p><p>  case 'd':ghouse[x+1][y]=0;printf(" ");</p><p>  printboxin(x+2,y);printman(

88、x+1,y);</p><p>  ghouse[x+2][y]='i';break;</p><p>  case 'l':ghouse[x][y-1]=0;printf(" ");</p><p>  printboxin(x,y-2);printman(x,y-1);</p><p>

89、  ghouse[x][y-2]='i';break;</p><p>  case 'r':ghouse[x][y+1]=0;printf(" ");</p><p>  printboxin(x,y+2);printman(x,y+1);</p><p>  ghouse[x][y+2]='i'

90、;break;</p><p>  default: break;</p><p><b>  }</b></p><p><b>  }</b></p><p>  /* 移動在目的地上的箱子到目的地 */</p><p>  moveinboxin(int x,int y

91、,char a)</p><p><b>  {</b></p><p><b>  switch(a)</b></p><p><b>  {</b></p><p>  case 'u':ghouse[x-1][y]='m';printf(&

92、quot; ");</p><p>  printboxin(x-2,y);printman(x-1,y);</p><p>  ghouse[x-2][y]='i';break;</p><p>  case 'd':ghouse[x+1][y]='m';printf(" ");<

93、/p><p>  printboxin(x+2,y);printman(x+1,y);</p><p>  ghouse[x+2][y]='i';break;</p><p>  case 'l':ghouse[x][y-1]='m';printf(" ");</p><p> 

94、 printboxin(x,y-2);printman(x,y-1);</p><p>  ghouse[x][y-2]='i';break;</p><p>  case 'r':ghouse[x][y+1]='m';printf(" ");</p><p>  printboxin(x,y+2)

95、;printman(x,y+1);</p><p>  ghouse[x][y+2]='i';break;</p><p>  default: break;</p><p><b>  }</b></p><p><b>  }</b></p><p>  

96、/* 判斷特定的坐標上的狀態(tài) */</p><p>  int judge(int x,int y)</p><p><b>  {</b></p><p><b>  int i;</b></p><p>  switch(ghouse[x][y])</p><p><

97、;b>  {</b></p><p>  case 0: i=1;break;</p><p>  case 'w': i=0;break;</p><p>  case 'b': i=2;break;</p><p>  case 'i': i=4;break;</

98、p><p>  case 'm': i=3;break;</p><p>  default: break;</p><p><b>  }</b></p><p><b>  return i;</b></p><p><b>  }</b>

99、;</p><p>  /* 處理按下鍵盤后,人物移動的主函數(shù) */</p><p>  move(int x,int y,char a)</p><p><b>  {</b></p><p><b>  switch(a)</b></p><p><b>  {

100、</b></p><p>  case 'u':if(!judge(x-1,y)) {gotoxy(y,x);break;}</p><p>  else if(judge(x-1,y)==1||judge(x-1,y)==3)</p><p>  {if(judge(x,y)==3)</p><p>  { pr

101、intwhither(x,y);printman(x-1,y);break;}</p><p><b>  else</b></p><p>  {printf(" ");printman(x-1,y);break;}</p><p><b>  }</b></p><p>  

102、else if(judge(x-1,y)==2)</p><p>  { if(judge(x-2,y)==1)</p><p>  {movebox(x,y,'u');</p><p>  if(judge(x,y)==3) printwhither(x,y); gotoxy(y,x-1);</p><p><b>

103、;  }</b></p><p>  else if(judge(x-2,y)==3)</p><p>  { moveboxin(x,y,'u');</p><p>  if(judge(x,y)==3) printwhither(x,y); gotoxy(y,x-1);</p><p><b>  }

104、</b></p><p>  else gotoxy(y,x);</p><p><b>  break;</b></p><p><b>  }</b></p><p>  else if(judge(x-1,y)==4)</p><p>  { if(judg

105、e(x-2,y)==1)</p><p>  {moveinbox(x,y,'u');</p><p>  if(judge(x,y)==3) printwhither(x,y);gotoxy(y,x-1);</p><p><b>  }</b></p><p>  else if(judge(x-2,

106、y)==3)</p><p>  { moveinboxin(x,y,'u');</p><p>  if(judge(x,y)==3) printwhither(x,y);gotoxy(y,x-1);</p><p><b>  }</b></p><p>  else gotoxy(y,x);<

107、/p><p><b>  break;</b></p><p><b>  }</b></p><p>  case 'd':if(!judge(x+1,y)) {gotoxy(y,x);break;}</p><p>  else if(judge(x+1,y)==1||judge(

108、x+1,y)==3)</p><p>  {if(judge(x,y)==3)</p><p>  { printwhither(x,y);printman(x+1,y);break;}</p><p><b>  else</b></p><p>  {printf(" ");printman(x+

109、1,y);break;}</p><p><b>  }</b></p><p>  else if(judge(x+1,y)==2)</p><p>  { if(judge(x+2,y)==1)</p><p>  {movebox(x,y,'d');</p><p>  if

110、(judge(x,y)==3) printwhither(x,y);gotoxy(y,x+1);</p><p><b>  }</b></p><p>  else if(judge(x+2,y)==3)</p><p>  {moveboxin(x,y,'d');</p><p>  if(judge

111、(x,y)==3) printwhither(x,y);gotoxy(y,x+1);</p><p><b>  }</b></p><p>  else gotoxy(y,x);</p><p><b>  break;</b></p><p><b>  }</b><

112、/p><p>  else if(judge(x+1,y)==4)</p><p>  { if(judge(x+2,y)==1)</p><p>  {moveinbox(x,y,'d');</p><p>  if(judge(x,y)==3) printwhither(x,y);gotoxy(y,x+1);</p>

113、;<p><b>  }</b></p><p>  else if(judge(x+2,y)==3)</p><p>  {moveinboxin(x,y,'d');</p><p>  if(judge(x,y)==3) printwhither(x,y);gotoxy(y,x+1);</p>&

114、lt;p><b>  }</b></p><p>  else gotoxy(y,x);</p><p><b>  break;</b></p><p><b>  }</b></p><p>  case 'l':if(!judge(x,y-1))

115、{gotoxy(y,x);break;}</p><p>  else if(judge(x,y-1)==1||judge(x,y-1)==3)</p><p>  {if(judge(x,y)==3)</p><p>  { printwhither(x,y);printman(x,y-1);break;}</p><p><b>

116、;  else</b></p><p>  {printf(" ");printman(x,y-1);break;}</p><p><b>  }</b></p><p>  else if(judge(x,y-1)==2)</p><p>  { if(judge(x,y-2)==1)

117、</p><p>  {movebox(x,y,'l');</p><p>  if(judge(x,y)==3) printwhither(x,y); gotoxy(y-1,x);</p><p><b>  }</b></p><p>  else if(judge(x,y-2)==3)</p&

118、gt;<p>  {moveboxin(x,y,'l');</p><p>  if(judge(x,y)==3) printwhither(x,y); gotoxy(y-1,x);</p><p><b>  }</b></p><p>  else gotoxy(y,x);</p><p&

119、gt;<b>  break;</b></p><p><b>  }</b></p><p>  else if(judge(x,y-1)==4)</p><p>  { if(judge(x,y-2)==1)</p><p>  {moveinbox(x,y,'l');</

120、p><p>  if(judge(x,y)==3) printwhither(x,y); gotoxy(y-1,x);</p><p><b>  }</b></p><p>  else if(judge(x,y-2)==3)</p><p>  {moveinboxin(x,y,'l');</p&g

121、t;<p>  if(judge(x,y)==3) printwhither(x,y); gotoxy(y-1,x);</p><p><b>  }</b></p><p>  else gotoxy(y,x);</p><p><b>  break;</b></p><p>&

122、lt;b>  }</b></p><p>  case 'r':if(!judge(x,y+1)) {gotoxy(y,x);break;}</p><p>  else if(judge(x,y+1)==1||judge(x,y+1)==3)</p><p>  {if(judge(x,y)==3)</p><

123、;p>  {printwhither(x,y);printman(x,y+1);break;}</p><p><b>  else</b></p><p>  {printf(" ");printman(x,y+1);break;}</p><p><b>  }</b></p>

124、<p>  else if(judge(x,y+1)==2)</p><p>  { if(judge(x,y+2)==1)</p><p>  {movebox(x,y,'r');</p><p>  if(judge(x,y)==3) printwhither(x,y); gotoxy(y+1,x);</p><p&

125、gt;<b>  }</b></p><p>  else if(judge(x,y+2)==3)</p><p>  {moveboxin(x,y,'r');</p><p>  if(judge(x,y)==3) printwhither(x,y); gotoxy(y+1,x);</p><p>&

126、lt;b>  }</b></p><p>  else gotoxy(y,x);</p><p><b>  break;</b></p><p><b>  }</b></p><p>  else if(judge(x,y+1)==4)</p><p>

127、  { if(judge(x,y+2)==1)</p><p>  {moveinbox(x,y,'r');</p><p>  if(judge(x,y)==3) printwhither(x,y); gotoxy(y+1,x);</p><p><b>  }</b></p><p>  else i

128、f(judge(x,y+2)==3)</p><p>  {moveinboxin(x,y,'r');</p><p>  if(judge(x,y)==3) printwhither(x,y); gotoxy(y+1,x);</p><p><b>  }</b></p><p>  else got

129、oxy(y,x);</p><p><b>  break;</b></p><p><b>  }</b></p><p>  default: break;</p><p><b>  }</b></p><p><b>  }</b

130、></p><p>  /* 按下空格鍵后,回到本關開頭的函數(shù) */</p><p>  void reset(int i)</p><p><b>  {</b></p><p><b>  switch(i)</b></p><p><b>  {<

131、/b></p><p>  case 0: init();</p><p>  inithouse1();break;</p><p>  case 1: init();</p><p>  inithouse2();break;</p><p>  case 2: init();</p>&

132、lt;p>  inithouse3();break;</p><p>  case 3: init();</p><p>  inithouse4();break; </p><p>  default:break;</p><p><b>  }</b></p><p><b&g

133、t;  }</b></p><p>  /* 主函數(shù)main */</p><p>  void main()</p><p><b>  {</b></p><p>  int key,x,y,s,i=0;</p><p>  winer *win,*pw;</p>&

134、lt;p>  _AL=3;_AH=0;</p><p>  geninterrupt(0x10);</p><p><b>  init();</b></p><p>  win=inithouse1();</p><p><b>  do{</b></p><p>&

135、lt;b>  _AH=3;</b></p><p>  geninterrupt(0x10);</p><p>  x=_DH+1;y=_DL+1;</p><p>  while(bioskey(1)==0);</p><p>  key=bioskey(0);</p><p>  switch(k

136、ey)</p><p><b>  {</b></p><p>  case 0x4800:move(x,y,'u');break; /* 按下向上鍵后 */</p><p>  case 0x5000:move(x,y,'d');break; /* 按下向下鍵后 */</p><p> 

137、 case 0x4b00:move(x,y,'l');break; /* 按下向左鍵后 */</p><p>  case 0x4d00:move(x,y,'r');break; /* 按下向右鍵后 */</p><p>  case 0x3920:reset(i);break; /* 按下空格鍵后 */</p><p> 

138、 default:break;</p><p><b>  }</b></p><p><b>  s=0;</b></p><p><b>  pw=win;</b></p><p><b>  while(pw)</b></p><

139、p><b>  {</b></p><p>  if(ghouse[pw->x][pw->y]=='m') s++;</p><p><b>  pw=pw->p;</b></p><p><b>  }</b></p><p><

140、b>  if(s==0)</b></p><p><b>  {</b></p><p>  free(win);</p><p>  gotoxy(25,2);</p><p>  printf("Congratulate! You have passed Level %d!",i

溫馨提示

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

評論

0/150

提交評論