文档章节

c语言写的推箱子源码,非常适合新手学习

愚人自忧
 愚人自忧
发布于 2017/08/19 18:34
字数 1506
阅读 81
收藏 1

 喜欢交流的或者有什么疑问的可以加作者QQ:916154899  

//=================================================================================================================================================================
//项目名称 : 推箱子
//作    者 : 愚人自忧
//制作时间 : 2017年8月19日
//
//          
//=================================================================================================================================================================
//头文件
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
#include <conio.h>                         //获取键盘上的消息

#define ROW 8
#define COL 8
//===============================================================================================================================================================
//初始化地图 :0为空地 1为墙 2为箱子 3为目的地 4为人 

//第一关地图
int map[ROW][COL] = {
	{ 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,2,0,2,3,1, },
	{ 1,3,0,2,4,1,1,1, },
	{ 1,1,1,1,2,1,0,0, },
	{ 0,0,0,1,3,1,0,0, },
	{ 0,0,0,1,1,1,0,0, }
};

int end = 0;                         //中途退出的标记
int personX, personY ;               //一开始人的坐标
int boxNumber, win;                  //boxNumber表示地图上目的地的个数,win表示已经推到目的地的箱子个数
//===============================================================================================================================================================
//后面函数的申明

//游戏
void game();

//初始化
void start();

//画地图
void showMap();

//小人的移动方向
char direction();

//小人向上移动的方法  
void moveToUp();

//小人向下移动的方法  
void moveToDown();

//小人向左移动的方法  
void moveToLeft();

//小人向右移动的方法  
void moveToRight();



//================================================================================================================================================================
//主函数入口
void main()
{
	
	start();
	do
	{
		game();
	
		system("cls");
	} while (end == 0 && win != boxNumber);
	showMap();

	system("PAUSE");

}



//=================================================================================================================================================================
//游戏
void game()
{
	showMap();
	char dir = direction();
	switch (dir)
	{
	case 'w':
	case 'W':
		moveToUp();
		break;
	case 's':
	case 'S':
		moveToDown();
		break;

	case 'a':
	case 'A':
		moveToLeft();
		break;
	case 'd':
	case 'D':
		moveToRight();
		break;
	case 'q':
	case 'Q':
		printf("游戏结束");
		end = 1;
		break;
	}

}

//画地图函数
//0为空地 1为墙 2为箱子 3为目的地 4为人
//   "  "  "■"    "□"      "¤"    "♀"
void showMap()
{
	for (int i = 0; i < ROW; i++)
	{
		for (int j = 0; j < COL; 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 start()
{
	personX = 0, personY = 0;     
	boxNumber = 0;
	end = 0;
	for (int i = 0; i < ROW; i++)
	{
		for (int j = 0; j < COL; j++)
		{
			switch (map[i][j])
			{
			case 3:
				boxNumber += 1;
				break;
			case 4:
				personX = i, personY = j;
				break;
			}
		}
	}

}


//小人的移动方向
char direction()
{
	//清除SCANF中的缓冲区   
	rewind(stdin);
	char dir;
	dir = _getch();
	return dir;
}

//小人向上移动的方法  
void moveToUp()
{
	//人的下一个坐标
	int personNextX = personX - 1;
	int personNextY = personY;

	//箱子的坐标和下一个坐标
	int BoxX, BoxY, BoxNextX, BoxNextY;


	if (map[personNextX][personNextY] == 0)            //如果下一个坐标是0即空地   人到空地上,人的坐标变为空地
	{
		map[personNextX][personNextY] = 4;
		map[personX][personY] = 0;

		personX = personNextX;
		personY = personNextY;
	}
	else if (map[personNextX][personNextY] == 1)      //如果下一个坐标是1即墙
	{
		//不进行操作
	}
	else if (map[personNextX][personNextY] == 2)      //如果下一个坐标是2即箱子
	{
		BoxX = personNextX;                           //当前的箱子就是人的下一个坐标

		BoxY = personNextY;

		BoxNextX = BoxX - 1;
		BoxNextY = BoxY;
		if (map[BoxNextX][BoxNextY] == 0)              //如果箱子的下一个坐标是空地就推过去
		{
			map[BoxNextX][BoxNextY] = 2;
			map[BoxX][BoxY] = 4;
			map[personX][personY] = 0;
			personX = personNextX;                   //人的下一个坐标变为人的当前坐标
			personY = personNextY;
		}
		else if (map[BoxNextX][BoxNextY] == 3)       //如果箱子的下一个坐标是目的地就推过去
		{
			map[BoxNextX][BoxNextY] = 2;
			map[BoxX][BoxY] = 4;
			map[personX][personY] = 0;
			personX = personNextX;                   //人的下一个坐标变为人的当前坐标
			personY = personNextY;
			win += 1;                                //已经推进去的箱子数加1
		}
	}



}

//小人向下移动的方法  
void moveToDown()
{
	//人的下一个坐标
	int personNextX = personX + 1;
	int personNextY = personY;

	//箱子的坐标和下一个坐标
	int BoxX, BoxY, BoxNextX, BoxNextY;


	if (map[personNextX][personNextY] == 0)            //如果下一个坐标是0即空地   人到空地上,人的坐标变为空地
	{
		map[personNextX][personNextY] = 4;
		map[personX][personY] = 0;

		personX = personNextX;
		personY = personNextY;
	}
	else if (map[personNextX][personNextY] == 1)      //如果下一个坐标是1即墙
	{
		//不进行操作
	}
	else if (map[personNextX][personNextY] == 2)      //如果下一个坐标是2即箱子
	{
		BoxX = personNextX;                           //当前的箱子就是人的下一个坐标

		BoxY = personNextY;

		BoxNextX = BoxX + 1;
		BoxNextY = BoxY;
		if (map[BoxNextX][BoxNextY] == 0)              //如果箱子的下一个坐标是空地就推过去
		{
			map[BoxNextX][BoxNextY] = 2;
			map[BoxX][BoxY] = 4;
			map[personX][personY] = 0;
			personX = personNextX;                   //人的下一个坐标变为人的当前坐标
			personY = personNextY;

		}
		else if (map[BoxNextX][BoxNextY] == 3)       //如果箱子的下一个坐标是
		{
			map[BoxNextX][BoxNextY] = 2;
			map[BoxX][BoxY] = 4;
			map[personX][personY] = 0;
			personX = personNextX;                   //人的下一个坐标变为人的当前坐标
			personY = personNextY;
			win += 1;                                //已经推进去的箱子数加1
		}
	}


}

//小人向左移动的方法  
void moveToLeft()
{
	//人的下一个坐标
	int personNextX = personX;
	int personNextY = personY - 1;

	//箱子的坐标和下一个坐标
	int BoxX, BoxY, BoxNextX, BoxNextY;


	if (map[personNextX][personNextY] == 0)            //如果下一个坐标是0即空地   人到空地上,人的坐标变为空地
	{
		map[personNextX][personNextY] = 4;
		map[personX][personY] = 0;

		personX = personNextX;
		personY = personNextY;
	}
	else if (map[personNextX][personNextY] == 1)      //如果下一个坐标是1即墙
	{
		//不进行操作
	}
	else if (map[personNextX][personNextY] == 2)      //如果下一个坐标是2即箱子
	{
		BoxX = personNextX;                           //当前的箱子就是人的下一个坐标

		BoxY = personNextY;

		BoxNextX = BoxX;
		BoxNextY = BoxY - 1;
		if (map[BoxNextX][BoxNextY] == 0)              //如果箱子的下一个坐标是空地就推过去
		{
			map[BoxNextX][BoxNextY] = 2;
			map[BoxX][BoxY] = 4;
			map[personX][personY] = 0;
			personX = personNextX;                   //人的下一个坐标变为人的当前坐标
			personY = personNextY;

		}
		else if (map[BoxNextX][BoxNextY] == 3)       //如果箱子的下一个坐标是
		{
			map[BoxNextX][BoxNextY] = 2;
			map[BoxX][BoxY] = 4;
			map[personX][personY] = 0;
			personX = personNextX;                   //人的下一个坐标变为人的当前坐标
			personY = personNextY;
			win += 1;                                //已经推进去的箱子数加1
		}
	}


}

//小人向右移动的方法  
void moveToRight()
{
	//人的下一个坐标
	int personNextX = personX;
	int personNextY = personY + 1;

	//箱子的坐标和下一个坐标
	int BoxX, BoxY, BoxNextX, BoxNextY;


	if (map[personNextX][personNextY] == 0)            //如果下一个坐标是0即空地   人到空地上,人的坐标变为空地
	{
		map[personNextX][personNextY] = 4;
		map[personX][personY] = 0;

		personX = personNextX;
		personY = personNextY;
	}
	else if (map[personNextX][personNextY] == 1)      //如果下一个坐标是1即墙
	{
		//不进行操作
	}
	else if (map[personNextX][personNextY] == 2)      //如果下一个坐标是2即箱子
	{
		BoxX = personNextX;                           //当前的箱子就是人的下一个坐标

		BoxY = personNextY;

		BoxNextX = BoxX;
		BoxNextY = BoxY + 1;
		if (map[BoxNextX][BoxNextY] == 0)              //如果箱子的下一个坐标是空地就推过去
		{
			map[BoxNextX][BoxNextY] = 2;
			map[BoxX][BoxY] = 4;
			map[personX][personY] = 0;
			personX = personNextX;                   //人的下一个坐标变为人的当前坐标
			personY = personNextY;

		}
		else if (map[BoxNextX][BoxNextY] == 3)       //如果箱子的下一个坐标是
		{
			map[BoxNextX][BoxNextY] = 2;
			map[BoxX][BoxY] = 4;
			map[personX][personY] = 0;
			personX = personNextX;                   //人的下一个坐标变为人的当前坐标
			personY = personNextY;
			win += 1;                                //已经推进去的箱子数加1
		}
	}


}

 

© 著作权归作者所有

共有 人打赏支持
愚人自忧
粉丝 0
博文 2
码字总数 1986
作品 0
西安
私信 提问
C语言多关卡推箱子,兄台了解一下?没错,C语言完整简单项目实战

C语言多关卡推箱子,兄台了解一下?没错,C语言完整简单项目实战 首先感谢百忙之中你能从万千文章中点小编得专属页面。这不是娱乐篇,这是学习道场。开始前,小编就做一个简单得自我介绍:(...

这个人很懒什么都没留下
2018/07/02
0
0
学C语言不知道从哪儿下手?学习框架都帮你列好了!

随着高考结束,在未来计算机专业讲又要迎来一批新生小鲜肉!C语言入门到入土,从长发飘飘到秃顶的老铁也越来越多,其中,想自学成才的也占了不少数;想笨鸟先飞的也占有不少数。 C语言上手可...

这个人很懒什么都没留下
2018/06/29
0
0
C语言学习:两个让人绝望的C语言小程序

话不多说,今天给大家介绍两个好东西,就是利用C语言编写的两个恶搞小程序,有多厉害,只有你自己去试试了, 反正我是害怕,惹不起。 利用C语言+API写的两个恶作剧程序,我在这里说,你没感觉...

诸葛玥
2018/05/25
0
0
纯C写的小游戏-----最炫酷推箱子

很多编程爱好者都编写过推箱子游戏编程吧,最近有好些朋友看见我以前的推箱子程序后, 问我是怎么做的。我一直想把这个程序的整个过程写一份详细的东西,与各位编程爱好者分享,一直没空。正...

小辰GG
2017/12/24
0
0
Java swing实现的小游戏推箱子升级版项目源码

大家好,今天给大家演示一下由Java swing实现的推箱子小游戏升级版,该项目实现了推箱子游戏的主要功能,可在Java环境下运行,jdk版本不限,比我们上次演示的推箱子游戏功能上复杂了一点,下...

llqqxf
2017/12/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

全面理解Java内存模型(JMM)及volatile关键字

理解Java内存区域与Java内存模型 Java内存区域 Java虚拟机在运行程序时会把其自动管理的内存划分为以上几个区域,每个区域都有的用途以及创建销毁的时机,其中蓝色部分代表的是所有线程共享的...

亭子happy
18分钟前
1
0
Prometheus监控mysql实例--centos7安装mysql_exporter

目录 概述 环境准备 普罗米修斯简介 mysql安装 mysqld_exporter安装 启动参数列表 概述 prometheus(普罗米修斯) 是一个开源系统监控和报警工具包,许多公司和组织都采用了Prometheus,该项目...

java_龙
24分钟前
3
0
拥有2000家门店,他如何晋升为服装界的新宠?

摘要: —— iwarm3.0加热组件、碳纳米管膜炎、管状石墨结构体...你看到并不是一款高科技电子产品,这是快鱼服饰在这个冬天推出的黑科技产品 - 智能温控羽绒服。 在竞争激烈的服装行业,快鱼...

阿里云云栖社区
26分钟前
2
0
不忘初心 砥砺前行-智和信通2018年年会报道

1月18日,智和信通以“不忘初心 砥砺前行”为主题的2018总结会议暨2019年年会在京召开。年会以总经理李少龙的讲话为开场,充分肯定了全体员工2018年的工作和成绩,并表达了公司产品智和网管平...

智和网管平台
34分钟前
1
0
NGINX api网关

以谁为师
36分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部