2021-10-05

C语言编写推箱子游戏(包教包会)
1:效果图:2021-10-05

2:2021-10-05

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:
2021-10-05

上一篇:并发编程的基石——CAS机制


下一篇:11-Java中CAS操作