本文主要详细介绍了c语言实现—— 《推箱子项目》。 示例代码介绍得非常详细,有一定的参考价值。 有兴趣的伙伴请作为参考。
本项目结合了分支、循环、数组的结合,对逻辑也有一定的要求,但是这些都在我们项目的源代码中有注释,大家在那个时候请不要无视注释。 评论有助于理解代码,特别是c语言的初学者。
本项目的编译环境: VS2019/VS2013;
插件:图形库插件easyX;
效果图展示
。
源代码示例
1.头文件# #包括stdio.h
# #包括stdlib.h
# #包含图形. h//easyx图形库标头
# #包括连续号h
2 .级别设定(在此定义三维数组。 三维数组可以理解为多个二维数组。
int cas=0;
图像图像图像0、图像1、图像2、图像3、图像4、图像5;
int地图88=
{
0,0,1,1,1,0,0,0,
0,0,1,3,1,0,0,0,
0,0,1,0,1,1,1,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,
一、一、一、四、零、四、三、一、
一、三、零、四、五、一、一、一、
一,一,一,一,四,一,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,
一、一、一、四、零、四、三、一、
一、三、零、四、五、一、一、一、
一,一,一,一,四,一,0,0,
0,0,0,1,3,1,0,0,
0,0,0,1,1,1,0,0,
(;
3 .绘制推动箱的地图
三维绘制地图() )
{
for (英制=0; i 8; I ) )
{
for(intj=0; j 8; j )日本
{
int x=j * 64;
int y=i * 64;
sitch (地图)
{
case 0: //空地
脉冲(x,y,img0);
//printf (' );
布莱克;
case 1: //墙
脉冲(x,y,img1);
//printf ((() );
布莱克;
case 3: //目的地:篮球
脉冲(x,y,img2);
//printf (' );
布莱克;
case 4: //箱:篮球
脉冲(x,y,img3 );
//printf (' );
布莱克;
case 5: //人: CXK
case 8:
脉冲(x,y,img4);
//printf (人);
布莱克;
case 7: //将箱子推进目的地:鸡
脉冲(x,y,img5 );
//printf (();
布莱克;
}
}
打印机((n ) );
}
}
4 .游戏的过程(这部分是整个游戏的核心部分,也是最难理解的部分,所以大家必须仔细解读)。
void playGame (
{
//键操作:游戏进程
//找人:找CXK :遍历二维数组---元素=5||8
英特尔,j;
for(I=0; i 8; I ) )
{
for(j=0; j 8; j )日本
{
//找人
if (地图I==5|地图I==8)
{
布莱克; //break只能跳出一楼的循环
}
}
//找人
if (地图I==5|地图I==8)
{
布莱克; //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++的项目学习视频资料哦!已经设置好了关键词自动回复,自动领取就好了!