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 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> 手敲推箱子小游戏 -> 正文阅读

[游戏开发]手敲推箱子小游戏

#include <stdio.h>
#include <algorithm>
#include <conio.h>
#include <tchar.h>
#include <Windows.h>
#include <stdbool.h>

//人的坐标
typedef struct location {
	int x;
	int y;
}MAPLOCATION;
MAPLOCATION location = { -1, -1 }; //获取人的位置

//目的地坐标
typedef struct dastination {
	int x;
	int y;
}dastination;
dastination DStion[100] = { 0 };  //目的地坐标
int DESTINATION = 0;            //目的地个数
int customs = 1;                //关卡
//0: 空地   1:墙壁   2: 目的地
//3: 箱子   4:人     
int MAP[23][10] =
{ 
	{0, 1, 1, 1, 1, 1, 1, 1, 0, 0},
	{0, 1, 0, 0, 0, 0, 0, 1, 1, 1},
	{1, 1, 3, 1, 1, 1, 0, 0, 0, 1},
	{1, 4, 0, 0, 3, 0, 0, 3, 0, 1},
	{1, 0, 2, 2, 1, 0, 3, 0, 1, 1},
	{1, 1, 2, 2, 1, 0, 0, 0, 1, 0},
	{0, 1, 1, 1, 1, 1, 1, 1, 1, 0},//第一关 0~7

    {0, 0, 1, 1, 1, 1, 0, 0, 0, 0},
	{0, 0, 1, 4, 0, 1, 1, 1, 0, 0},
	{0, 0, 1, 0, 3, 0, 0, 1, 0, 0},
	{0, 1, 1, 1, 0, 1, 0, 1, 1, 0},
	{0, 1, 2, 1, 0, 1, 0, 0, 1, 0},
	{0, 1, 2, 3, 0, 0, 1, 0, 1, 0},
	{0, 1, 2, 0, 0, 0, 3, 0, 1, 0},
	{0, 1, 1, 1, 1, 1, 1, 1, 1, 0}, //第二关7~15

    {0, 0, 0, 1, 1, 1, 1, 1, 1, 1},
	{0, 0, 1, 1, 0, 0, 1, 0, 4, 1},
	{0, 0, 1, 0, 0, 0, 1, 0, 0, 1},
	{0, 0, 1, 3, 0, 3, 0, 3, 0, 1},
	{0, 0, 1, 0, 3, 1, 1, 0, 0, 1},
	{1, 1, 1, 0, 3, 0, 1, 0, 1, 1},
	{1, 2, 2, 2, 2, 2, 0, 0, 1, 0},
	{1, 1, 1, 1, 1, 1, 1, 1, 1, 0}  //第三关15~23
};
void Swap(int *a, int *b); //交换
void map();         //画地图
void GetLocation(); //获取人的位置
void Getdastination(); //获取目的地坐标
void UP();          //上
void below();       //下
void left();        //左
void right();       //右

int main() {
	int next;
	char KEY;
	int flag = 0;  //箱子是否全部到达的标志
	next:Getdastination();//获取目的地的坐标
	while (1) {
		GetLocation(); //获取人的位置
		map();         //画地图
		if (flag == DESTINATION) {   //过关
			break;
		}
		flag = 0;
		KEY = _getch();
		switch (KEY) {
		case 'w': case 'W':   //上
			UP();
			break;
		case 's': case 'S':   //下
			below();
			break;
		case 'a': case 'A':   //左
			left();        
			break;
		case 'd': case 'D':   //右
			right();
			break;
		}
		//箱子全部到目的上
		for (int i = 0; i < DESTINATION; i++) {
			if (MAP[DStion[i].x][DStion[i].y] == 3) {
				flag++;
			}
		}
		
	}
	printf("恭喜通关!\n");
	customs++;  //下一关卡
	DESTINATION = 0; //下一关的目的地个数
	flag = 0;    //重置过关标志位
	system("pause");
	goto next;
	return 0;
}
//画地图
void map() {
	system("CLS");
	if (customs == 1) {  //第一关
		for (int i = 0; i < 7; i++) {
			for (int j = 0; j < 10; j++) {
				switch (MAP[i][j]) {
				case 0:                  //空地
					printf("  ");
					break;

				case 1:                 //墙壁
					printf("■");
					break;
				case 2:                 //目的地
					printf("○");
					break;
				case 3:                 //箱子
					printf("□");
					break;
				case 4:                 //人
					printf("♀");
					break;
				}
			}
			printf("\n");
		}
	}
	if (customs == 2) { //第二关
		for (int i = 7; i < 15; i++) {
			for (int j = 0; j < 10; j++) {
				switch (MAP[i][j]) {
				case 0:                  //空地
					printf("  ");
					break;

				case 1:                 //墙壁
					printf("■");
					break;
				case 2:                 //目的地
					printf("○");
					break;
				case 3:                 //箱子
					printf("□");
					break;
				case 4:                 //人
					printf("♀");
					break;
				}
			}
			printf("\n");
		}
	}
	if (customs == 3) { //第三关
		for (int i = 15; i < 23; i++) {
			for (int j = 0; j < 10; j++) {
				switch (MAP[i][j]) {
				case 0:                  //空地
					printf("  ");
					break;

				case 1:                 //墙壁
					printf("■");
					break;
				case 2:                 //目的地
					printf("○");
					break;
				case 3:                 //箱子
					printf("□");
					break;
				case 4:                 //人
					printf("♀");
					break;
				}
			}
			printf("\n");
		}
	}
}
//交换
void Swap(int *a, int *b) {
	int c;
	
	c = *a;
	*a = *b;
	*b = c;
}
//获得人的位置
void GetLocation() {
	if (customs == 1) {
		for (int i = 0; i < 7; i++) {
			for (int j = 0; j < 10; j++) {
				if (MAP[i][j] == 4) {
					location.x = i;
					location.y = j;
				}
			}
		}
	}
	if (customs == 2) {
		for (int i = 7; i < 15; i++) {
			for (int j = 0; j < 10; j++) {
				if (MAP[i][j] == 4) {
					location.x = i;
					location.y = j;
				}

			}
		}
	}
	if (customs == 3) {
		for (int i = 15; i < 23; i++) {
			for (int j = 0; j < 10; j++) {
				if (MAP[i][j] == 4) {
					location.x = i;
					location.y = j;
				}

			}
		}
	}
}
//获得目的地坐标
void Getdastination() {
	if (customs == 1) {
		for (int i = 0; i < 7; i++) {
			for (int j = 0; j < 10; j++) {
				if (MAP[i][j] == 2) {
					DStion[DESTINATION].x = i;
					DStion[DESTINATION].y = j;
					DESTINATION++;
				}
			}
		}
	}
	if (customs == 2) {
		for (int i = 7; i < 15; i++) {
			for (int j = 0; j < 10; j++) {
				if (MAP[i][j] == 2) {
					DStion[DESTINATION].x = i;
					DStion[DESTINATION].y = j;
					DESTINATION++;
				}
			}
		}
	}
	if (customs == 3) {
		for (int i = 15; i < 23; i++) {
			for (int j = 0; j < 10; j++) {
				if (MAP[i][j] == 2) {
					DStion[DESTINATION].x = i;
					DStion[DESTINATION].y = j;
					DESTINATION++;
				}
			}
		}
	}

}
//什么情况可以移动
/*
   1.人的上面或 下面 或 左面 或 右面 是空地
   2.人的上面或 下面 或 左面 或 右面 是目的地
   3.人的上面或 下面 或 左面 或 右面 是箱子,箱子的上面或 下面 或 左面 或 右面是空地
   4.人的上面或 下面 或 左面 或 右面 是箱子,箱子的上面或 下面 或 左面 或 右面是目的地
*/

//上
void UP() {
	int flag = true;
	//遍历4个目的地
	for (int i = 0; i < DESTINATION; i++) {
		//判断当前自己的位置是不是目的
		if (location.x == DStion[i].x && location.y == DStion[i].y) {
			flag = false;
			break;
		}
	}
	//人站在的位置不是目的地
	if (flag) {
		//人的上面是空地或者是目的地可以向上走
		if (MAP[location.x - 1][location.y] == 0 || MAP[location.x - 1][location.y] == 2) {
			//人上面的位置是空地
			if (MAP[location.x - 1][location.y] == 0)
				Swap(&MAP[location.x - 1][location.y], &MAP[location.x][location.y]); //当前的位置与上一个位置进行交换
			//人上面的位置是目的地
			else {
				//离开,当前位置还原
				MAP[location.x][location.y] = 0; 
				//新的位置
				MAP[location.x - 1][location.y] = 4;
			}
			return;
		}
		//人的上面是箱子,箱子上面是空地或者是目的地
		if (MAP[location.x - 1][location.y] == 3 && (MAP[location.x - 2][location.y] == 0 || MAP[location.x - 2][location.y] == 2)) {
			//如果箱子上面是空地
			if (MAP[location.x - 2][location.y] == 0) {
				MAP[location.x][location.y] = 0; //还原当前的空地
				MAP[location.x - 1][location.y] = 4;  //人向上移动一格
				MAP[location.x - 2][location.y] = 3;  //箱子也向上移动一格
			}
			else {
				MAP[location.x][location.y] = 0; //还原当前的空地
				MAP[location.x - 1][location.y] = 4;  //人向上移动一格
				MAP[location.x - 2][location.y] = 3;  //箱子也向上移动一格
			}
		}
		
	}
	//人当前的位置是目的地
	else {
		//人的上面是空地或者是目的地可以向上走
		if (MAP[location.x - 1][location.y] == 0 || MAP[location.x - 1][location.y] == 2) {
			//人上面的位置是空地
			if (MAP[location.x - 1][location.y] == 0) {
				//人离开,当前目的还原
				MAP[location.x][location.y] = 2;
				
				// 新的位置
				MAP[location.x - 1][location.y] = 4;
			}
				
			//人上面的位置是目的地
			else {
				Swap(&MAP[location.x - 1][location.y], &MAP[location.x][location.y]); //目的地与目的地交换
			}
			return;
		}
		//人的上面是箱子,箱子上面是空地或者是目的地
		if (MAP[location.x - 1][location.y] == 3 && (MAP[location.x - 2][location.y] == 0 || MAP[location.x - 2][location.y] == 2)) {
			//如果箱子上面是空地
			if (MAP[location.x - 2][location.y] == 0) {
				MAP[location.x][location.y] = 2; //还原当前的目的地
				MAP[location.x - 1][location.y] = 4;  //人向上移动一格
				MAP[location.x - 2][location.y] = 3;  //箱子也向上移动一格
			}
			else {
				MAP[location.x][location.y] = 2; //还原当前的目的地
				MAP[location.x - 1][location.y] = 4;  //人向上移动一格
				MAP[location.x - 2][location.y] = 3;  //箱子也向上移动一格
			}
		}
	}
}
void below() {  //下
	int flag = true;
	//遍历4个目的地
	for (int i = 0; i < DESTINATION; i++) {
		//判断当前自己的位置是不是目的
		if (location.x == DStion[i].x && location.y == DStion[i].y) {
			flag = false;
			break;
		}
	}
	//人站在的位置不是目的地
	if (flag) {
		//人的下面是空地或者是目的地可以向上走
		if (MAP[location.x + 1][location.y] == 0 || MAP[location.x + 1][location.y] == 2) {
			//人下面的位置是空地
			if (MAP[location.x + 1][location.y] == 0)
				Swap(&MAP[location.x + 1][location.y], &MAP[location.x][location.y]); //当前的位置与上一个位置进行交换
			//人下面的位置是目的地
			else {
				//离开,当前位置还原
				MAP[location.x][location.y] = 0;
				//新的位置
				MAP[location.x + 1][location.y] = 4;
			}
			return;
		}
		//人的下面是箱子,箱子下面是空地或者是目的地
		if (MAP[location.x + 1][location.y] == 3 && (MAP[location.x + 2][location.y] == 0 || MAP[location.x + 2][location.y] == 2)) {
			//如果箱子下面是空地
			if (MAP[location.x + 2][location.y] == 0) {
				MAP[location.x][location.y] = 0; //还原当前的空地
				MAP[location.x + 1][location.y] = 4;  //人向下移动一格
				MAP[location.x + 2][location.y] = 3;  //箱子也向下移动一格
			}
			else {
				MAP[location.x][location.y] = 0; //还原当前的空地
				MAP[location.x + 1][location.y] = 4;  //人向下移动一格
				MAP[location.x + 2][location.y] = 3;  //箱子也向下移动一格
			}
		}

	}
	//人当前的位置是目的地
	else {
		//人的下面是空地或者是目的地可以向下走
		if (MAP[location.x + 1][location.y] == 0 || MAP[location.x + 1][location.y] == 2) {
			//人下面的位置是空地
			if (MAP[location.x + 1][location.y] == 0) {
				//人离开,当前目的还原
				MAP[location.x][location.y] = 2;

				// 新的位置
				MAP[location.x + 1][location.y] = 4;
			}

			//人下面的位置是目的地
			else {
				Swap(&MAP[location.x + 1][location.y], &MAP[location.x][location.y]); //目的地与目的地交换
			}
			return;
		}
		//人的下面是箱子,箱子下面是空地或者是目的地
		if (MAP[location.x + 1][location.y] == 3 && (MAP[location.x + 2][location.y] == 0 || MAP[location.x + 2][location.y] == 2)) {
			//如果箱子下面是空地
			if (MAP[location.x + 2][location.y] == 0) {
				MAP[location.x][location.y] = 2; //还原当前的目的地
				MAP[location.x + 1][location.y] = 4;  //人向上移动一格
				MAP[location.x + 2][location.y] = 3;  //箱子也向上移动一格
			}
			else {
				MAP[location.x][location.y] = 2; //还原当前的目的地
				MAP[location.x + 1][location.y] = 4;  //人向上移动一格
				MAP[location.x + 2][location.y] = 3;  //箱子也向上移动一格
			}
		}
	}
}
void left() {   //左
	int flag = true;
	//遍历4个目的地
	for (int i = 0; i < DESTINATION; i++) {
		//判断当前自己的位置是不是目的
		if (location.x == DStion[i].x && location.y == DStion[i].y) {
			flag = false;
			break;
		}
	}
	//人站在的位置不是目的地
	if (flag) {
		//人的左面是空地或者是目的地可以向左走
		if (MAP[location.x][location.y - 1] == 0 || MAP[location.x][location.y - 1] == 2) {
			//人左面的位置是空地
			if (MAP[location.x][location.y - 1] == 0)
				Swap(&MAP[location.x][location.y - 1], &MAP[location.x][location.y]); //当前的位置与上一个位置进行交换
			//人左面的位置是目的地
			else {
				//离开,当前位置还原
				MAP[location.x][location.y] = 0;
				//新的位置
				MAP[location.x][location.y-1] = 4;
			}
			return;
		}
		//人的左面是箱子,箱子左面是空地或者是目的地
		if (MAP[location.x][location.y - 1] == 3 && (MAP[location.x][location.y - 2] == 0 || MAP[location.x][location.y - 2] == 2)) {
			//如果箱子左面是空地
			if (MAP[location.x][location.y - 2] == 0) {
				MAP[location.x][location.y] = 0; //还原当前的空地
				MAP[location.x][location.y - 1] = 4;  //人向下移动一格
				MAP[location.x][location.y - 2] = 3;  //箱子也向下移动一格
			}
			else {
				MAP[location.x][location.y] = 0; //还原当前的空地
				MAP[location.x][location.y - 1] = 4;  //人向下移动一格
				MAP[location.x][location.y - 2] = 3;  //箱子也向下移动一格
			}
		}

	}
	//人当前的位置是目的地
	else {
		//人的左面是空地或者是目的地可以向左走
		if (MAP[location.x][location.y - 1] == 0 || MAP[location.x][location.y - 1] == 2) {
			//人左面的位置是空地
			if (MAP[location.x][location.y - 1] == 0) {
				//人离开,当前目的还原
				MAP[location.x][location.y] = 2;

				// 新的位置
				MAP[location.x][location.y - 1] = 4;
			}

			//人左面的位置是目的地
			else {
				Swap(&MAP[location.x][location.y - 1], &MAP[location.x][location.y]); //目的地与目的地交换
			}
			return;
		}
		//人的左面是箱子,箱子左面是空地或者是目的地
		if (MAP[location.x][location.y - 1] == 3 && (MAP[location.x][location.y - 2] == 0 || MAP[location.x][location.y - 2] == 2)) {
			//如果箱子左面是空地
			if (MAP[location.x][location.y - 2] == 0) {
				MAP[location.x][location.y] = 2; //还原当前的目的地
				MAP[location.x][location.y - 1] = 4;  //人向上移动一格
				MAP[location.x][location.y - 2] = 3;  //箱子也向上移动一格
			}
			else {
				MAP[location.x][location.y] = 2; //还原当前的目的地
				MAP[location.x][location.y - 1] = 4;  //人向上移动一格
				MAP[location.x][location.y - 2] = 3;  //箱子也向上移动一格
			}
		}
	}
}        
void right() {  //右
	int flag = true;
	//遍历4个目的地
	for (int i = 0; i < DESTINATION; i++) {
		//判断当前自己的位置是不是目的
		if (location.x == DStion[i].x && location.y == DStion[i].y) {
			flag = false;
			break;
		}
	}
	//人站在的位置不是目的地
	if (flag) {
		//人的右面是空地或者是目的地可以向右走
		if (MAP[location.x][location.y + 1] == 0 || MAP[location.x][location.y + 1] == 2) {
			//人右面的位置是空地
			if (MAP[location.x][location.y + 1] == 0)
				Swap(&MAP[location.x][location.y + 1], &MAP[location.x][location.y]); //当前的位置与上一个位置进行交换
			//人右面的位置是目的地
			else {
				//离开,当前位置还原
				MAP[location.x][location.y] = 0;
				//新的位置
				MAP[location.x][location.y + 1] = 4;
			}
			return;
		}
		//人的右面是箱子,箱子右面是空地或者是目的地
		if (MAP[location.x][location.y + 1] == 3 && (MAP[location.x][location.y + 2] == 0 || MAP[location.x][location.y + 2] == 2)) {
			//如果箱子右面是空地
			if (MAP[location.x][location.y + 2] == 0) {
				MAP[location.x][location.y] = 0; //还原当前的空地
				MAP[location.x][location.y + 1] = 4;  //人向右移动一格
				MAP[location.x][location.y + 2] = 3;  //箱子也向右移动一格
			}
			else {
				MAP[location.x][location.y] = 0; //还原当前的空地
				MAP[location.x][location.y + 1] = 4;  //人向右移动一格
				MAP[location.x][location.y + 2] = 3;  //箱子也向右移动一格
			}
		}

	}
	//人当前的位置是目的地
	else {
		//人的左面是空地或者是目的地可以向右走
		if (MAP[location.x][location.y + 1] == 0 || MAP[location.x][location.y + 1] == 2) {
			//人右面的位置是空地
			if (MAP[location.x][location.y + 1] == 0) {
				//人离开,当前目的还原
				MAP[location.x][location.y] = 2;

				// 新的位置
				MAP[location.x][location.y + 1] = 4;
			}

			//人右面的位置是目的地
			else {
				Swap(&MAP[location.x][location.y + 1], &MAP[location.x][location.y]); //目的地与目的地交换
			}
			return;
		}
		//人的右面是箱子,箱子右面是空地或者是目的地
		if (MAP[location.x][location.y + 1] == 3 && (MAP[location.x][location.y + 2] == 0 || MAP[location.x][location.y + 2] == 2)) {
			//如果箱子右面是空地
			if (MAP[location.x][location.y + 2] == 0) {
				MAP[location.x][location.y] = 2; //还原当前的目的地
				MAP[location.x][location.y + 1] = 4;  //人向右移动一格
				MAP[location.x][location.y + 2] = 3;  //箱子也向右移动一格
			}
			else {
				MAP[location.x][location.y] = 2; //还原当前的目的地
				MAP[location.x][location.y + 1] = 4;  //人向右移动一格
				MAP[location.x][location.y + 2] = 3;  //箱子也向右移动一格
			}
		}
	}

}
  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-08-01 14:48:33  更:2021-08-01 14:49:06 
 
开发: 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/4 7:44:58-

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