IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 2021-10-05 -> 正文阅读

[C++知识库]2021-10-05

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

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-06 12:00:37  更:2021-10-06 12:03:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/20 0:00:31-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码