c语言实操项目(推箱子零基础项目)
c语言实操项目(推箱子零基础项目)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 箭头:小
这篇文章主要为大家详细介绍了C语言实现——《推箱子项目》,文中示例代码介绍的非常详细,具有一定的参考价值 感兴趣的小伙伴们可以参考一下!
本项目结合了分支,循环,数组的结合,并且对逻辑也是有一定的要求,但是这些在我们项目源码里面都会有注释,大家到时候学习的时候千万不要忽略注释,注释可以更好地帮你理解代码,尤其是C语言初学者。
本项目编译环境:VS2019/VS2013;
插件:图形库插件easyX;
效果图展示 源代码示例1.头文件
#include<stdio.h>
#include<stdlib.h>
#include<graphics.h> //easyX图形库头文件
#include<conio.h>
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("\n");
}
}
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/C 感兴趣可以关注小编在后台私信我:【编程交流】一起来学习哦!可以领取一些C/C 的项目学习视频资料哦!已经设置好了关键词自动回复,自动领取就好了!