日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

用C写一个简单的推箱子游戏(二)

發(fā)布時(shí)間:2024/8/24 编程问答 28 如意码农
生活随笔 收集整理的這篇文章主要介紹了 用C写一个简单的推箱子游戏(二) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

下面接著上一篇隨筆《用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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。