版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- c語言課程設(shè)計(jì)--推箱子游戲
- 推箱子游戲課程設(shè)計(jì)
- 推箱子游戲課程設(shè)計(jì)
- 《c語言程序設(shè)計(jì)》課程設(shè)計(jì)推箱子
- 推箱子c課程設(shè)計(jì)報(bào)告
- javame課程設(shè)計(jì)-- 手機(jī)推箱子游戲
- 匯編語言推箱子課程設(shè)計(jì)
- c++推箱子課程設(shè)計(jì)報(bào)告
- java課程設(shè)計(jì)--經(jīng)典推箱子趣味游戲設(shè)計(jì)與實(shí)現(xiàn)
- 【畢業(yè)設(shè)計(jì)論文】基于c語言推箱子游戲設(shè)計(jì)畢業(yè)論文
- c語言課程設(shè)計(jì)-數(shù)組游戲
- c語言小游戲課程設(shè)計(jì)
- c語言課程設(shè)計(jì)報(bào)告---游戲設(shè)計(jì)
- 推箱子任務(wù)計(jì)劃-C語言.docx
- c語言課程設(shè)計(jì)----猜字游戲
- c語言課程設(shè)計(jì)報(bào)告-游戲2048
- c語言課程設(shè)計(jì)--猜數(shù)游戲
- c語言課程設(shè)計(jì)--猜數(shù)字游戲
- c語言課程設(shè)計(jì)--猜數(shù)字游戲
- c語言課程設(shè)計(jì)--- 21點(diǎn)游戲設(shè)計(jì)
評論
0/150
提交評論