目录1.前言2.游戏效果展示3.项目分析4.地图实现4.1存储地图4.2打印地图5.控制角色移动5.1找到控制的角色5.2实现移动6.判断胜利总结1.前言 首先推箱子是C语言的一个经
首先推箱子是C语言的一个经典的项目,本篇文字将会介绍如何从零开始实现c语言如何实现推箱子
游戏元素:
游戏目的:
玩家控制角色在地图的空地上进行移动,通过推动箱子躲避障碍,将所有的箱子推至胜利点即可成功。
首先存储地图我们使用数组来进行存储,为什么我们会用到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;
}
本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程网的更多内容!
--结束END--
本文标题: 详解C语言实现推箱子的基本功能
本文链接: https://lsjlt.com/news/139559.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0