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++知识库 -> 推箱子(C语言)2021.7.14 -> 正文阅读

[C++知识库]推箱子(C语言)2021.7.14

推箱子
在这里插入图片描述

1)

#include <stdio.h>
#include <stdlib.h>
#include <getch.h>

int main(int arhc,const char* argv[])
{
	//定义地图
	char box[8][8] = {
		{0,0,1,1,1,1,0,0},
		{0,0,1,4,4,1,0,0},
		{0,1,1,0,4,1,1,0},
		{0,1,0,0,3,4,1,0},
		{1,1,0,3,0,0,1,1},
		{1,0,0,1,3,3,0,1},
		{1,0,0,2,0,0,0,1},
		{1,1,1,1,1,1,1,1},
		};

		//定义人的坐标
		int man_x = 6,man_y = 3;

		//定义布数
		int a = 0;

		for(;;)
		{
			//清理屏幕
			system("clear");

			for(int i=0;i<8;i++)
			{
				for(int j=0; j<8; j++)
				{
					switch(box[i][j])
					{
						case 0:printf("  "); break;	
						case 1:printf("# "); break;	
						case 2:printf("@ "); break;	
						case 3:printf("* "); break;	
						case 4:printf("o "); break;
						case 5:printf("* "); break;
						case 6:printf("@ "); break;
					}
				}
				printf("\n");
			}
			//判断四个箱子全在目标点
			if(box[1][3] == 5 && 5 == box[1][4] && 5 == box[2][4] && 5 == box[3][5])
			{
				printf("恭喜您成功啦,一共花费了%d步",a);
				return 0;
			}

			//获取方向键并处理
			switch(getch())
			{
				case 183: case 119:
					if(box[man_x-1][man_y] == 3 && box[man_x-2][man_y] == 4)
					{
						box[man_x][man_y] = 0;
						box[man_x-2][man_y] = 5;
						box[--man_x][man_y] = 2;
						a++;
					}
					else if(box[man_x-1][man_y] == 3 && box[man_x-2][man_y] == 0)
					{
						box[man_x][man_y] = 0;
						box[man_x-2][man_y] = 3;
						box[--man_x][man_y] = 2;
						a++;
					}
					else if(box[man_x-1][man_y] == 0 && 0 != man_x)
					{
						box[man_x][man_y] = 0;
						box[--man_x][man_y] = 2;
						a++;
					}
					else if(box[man_x-1][man_y] == 5 && box[man_x-2][man_y] == 4)
					{
						box[man_x][man_y] = 0;
						box[man_x-2][man_y] = 5;
						box[--man_x][man_y] = 6;
						a++;
					}
					else if(box[man_x-1][man_y] == 4)
					{
						box[man_x][man_y] = 0;
						box[--man_x][man_y] = 6;
						a++;
					}
					break;
				case 184: case 115:
					if(box[man_x+1][man_y] == 3 && box[man_x+2][man_y] == 4)
					{
						box[man_x][man_y] = 0;
						box[man_x+2][man_y] = 5;
						box[++man_x][man_y] = 2;
						a++;
					}
					else if(box[man_x+1][man_y] == 3 && box[man_x+2][man_y] == 0 && 6 != box[man_x][man_y])
					{
						box[man_x][man_y] = 0;
						box[man_x+2][man_y] = 3;
						box[++man_x][man_y] = 2;
						a++;
					}
					else if(box[man_x+1][man_y] == 0 && 7 != man_x && 6 != box[man_x][man_y])
					{
						box[man_x][man_y] = 0;
						box[++man_x][man_y] = 2;
						a++;
					}
					else if(box[man_x][man_y] == 6 && box[man_x+1][man_y] == 0)
					{
						box[man_x][man_y] = 4;
						box[++man_x][man_y] = 2;
						a++;
					}
					else if(box[man_x][man_y] == 6 && box[man_x+1][man_y] == 3 && box[man_x+2][man_y] == 0)
					{
						box[man_x][man_y] = 4;
						box[man_x+2][man_y] = 3;
						box[++man_x][man_y] =2;
						a++;
					}
					break;
				case 185: case 100:
					if(box[man_x][man_y+1] == 3 && box[man_x][man_y+2] == 4)
					{
						box[man_x][man_y] = 0;
						box[man_x][man_y+2] = 5;
						box[man_x][++man_y] = 2;
						a++;
					}
					else if(box[man_x][man_y+1] == 3 && box[man_x][man_y+2] == 0)
					{
						box[man_x][man_y] = 0;
						box[man_x][man_y+2] = 3;
						box[man_x][++man_y] = 2;
						a++;
					}
					else if(box[man_x][man_y+1] == 0 && 7 != man_y)
					{
						box[man_x][man_y] = 0;
						box[man_x][++man_y] = 2;
						a++;
					}
					else if(box[man_x][man_y+1] == 4)
					{
						box[man_x][man_y] = 0;
						box[man_x][++man_y] = 6;
						a++;
					}
					break;
				case 186: case 97:
					if(box[man_x][man_y-1] == 3 && box[man_x][man_y-2] == 4)
					{
						box[man_x][man_y] = 0;
						box[man_x][man_y-2] = 5;
						box[man_x][--man_y] = 2;
						a++;
					}
					else if(box[man_x][man_y-1] == 3 && box[man_x][man_y-2] == 0 && 6 != box[man_x][man_y])
					{
						box[man_x][man_y] = 0;
						box[man_x][man_y-2] = 3;
						box[man_x][--man_y] = 2;
						a++;
					}
					else if(box[man_x][man_y-1] == 0 && 6 != box[man_x][man_y])
					{
						box[man_x][man_y] = 0;
						box[man_x][--man_y] = 2;
						a++;
					}
					else if(box[man_x][man_y-1] == 4)
					{
						box[man_x][man_y] = 0;
						box[man_x][--man_y] = 6;
						a++;
					}
					else if(box[man_x][man_y] == 6 && box[man_x][man_y-1] == 0)
					{
						box[man_x][man_y] = 4;
						box[man_x][--man_y] = 2;
						a++;
					}
					else if(box[man_x][man_y] == 6 && box[man_x][man_y-1] == 3 && box[man_x][man_y-2] == 0)
					{
						box[man_x][man_y] = 4;
						box[man_x][man_y-2] = 3;
						box[man_x][--man_y] =2;
						a++;
					}
					break;

			}
		
		}
}

2)

#include <stdio.h>
#include <stdlib.h>
#include <getch.h>

int main(int arhc,const char* argv[])
{
	char map[8][8] = {
		{0,0,1,1,1,1,0,0},
		{0,0,1,4,4,1,0,0},
		{0,1,1,0,4,1,1,0},
		{0,1,0,0,3,4,1,0},
		{1,1,0,3,0,0,1,1},
		{1,0,0,1,3,3,0,1},
		{1,0,0,2,0,0,0,1},
		{1,1,1,1,1,1,1,1},
		};
	
	char m_x = 6, m_y = 3;

	int step = 0;

	for(;;)
	{
		system("clear");
		int cnt = 0;
		for(int i=0; i<8; i++)
		{
			for(int j=0; j<8; j++)
			{
				switch(map[i][j])
				{
					case 0:printf("  "); break;	
					case 1:printf("# "); break;	
					case 2:printf("@ "); break;	
					case 3:printf("$ "); break;	
					case 4:printf("O "); break;	
					case 6:printf("@ "); break;	
					case 7:printf("$ "); cnt++; break;	
				}
			}
			printf("\n");
		}
		if(4 == cnt)
		{
			printf("游戏结束,共走了%d步\n",step);
			return 0;
		}
		int x = 0, y = 0;
		switch(getch())
		{
			case 183:
				x = -1; y = 0;
				break;
			case 184:
				x = 1; y = 0; 
				break;
			case 185:
				x = 0; y = 1;
				break;
			case 186:
				x = 0; y = -1;
				break;
		}
		if(0 == map[m_x+x][m_y+y] || 4 == map[m_x+x][m_y+y])
		{
			map[m_x][m_y] -= 2;
			map[m_x+x][m_y+y] += 2;
			m_x += x;
			m_y += y;
			step++;
		}
		else if(3 == map[m_x+x][m_y+y] || 7 == map[m_x+x][m_y+y])
		{
			if(0 == map[m_x+2*x][m_y+2*y] || 4 == map[m_x+2*x][m_y+2*y])
			{
				map[m_x+2*x][m_y+2*y] += 3;
				map[m_x+x][m_y+y] -= 1;
				map[m_x][m_y] -= 2;
				m_x += x;
				m_y += y;
				step++;
			}
		}
	}
}

代码2明显简化了。并且1只适用于此图,有些情况没有做出分析

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-07-15 23:42:02  更:2021-07-15 23:42: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/6 1:33:13-

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