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

下載本文檔

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

文檔簡介

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

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

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

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

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

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

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

8、1、定義二維數(shù)組ghouse來記錄屏幕上各點(diǎn)的狀態(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、在特定的坐標(biāo)上畫人的函數(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、在特定的坐標(biāo)上畫人的函數(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、按下空格鍵后,回到本關(guān)開頭的函數(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)的運(yùn)行環(huán)境</b></p><p><b>  Win-tc</b></p><p>  三、系統(tǒng)的實(shí)現(xiàn):流程圖</p><p><b>  否</b></p&

17、gt;<p><b>  是</b></p><p><b>  否</b></p><p><b>  是</b></p><p><b>  四、總結(jié)</b></p><p>  為了提高我們的實(shí)踐能力,讓我們學(xué)以致用,能靈活運(yùn)用所學(xué)的知

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

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

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

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

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

23、gt;  五、參考文獻(xiàn)</b></p><p>  1、《C程序設(shè)計(jì)(第三版)》,譚浩強(qiáng) 編,清華大學(xué)出版社</p><p>  2、《Turbo C 2.0實(shí)用大全》,常玉龍等 編寫,北京航空航天大學(xué)出版社</p><p>  3、《C游戲編程從入門到精通》,浦濱著,北京希望電子出版社</p><p>  4、《C函數(shù)實(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來記錄屏幕上各點(diǎn)的狀態(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ù)結(jié)構(gòu) */</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ù)結(jié)構(gòu) */</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>  /* 在特定的坐標(biāo)上畫墻壁并用數(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>  /* 在特定的坐標(biāo)上畫箱子并用數(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、;  /* 在特定的坐標(biāo)上畫目的地并用數(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>  /* 在特定的坐標(biāo)上畫目的地并用數(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>  /* 在特定的坐標(biāo)上畫人的函數(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>  /* 在特定的坐標(biāo)上畫箱子在目的地上并用數(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>  /* 第一關(guān)的圖象初始化 */&

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>  /* 第三關(guān)的圖象初始化 */</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>  /* 第二關(guān)的圖象初始化 */</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>  /* 第四關(guān)的圖象初始化 */</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>  /* 移動(dòng)在空地上的箱子到空地上 */</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>  /* 移動(dòng)在目的地上的箱子到空地上 */</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>  /* 移動(dòng)在空地上的箱子到目的地上 */</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>  /* 移動(dòng)在目的地上的箱子到目的地 */</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、/* 判斷特定的坐標(biāo)上的狀態(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>  /* 處理按下鍵盤后,人物移動(dòng)的主函數(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>  /* 按下空格鍵后,回到本關(guān)開頭的函數(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)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論