C语言编写推箱子游戏(包教包会)
1:效果图:
2:
3:网上找一些图片代表箱子,推得人,我这里采用的是蔡徐坤打篮球!
4.代码
#include<stdio.h>
#include<stdlib.h>
#include<graphics.h> //easyX图形库头文件
#include<conio.h>
/* 推箱子游戏:
开发游戏的步骤:
1.控制台:推箱子
2.图形编程-->可视化推箱子
所用到的知识:
1.二维数组 array[a][b]
2.循环,选择,判断,函数
关卡:三维数组--->多个二维数组
过关:判断当前地图箱子个数
*/
//关卡
int cas = 0;
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,
};
//绘制地图
void drawmap()
{
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 8; j++)
{
switch (map[cas][i][j])
{
case 0: //空地
printf(" ");
break;
case 1: //墙
printf("█");
break;
case 3: //目的地:篮筐
printf("☆");
break;
case 4: //箱子:篮球
printf("★");
break;
case 5: //人:CXK
case 8:
printf("人");
break;
case 7: //把箱子推进目的地:鸡
printf("⊙");
break;
}
}
printf("\n");
}
}
//游戏过程
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;
}
int main()
{
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
}
明天发俄罗斯方块的,加群交流学习!
5: