日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

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

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

下面接著上一篇隨筆《用C寫一個簡單的推箱子游戲(一)》來寫

tuidong()函數(shù)是用來判斷游戲人物前方情況的函數(shù),是推箱子游戲中非常重要的一個函數(shù),下面從它開始繼續(xù)介紹推箱子的小程序怎么寫:

e)   tuidong()函數(shù):判斷移動人物的前方的情況

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();

說明:

①為了判斷游戲人物位置,首先需要將人物位置記錄下來,此處用count和caw變量記錄初始位置;

②使用getch()函數(shù)而不用getchar()函數(shù)的原因是:getchar()函數(shù)輸入一個字符后需要回車來進行下一個字符的輸入,比較麻煩,而getch()函數(shù)則不需要回車就能連續(xù)輸入多個字符。所以采用getch()函數(shù)對玩家鍵盤輸入的內(nèi)容進行記錄,并將值賦給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://錯誤輸入
26 printf("你的輸入有誤,請輸入方向鍵");
27 }

說明:

①這里只取向上的代碼進行解釋,其他方向原理同理;

②游戲人物前面的位置有以下幾種情況:

1.人的前面是空地;

2.人的前面是終點位置;

3.人的前面是箱子

3.1.箱子的前面是空地;

3.2.箱子的前面是終點位置。

③第一個判斷條件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點的標(biāo)志。不滿足則執(zhí)行下一個判斷。

④第二個判斷條件map[count-1][caw]==3||map[count-1][caw]==7就是判斷前面第3種情況。人的前面有箱子,這個箱子可以是在空地之上,也可以是在終點位置之上(這個是為了區(qū)分兩種情況:一種是如果箱子在空地之上,那么人過后可以直接變?yōu)榭盏兀橇硗庖环N情況就是,當(dāng)箱子是在終點之上時,人通過終點后,仍然需要有終點標(biāo)記)。而在人的前面有箱子(不管是箱子在空地之上還是在終點之上)這種情況下,因為箱子的前面情況不同,結(jié)果也會不同。比如說箱子前是墻壁或者是箱子,那么人是不能推動的,而如果前面是終點或者是空地則是可以推動的。因此,在判斷完人前有箱子之后,還要進一步判斷箱子前的情況,所以,就需要加上第二個判斷條件(即前面3.1和3.2情況):當(dāng)滿足map[count-2][caw]==0||map[count-2][caw]==4情況時,進行如下操作:map[count][caw]-=2;map[count-1][caw]-=1;map[count-2][caw]+=3。

第一個是將人的位置變?yōu)榭盏兀诙€是將箱子標(biāo)志/箱子在終點標(biāo)志變?yōu)槿藰?biāo)志/人在終點的標(biāo)志,第三個是將箱子前的空地/箱子前的終點位置變?yōu)橄渥?箱子在終點的標(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ù)是在每次移動指令輸入后打印屏幕前進行判斷的函數(shù),所以它引用在drawmain()函數(shù)里面(見前面的d部分)。其判斷依據(jù)很簡單,我們把沒有到達的箱子命名為空箱子,其判斷依據(jù)就是當(dāng)空箱子為零時,玩家就贏了。

將以上所有函數(shù)組合起來就可以完成這個簡單的推箱子小游戲了,這個只是一關(guān),如果想要增加關(guān)卡數(shù),可以采用三維數(shù)組,新增的數(shù)組用來記錄關(guān)卡數(shù)即可。

用C寫推箱子游戲源碼》已發(fā)布,密碼請關(guān)注微信公眾號“優(yōu)秀物聯(lián)人”后臺回復(fù)“驗證碼”即可獲得(密碼不定時更換)。

總結(jié)

以上是生活随笔為你收集整理的用C写一个简单的推箱子游戏(二)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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