這篇文章主要為大家詳細介紹了C語言實現——《推箱子項目》,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下!
本項目結合了分支,循環,數組的結合,并且對邏輯也是有一定的要求,但是這些在我們項目源碼里面都會有注釋,大家到時候學習的時候千萬不要忽略注釋,注釋可以更好地幫你理解代碼,尤其是C語言初學者。
本項目編譯環境:VS2019/VS2013;
插件:圖形庫插件easyX;
源代碼示例
1.頭文件
2.關卡設置(這里我們定義一個三維數組,三維數組大家可以理解為多個二維數組)
int cas = 0;
IMAGE img0, img1, img2, img3, img4, img5;
int map[3][8][8] =
{
0, 0, 1, 1, 1, 0, 0, 0,
0, 0, 1, 3, 1, 0, 0, 0,
0, 0, 1, 0, 1, 1, 1, 1,
1, 1, 1, 4, 0, 4, 3, 1,
1, 3, 0, 4, 5, 1, 1, 1,
1, 1, 1, 1, 4, 1, 0, 0,
0, 0, 0, 1, 3, 1, 0, 0,
0, 0, 0, 1, 1, 1, 0, 0,
0, 0, 1, 1, 1, 0, 0, 0,
0, 0, 1, 3, 1, 0, 0, 0,
0, 0, 1, 0, 1, 1, 1, 1,
1, 1, 1, 4, 0, 4, 3, 1,
1, 3, 0, 4, 5, 1, 1, 1,
1, 1, 1, 1, 4, 1, 0, 0,
0, 0, 0, 1, 3, 1, 0, 0,
0, 0, 0, 1, 1, 1, 0, 0,
0, 0, 1, 1, 1, 0, 0, 0,
0, 0, 1, 3, 1, 0, 0, 0,
0, 0, 1, 0, 1, 1, 1, 1,
1, 1, 1, 4, 0, 4, 3, 1,
1, 3, 0, 4, 5, 1, 1, 1,
1, 1, 1, 1, 4, 1, 0, 0,
0, 0, 0, 1, 3, 1, 0, 0,
0, 0, 0, 1, 1, 1, 0, 0,
};
3.繪制推箱子地圖
void drawmap()
{
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 8; j++)
{
int x = j * 64;
int y = i * 64;
switch (map[cas][i][j])
{
case 0: //空地
putimage(x, y, &img0);
//printf(" ");
break;
case 1: //墻
putimage(x, y, &img1);
//printf("█");
break;
case 3: //目的地:籃筐
putimage(x, y, &img2);
//printf("☆");
break;
case 4: //箱子:籃球
putimage(x, y, &img3);
//printf("★");
break;
case 5: //人:CXK
case 8:
putimage(x, y, &img4);
//printf("人");
break;
case 7: //把箱子推進目的地:雞
putimage(x, y, &img5);
//printf("⊙");
break;
}
}
printf(" ");
}
}
4.游戲過程(這部分是整個游戲的核心部分,也是最難理解的部分,大家要仔細解讀)
void playGame()
{
//按鍵操作:游戲過程
//找人:找CXK:遍歷二維數組--->元素= 5||8
int i, j;
for (i = 0; i < 8; i++)
{
for (j = 0; j < 8; j++)
{
//找人
if (map[cas][i][j] == 5 || map[cas][i][j] == 8)
{
break;//break只能跳出一層循環
}
}
//找人
if (map[cas][i][j] == 5 || map[cas][i][j] == 8)
{
break;//break只能跳出一層循環
}
}
//已經找到人了
//通過鍵盤操作人物
char userKey = _getch();
switch (userKey)
{
//那幾個鍵移動:wsad 箭頭:小鍵盤 鍵碼值:72 80 75 77
case 'w':
case 'W':
case 72:
//移動的原理:改變二維數組元素的值
//移動的步驟:
//1.先讓人移動 map[cas][i-1][j]=0||map[cas][i-1][j]=3
if (map[cas][i - 1][j] == 0 || map[cas][i - 1][j] == 3)
{
//人移動的原理:元素的值
map[cas][i][j] -= 5;
map[cas][i - 1][j] += 5;
}
//2.推箱子,讓箱子移動
//先找到(固定)箱子
if (map[cas][i - 1][j] == 4 || map[cas][i - 1][j] == 7)
{
//籃球,箱子移動的條件
if (map[cas][i - 2][j] == 0 || map[cas][i - 2][j] == 3)
{
//推箱子的原理:移動元素值
map[cas][i][j] -= 5;
map[cas][i - 1][j] += 5;
map[cas][i - 1][j] -= 4;
map[cas][i - 2][j] += 4;
}
}
break;
case 's':
case 'S':
case 80:
//1.先讓人移動 map[cas][i-1][j]=0||map[cas][i-1][j]=3
if (map[cas][i + 1][j] == 0 || map[cas][i + 1][j] == 3)
{
//人移動的原理:元素的值
map[cas][i][j] -= 5;
map[cas][i + 1][j] += 5;
}
//2.推箱子,讓箱子移動
//先找到(固定)箱子
if (map[cas][i + 1][j] == 4 || map[cas][i + 1][j] == 7)
{
//籃球,箱子移動的條件
if (map[cas][i + 2][j] == 0 || map[cas][i + 2][j] == 3)
{
//推箱子的原理:移動元素值
map[cas][i][j] -= 5;
map[cas][i + 1][j] += 5;
map[cas][i + 1][j] -= 4;
map[cas][i + 2][j] += 4;
}
}
break;
case 'a':
case 'A':
case 75:
//1.先讓人移動 map[cas][i-1][j]=0||map[cas][i-1][j]=3
if (map[cas][i][j - 1] == 0 || map[cas][i][j - 1] == 3)
{
//人移動的原理:元素的值
map[cas][i][j] -= 5;
map[cas][i][j - 1] += 5;
}
//2.推箱子,讓箱子移動
//先找到(固定)箱子
if (map[cas][i][j - 1] == 4 || map[cas][i][j - 1] == 7)
{
//籃球,箱子移動的條件
if (map[cas][i][j - 2] == 0 || map[cas][i][j - 2] == 3)
{
//推箱子的原理:移動元素值
map[cas][i][j] -= 5;
map[cas][i][j - 1] += 5;
map[cas][i][j - 1] -= 4;
map[cas][i][j - 2] += 4;
}
}
break;
case 'd':
case 'D':
case 77:
//1.先讓人移動 map[cas][i-1][j]=0||map[cas][i-1][j]=3
if (map[cas][i][j + 1] == 0 || map[cas][i][j + 1] == 3)
{
//人移動的原理:元素的值
map[cas][i][j] -= 5;
map[cas][i][j + 1] += 5;
}
//2.推箱子,讓箱子移動
//先找到(固定)箱子
if (map[cas][i][j + 1] == 4 || map[cas][i][j + 1] == 7)
{
//籃球,箱子移動的條件
if (map[cas][i][j + 2] == 0 || map[cas][i][j + 2] == 3)
{
//推箱子的原理:移動元素值
map[cas][i][j] -= 5;
map[cas][i][j + 1] += 5;
map[cas][i][j + 1] -= 4;
map[cas][i][j + 2] += 4;
}
}
break;
}
}
int gameOver()
{
int flag = 0;
//遍歷二維數組元素-->目的地:球框
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 8; j++)
{
if (map[cas][i][j] == 3)
{
flag = 1;
}
}
}
return flag;
}
5.主函數部分
int main()
{
loadimage(&img0, L"0.bmp"); //64*64
loadimage(&img1, L"1.bmp"); //64*64
loadimage(&img2, L"3.bmp"); //64*64
loadimage(&img3, L"4.bmp"); //64*64
loadimage(&img4, L"5.bmp"); //64*64
loadimage(&img5, L"7.bmp"); //64*64
initgraph(64 * 8, 64 * 8);
while (1)
{
drawmap();
playGame();
if (!gameOver())
{
cas++;
if (cas == 3)
break;
}
system("cls");
}
//initgraph(600,600);//窗口:寬度*高度
////貼圖:基本貼圖技術
////1.定義圖片變量
//IMAGE img;
////2.加載圖片
//loadimage(&img, L"timg.jpg", 600, 600);
////3.顯示圖片
//putimage(0, 0, &img);
while (1); //防止閃屏
closegraph(); //關閉窗口
return 0;
}
整個項目的源碼已經分享,這是一個三關完善的推箱子游戲,大家如果有興趣可以自己去試試做更多的關卡來玩!
如果學習的過程中有什么問題,以及本項目有什么不懂的地方,都可以來找我交流,我來幫你!
那么今天的分享就到這里了,后續會更新更多精彩項目的,大家要好好學C語言C++喲~
寫在最后:對于準備學習C/C++編程的小伙伴,如果你想更好的提升你的編程核心能力(內功)不妨從現在開始!
-
C語言
+關注
關注
180文章
7598瀏覽量
136197 -
源代碼
+關注
關注
96文章
2944瀏覽量
66670
原文標題:C語言項目實戰:《推箱子》零基礎項目!270 行源碼注釋示例
文章出處:【微信號:cyuyanxuexi,微信公眾號:C語言編程學習基地】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論