文档章节

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

愚人自忧
 愚人自忧
发布于 2017/08/19 18:34
字数 1506
阅读 53
收藏 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语言上手可...

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

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

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

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

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

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

llqqxf
2017/12/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

gson1.7.1线程并发导致空指针问题

java.lang.NullPointerExceptionat com.google.gson.FieldAttributes.getAnnotationFromArray(FieldAttributes.java:231)at com.google.gson.FieldAttributes.getAnnotation(FieldAttribut......

东风125
45分钟前
3
0
以太坊RPC接口使用

以太坊RPC接口文档: https://github.com/ethereum/wiki/wiki/JSON-RPC#web3_clientversion 使用方式: 比如我要调用某个合约的balanceOf(address _owner)方法。 因为没有改变合约的状态,所以...

王坤charlie
今天
2
0
C#下的一个好用的日历库(sxtwl_cpp),支持农历转公历,和公历转农历等功能

sxtwl_cpp是寿星天文历的C++版本实现。支持多种语言的绑定 代码首页 懒人包 懒人包使用方法 1、右链工程中的引用-》添加引用-》浏览-》选中dotnet目录下的sxtwl.net.dll 2、生成解决方案-》找...

元谷
今天
3
0
C++基础知识

链接:https://zhuanlan.zhihu.com/p/38399566 本文主要提一下以下三个区别: 引用必须初始化,而指针可以不初始化。 我们在定义一个引用的时候必须为其指定一个初始值,但是指针却不需要。 ...

悲催的古灵武士
今天
1
0
Oracle备份脚本,保留10天数据

@echo off echo 删除10天前的备分文件和日志forfiles /p "D:\oracleback\backfile" /m *.dmp /d -10 /c "cmd /c del @path" forfiles /p "D:\oracleback\backfile" /m *.log /d -10......

lyle_luo
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部