文档章节

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

愚人自忧
 愚人自忧
发布于 2017/08/19 18:34
字数 1506
阅读 61
收藏 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语言完整简单项目实战 首先感谢百忙之中你能从万千文章中点小编得专属页面。这不是娱乐篇,这是学习道场。开始前,小编就做一个简单得自我介绍:(...

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

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

诸葛玥
05/25
0
0
学C语言不知道从哪儿下手?学习框架都帮你列好了!

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

这个人很懒什么都没留下
06/29
0
0
纯C写的小游戏-----最炫酷推箱子

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

小辰GG
2017/12/24
0
0
大神告诉你学好这几点,你就学会了C语言

很多小伙伴在初学C语言的时候完全没有什么概念,完全不知道怎么去学怎样才能掌握这门语言的重要知识点。 今天小编就来总结一下学习C语言过程中四大重点吧 ! (一)C语言要学到什么程度才算差...

诸葛玥
05/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Vue.js 3.0 新特性预览

Evan You(尤雨溪)(2018年11月16日)前几日的早上在 Vue Toronto 的主题演讲中预演了 Vue 3 。 利用现代浏览器支持的新功能,Vue 3 将成为我们已经了解和喜爱的 Vue.js 强大的的改进版本。...

我的卡
25分钟前
1
0
Mybatis自带连接池阅读

1、数据源初始化,初始化入口由SqlSessionFactoryBuilder.build(InputStream inputStream, String environment, Properties properties)方法提供 public SqlSessionFactory build(InputStre......

jcc_codingBoy
31分钟前
3
0
Oracle 数据库勒索病毒 RushQL 处理办法

Oracle 数据库勒索病毒 RushQL 处理办法 办法来自Oracle 官方: https://blogs.oracle.com/cnsupport_news/%E5%AF%B9%E6%95%B0%E6%8D%AE%E5%BA%93%E7%9A%84%E2%80%9C%E6%AF%94%E7%89%B9%E5%......

rootliu
31分钟前
2
0
聊聊flink LocalEnvironment的execute方法

序 本文主要研究一下flink LocalEnvironment的execute方法 实例 final ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment(); DataSet<RecordDto>......

go4it
34分钟前
2
0
Spring Boot中对自然语言处理工具包hanlp的调用详解

概 述 HanLP 是基于 Java开发的 NLP工具包,由一系列模型与算法组成,目标是普及自然语言处理在生产环境中的应用。而且 HanLP具备功能完善、性能高效、架构清晰、语料时新、可自定义的特点,...

左手的倒影
40分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部