推箱子(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只适用于此图,有些情况没有做出分析

### 回答1: 推箱子以及地图编辑器(c语言).7z 是一个压缩文件,其中包含了使用C语言编写的推箱子游戏和地图编辑器。推箱子游戏是一款经典的益智游戏,玩家需要通过移动箱子来完成关卡。地图编辑器可以让玩家自己设计关卡,增加游戏的趣味性和挑战性。这个压缩文件可以在计算机上解压缩并运行游戏和编辑器。 ### 回答2: 推箱子和地图编辑器是一种基于C语言开发的休闲小游戏,可以让玩家更好地锻炼自己的思考能力和解决问题的能力。推箱子是一种益智游戏,玩家需要通过移动箱子来达到目标,而地图编辑器则是玩家自己可以编辑制作游戏地图。 推箱子游戏的规则就是在地图上找到合适的路径来移动箱子,每一步都需要考虑到箱子的位置以及墙壁或其他障碍的位置。通过正确的移动箱子,玩家可以顺利到达终点,完成挑战。这种游戏不仅可以锻炼玩家的思考能力,也可以提高他们的逻辑思维,这些都是非常重要的能力。 地图编辑器则是玩家自己可以编辑绘制的游戏地图,并自定义地图设置,可以激发玩家的创造力和想象力,让玩家更好地了解游戏制作过程中的原理和方法。通过地图编辑器,玩家可以自己创造属于自己的游戏世界,让游戏更加富有趣味性。 在C语言的开发过程中,推箱子和地图编辑器都需要一定的编程技能,这也是其独特的一部分。通过程序员的努力,可以让玩家享受到更加精美和完美的游戏体验。 推箱子和地图编辑器(c语言).7z提供了一个很好的资源库,对于学习C语言编程的人来说,是一个很好的练手项目。无论是从玩家的角度还是从开发者的角度来看,这两个项目都非常有趣,能够提高玩家的智力水平和编程能力。 ### 回答3: 推箱子和地图编辑器是一个基于C语言的小游戏和工具软件。推箱子是一款经典的益智游戏,游戏中玩家需要将箱子推到指定位置,通过各种难度不同的关卡,考验自己的逻辑思维和操作能力。地图编辑器则是一个工具软件,用于创建自定义的游戏关卡和地图,让玩家可以自己设计并分享自己的游戏关卡,增加了游戏的可玩性和互动性。 推箱子以及地图编辑器的核心部分是使用C语言编写,具有精简、高效、稳定等特点。在游戏开发和软件开发领域,C语言一直都是一个重要的编程语言,因为它可以直接操作硬件,运行速度快,内存占用少,是大多数系统级和嵌入式软件的首选开发语言。 推箱子以及地图编辑器的源代码和程序库经过精心设计和整理,可以作为学习C语言编程的参考资料。通过分析这个项目的源代码,学习者可以了解C语言的基本语法和操作方法,对于理解计算机编程的原理和机制也有很大的帮助。同时,推箱子和地图编辑器这两个小程序也可以帮助学习者掌握游戏开发和软件开发的基础知识,例如图形、动画、输入输出、文件操作等方面。这对于想要进一步深入学习计算机科学的学习者来说,也是一个很好的起点。 总而言之,推箱子以及地图编辑器这两个小程序不仅能够提高我们的逻辑思维和操作能力,还能够为我们学习C语言编程和计算机科学提供很好的帮助和指导。希望更多的人可以通过这个项目,感受到编程和游戏开发的乐趣,并在这个过程中逐步成长和提升自己的实力和能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值