這篇文章主要為大家展示了“如何使用C語言實現推箱子游戲”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“如何使用C語言實現推箱子游戲”這篇文章吧。
推箱子是c語言的一個經典的項目

游戲元素:
空地 0
墻壁 1
角色 2
箱子 3
勝利點 4
游戲目的:
玩家控制角色在地圖的空地上進行移動,通過推動箱子躲避障礙,將所有的箱子推至勝利點即可成功。

首先存儲地圖我們使用數組來進行存儲,為什么我們會用到char而不是int?是因為int普遍為4字節,char為1字節,我們就可以大大減少存儲地圖所需要的內存。如果要寫多張地圖的話,僅僅將數組擴充至三維即可,作者將會在之后的文章進行說明。
char map[10][10] =
{
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
{ 1, 0, 0, 0, 0, 1, 0, 0, 0, 1 },
{ 1, 0, 0, 0, 0, 1, 4, 0, 0, 1 },
{ 1, 0, 0, 0, 0, 1, 1, 0, 0, 1 },
{ 1, 0, 0, 0, 0, 1, 0, 0, 0, 1 },
{ 1, 0, 0, 2, 0, 0, 0, 0, 0, 1 },
{ 1, 1, 1, 1, 0, 0, 3, 0, 0, 1 },
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }
};對應地圖的打印我們則需要對地圖進行遍歷,利用switch語句將地圖打印在控制臺上面。
for (size_t i = 0; i < 10; i++)
{
for (size_t j = 0; j < 10; j++)
{
switch (map[i][j])
{
case 0:
printf(" "); // 注意一點是兩個空格,如果是一個空格的時候會使地圖打印出現一些問題
break;
case 1:
printf("█");
break;
case 2:
printf("♀");
break;
case 3:
printf("●");
break;
case 4:
printf("☆");
break;
default:
break;
}
}
printf("\n");
}int posX = 0, posY = 0;
for (size_t i = 0; i < 10; i++)
{
for (size_t j = 0; j < 10; j++)
{
if (2 == map[i][j] || 2 + 4 == map[i][j])
{
posX = i;
posY = j;
break;
//找到角色,記錄其所在的x軸和y軸的坐標
}
}
}// 控制(鍵盤:WSAD(上下左右))
// 需要從鍵盤獲取按鍵(字符)
switch (getch()) // getch()該方法需要在開頭導入#include <conio.h>
{
case 'w':
case 'W':
printf("向上\n");
/*
向上邏輯:
改變數組元素的值
以人為參考
上面可能是:
空地 移動
墻壁 不動
成功點 移動
箱子 判斷箱子上面是個啥
空地 移動
成功點 移動
墻壁 不動
另一個箱子 不動
*/
// 上面是空地或成功點 map[posX][posY]:主角所在的位置
if (0 == map[posX - 1][posY] || 4 == map[posX - 1][posY])
{
// 當前位置人離開
map[posX][posY] -= 2;
// 上面位置人過來
map[posX - 1][posY] += 2;
}
// 上面是箱子(將箱子從點上推走)
else if (3 == map[posX - 1][posY] || 3 + 4 == map[posX - 1][posY])
{
// 箱子上面是空地或成功點 map[posX - 1][posY]: 箱子位置
if (0 == map[posX - 2][posY] || 4 == map[posX - 2][posY])
{
// 當前位置人離開
map[posX][posY] -= 2;
// 上面位置人過來
map[posX - 1][posY] += 2;
// 上面位置箱子離開
map[posX - 1][posY] -= 3;
// 上面的上面箱子過來
map[posX - 2][posY] += 3;
}
}
break;
case 's':
case 'S':
printf("向下\n");
break;
case 'a':
case 'A':
printf("向左\n");
break;
case 'd':
case 'D':
printf("向右\n");
break;
default:
break;
}對地圖遍歷搜索,如果發現沒有箱子的話,就可以判斷為勝利。(size_t是C++里面的東西,size_t相當于unsigned int,這里僅做理解即可,可以用int來代替size_t)
bool isWin()
{
for (size_t i = 0; i < 10; i++)
{
for (size_t j = 0; j < 10; j++)
{
if (map[i][j] == 3)
{
return false;
}
}
}
return true;
}以上是“如何使用C語言實現推箱子游戲”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。