ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

2021-10-05

2021-10-05 16:34:13  阅读:136  来源: 互联网

标签:case 10 map cas 05 箱子 break 2021 移动


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:
在这里插入图片描述

标签:case,10,map,cas,05,箱子,break,2021,移动
来源: https://blog.csdn.net/qq958948605/article/details/120615148

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有