用C写一个简单的推箱子游戏(二)
下面接著上一篇隨筆《用C寫一個(gè)簡(jiǎn)單的推箱子游戲(一)》來(lái)寫
tuidong()函數(shù)是用來(lái)判斷游戲人物前方情況的函數(shù),是推箱子游戲中非常重要的一個(gè)函數(shù),下面從它開(kāi)始繼續(xù)介紹推箱子的小程序怎么寫:
e) tuidong()函數(shù):判斷移動(dòng)人物的前方的情況
1) 第一部分:
1 int count,caw=0;//行和列
2 int i,j,tui;
3 for(i=0;i<9;i++)
4 {
5 for (j=0;j<11;j++)
6 {
7 if(map[i][j]==2||map[i][j]==6)
8 {
9 count=i;
10 caw=j;
11 }
12 }
13 }
14 tui=getch();
說(shuō)明:
①為了判斷游戲人物位置,首先需要將人物位置記錄下來(lái),此處用count和caw變量記錄初始位置;
②使用getch()函數(shù)而不用getchar()函數(shù)的原因是:getchar()函數(shù)輸入一個(gè)字符后需要回車來(lái)進(jìn)行下一個(gè)字符的輸入,比較麻煩,而getch()函數(shù)則不需要回車就能連續(xù)輸入多個(gè)字符。所以采用getch()函數(shù)對(duì)玩家鍵盤輸入的內(nèi)容進(jìn)行記錄,并將值賦給tui。
2) 第二部分
1 switch(tui)
2 {
3 case 'w'://向上
4 if(map[count-1][caw]==0||map[count-1][caw]==4)
5 {
6 map[count][caw]-=2;
7 map[count-1][caw]+=2;
8 }
9 else if(map[count-1][caw]==3||map[count-1][caw]==7)
10 {
11 if(map[count-2][caw]==0||map[count-2][caw]==4)
12 {
13 map[count][caw]-=2;
14 map[count-1][caw]-=1;
15 map[count-2][caw]+=3;
16 }
17 }
18 break;
19 case 's'://向下
20 ……(同理)
21 case 'a'://向左
22 ……(同理)
23 case 'd'://向右
24 ……(同理)
25 default://錯(cuò)誤輸入
26 printf("你的輸入有誤,請(qǐng)輸入方向鍵");
27 }
說(shuō)明:
①這里只取向上的代碼進(jìn)行解釋,其他方向原理同理;
②游戲人物前面的位置有以下幾種情況:
1.人的前面是空地;
2.人的前面是終點(diǎn)位置;
3.人的前面是箱子
3.1.箱子的前面是空地;
3.2.箱子的前面是終點(diǎn)位置。
③第一個(gè)判斷條件map[count-1][caw]==0||map[count-1][caw]==4就是判斷前面第1和第2兩種情況的。如果滿足這兩種情況,則執(zhí)行map[count][caw]-=2和map[count-1][caw]+=2的操作,即:將人的位置變?yōu)榭盏夭⑶胺揭桓褡優(yōu)槿嘶蛘呷嗽诮K點(diǎn)的標(biāo)志。不滿足則執(zhí)行下一個(gè)判斷。
④第二個(gè)判斷條件map[count-1][caw]==3||map[count-1][caw]==7就是判斷前面第3種情況。人的前面有箱子,這個(gè)箱子可以是在空地之上,也可以是在終點(diǎn)位置之上(這個(gè)是為了區(qū)分兩種情況:一種是如果箱子在空地之上,那么人過(guò)后可以直接變?yōu)榭盏兀橇硗庖环N情況就是,當(dāng)箱子是在終點(diǎn)之上時(shí),人通過(guò)終點(diǎn)后,仍然需要有終點(diǎn)標(biāo)記)。而在人的前面有箱子(不管是箱子在空地之上還是在終點(diǎn)之上)這種情況下,因?yàn)橄渥拥那懊媲闆r不同,結(jié)果也會(huì)不同。比如說(shuō)箱子前是墻壁或者是箱子,那么人是不能推動(dòng)的,而如果前面是終點(diǎn)或者是空地則是可以推動(dòng)的。因此,在判斷完人前有箱子之后,還要進(jìn)一步判斷箱子前的情況,所以,就需要加上第二個(gè)判斷條件(即前面3.1和3.2情況):當(dāng)滿足map[count-2][caw]==0||map[count-2][caw]==4情況時(shí),進(jìn)行如下操作:map[count][caw]-=2;map[count-1][caw]-=1;map[count-2][caw]+=3。
第一個(gè)是將人的位置變?yōu)榭盏兀诙€(gè)是將箱子標(biāo)志/箱子在終點(diǎn)標(biāo)志變?yōu)槿藰?biāo)志/人在終點(diǎn)的標(biāo)志,第三個(gè)是將箱子前的空地/箱子前的終點(diǎn)位置變?yōu)橄渥?箱子在終點(diǎn)的標(biāo)志。
f) winshu()函數(shù):判斷輸贏的函數(shù)
1 int winshu()
2 {int k = 0;//初始化
3 int j,i;
4 for(i=0;i<9;i++)
5 {for (j=0;j<11;j++)
6 {if(map[i][j]==3)
7 k++;}}
8 if(k==0)
9 printf("恭喜你,你贏了!\n");}
這段函數(shù)是在每次移動(dòng)指令輸入后打印屏幕前進(jìn)行判斷的函數(shù),所以它引用在drawmain()函數(shù)里面(見(jiàn)前面的d部分)。其判斷依據(jù)很簡(jiǎn)單,我們把沒(méi)有到達(dá)的箱子命名為空箱子,其判斷依據(jù)就是當(dāng)空箱子為零時(shí),玩家就贏了。
將以上所有函數(shù)組合起來(lái)就可以完成這個(gè)簡(jiǎn)單的推箱子小游戲了,這個(gè)只是一關(guān),如果想要增加關(guān)卡數(shù),可以采用三維數(shù)組,新增的數(shù)組用來(lái)記錄關(guān)卡數(shù)即可。
《用C寫推箱子游戲源碼》已發(fā)布,密碼請(qǐng)關(guān)注微信公眾號(hào)“優(yōu)秀物聯(lián)人”后臺(tái)回復(fù)“驗(yàn)證碼”即可獲得(密碼不定時(shí)更換)。
總結(jié)
以上是生活随笔為你收集整理的用C写一个简单的推箱子游戏(二)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 三轮农用车5.50钢圈能不能安装600轮
- 下一篇: 网络工程专业就业方向及就业前景分析(网络