【C语言小游戏】--推箱子
2023-12-24 14:45:39
目录
游戏整体思路
1.地图的实现(空地 ?墙壁 ?人 ?箱子 ?目标点 )
2.人物的移动
3.人物推箱子
4.胜利的判断(地图上没有箱子了)
5.关卡的实现
代码实现
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include<conio.h>//_getch()//输入一个按键,才执行下一个语句
#include <Windows.h>
/*
实现思路:
1.地图的实现(空地 墙壁 人 箱子 目标点 )
2.人物的移动
3.人物推箱子
4.胜利的判断(地图上没有箱子了)
5.关卡的实现
*/
//空地 0 墙壁 1 人 2 箱子 3 目标点 4
//关卡数组Map 三维数组
int Map[3][10][10] =
{
{//第一关
{1,1,1,1,1,1,1,1,1,1},
{1,2,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,1},
{1,3,3,4,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,1},
{1,4,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,1},
{1,0,0,0,3,0,4,0,0,1},
{1,0,0,0,0,0,0,0,0,1},
{1,1,1,1,1,1,1,1,1,1}, },
{//第二关
{1,1,1,1,1,1,1,1,1,1},
{1,2,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,1,0,1},
{1,3,3,4,0,0,0,0,0,1},
{1,0,0,0,1,0,0,0,0,1},
{1,4,0,0,0,0,0,0,0,1},
{1,0,0,0,0,1,0,0,0,1},
{1,0,0,0,3,0,4,0,0,1},
{1,0,0,0,0,0,0,0,0,1},
{1,1,1,1,1,1,1,1,1,1}, },
{//第三关
{1,1,1,1,1,1,1,1,1,1},
{1,2,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,1},
{1,3,3,4,0,0,0,0,0,1},
{1,0,0,0,0,3,0,0,0,1},
{1,4,0,0,0,4,0,0,0,1},
{1,0,0,0,0,0,0,0,0,1},
{1,0,1,0,3,0,4,0,0,1},
{1,0,0,0,0,0,0,0,0,1},
{1,1,1,1,1,1,1,1,1,1}, }
};
int level = 0;//记录当前关卡,默认为第0关
int maparr[10][10] = { 0 };
/*
一 初始化游戏
二 更新游戏数据
三 结束游戏
初始化游戏
while(结束游戏)
{
更新游戏数据
}
*/
//初始化游戏
void initGame();
//地图加载函数
void initMap();
//绘制函数
void drawMap();
//更新游戏数据
void runGame();
//人物的移动函数
void moveInmap(int off_x, int off_y);
//结束函数
int endGame();
int main()
{
initGame();
L:initMap();
while (endGame())
{
runGame();
}
if (level < 3)
{
level++;
if (level != 3)
printf("恭喜通过本关,按任意键进入下一关\n");
goto L;
}
printf("游戏胜利\n");
return 0;
}
//初始化游戏
void initGame()
{
printf("\n\n\n 推箱子--按任意键开始");
_getch();
}
//地图加载函数
void initMap()
{
//加载当前关卡地图
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
maparr[i][j] = Map[level][i][j];
}
}
}
void drawMap()
{
system("cls");
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
switch (maparr[i][j])
{
case 0:
printf(" ");
break;
case 1:
printf("■");
break;
case 2:
printf("♀");
break;
case 3:
printf("●");
break;
case 4:
printf("☆");
break;
case 2 + 4:
printf("♀");
break;
case 3 + 4:
printf("★");
break;
default:
break;
}
}
printf("\n");
}
}
//更新游戏数据
void runGame()
{
switch (_getch())//输入一个按键,才执行下一个语句
{
case 'w':
case 'W':
printf("向上\n");
moveInmap(-1, 0);
break;
case 's':
case 'S':
printf("向下\n");
moveInmap(1, 0);
break;
case 'a':
case 'A':
printf("向左\n");
moveInmap(0, -1);
break;
case 'd':
case 'D':
printf("向右\n");
moveInmap(0, 1);
break;
default:
break;
}
drawMap();
}
//人物的移动函数
void moveInmap(int off_x, int off_y)
{
//找人
//人 :maparr[playerPos_X][playerPos_Y];
// 人的下面:[playerPos_X+1][playerPos_Y];
// 人的下面的下面:[playerPos_X+1+1][playerPos_Y];
//四向
//人 :maparr[playerPos_X][playerPos_Y];
// 人的下面:[playerPos_X+off_x][playerPos_Y+off_y];
// 人的下面的下面:[playerPos_X+off_x*2][playerPos_Y+off_y*2];
int playerPos_X = 0;
int playerPos_Y = 0;
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
if (2 == maparr[i][j] || 2 + 4 == maparr[i][j])
{
playerPos_X = i;
playerPos_Y = j;
}
}
}
//移动
if (0 == maparr[playerPos_X + off_x][playerPos_Y + off_y] ||
4 == maparr[playerPos_X + off_x][playerPos_Y + off_y])//空地、目标点
{
maparr[playerPos_X][playerPos_Y] -= 2;
maparr[playerPos_X + off_x][playerPos_Y + off_y] += 2;
}
else if (3 == maparr[playerPos_X + off_x][playerPos_Y + off_y] ||
3 + 4 == maparr[playerPos_X + off_x][playerPos_Y + off_y])//箱子、箱子在点上
{
if (0 == maparr[playerPos_X + off_x * 2][playerPos_Y + off_y * 2] ||
4 == maparr[playerPos_X + off_x * 2][playerPos_Y + off_y * 2])//空地、目标点
{
maparr[playerPos_X][playerPos_Y] -= 2;
//maparr[playerPos_X + 1][playerPos_Y] += 2;
//maparr[playerPos_X+1][playerPos_Y] -= 3;
maparr[playerPos_X + off_x][playerPos_Y + off_y] += (2 - 3);
maparr[playerPos_X + off_x * 2][playerPos_Y + off_y * 2] += 3;
}
}
}
//结束函数
int endGame()
{
//遍历
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
if (3 == maparr[i][j])
{
return 1;
}
}
}
return 0;
}
??
文章来源:https://blog.csdn.net/m0_73258399/article/details/128556273
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!