文档章节

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

愚人自忧
 愚人自忧
发布于 2017/08/19 18:34
字数 1506
阅读 40
收藏 1
点赞 0
评论 0

 喜欢交流的或者有什么疑问的可以加作者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
C语言感触篇:十年之后重学C语言,岁月蹉跎,我听闻你始终一个人

C语言感触篇:十年之后重学C语言,岁月蹉跎,我听闻你始终一个人 1.1 多次自学,不得其法 距离大学时学习C语言已有十个年头了。印象里最深的就是当时一位海归老师,在讲课时流露出对K&R的崇敬...

这个人很懒什么都没留下
07/11
0
0
Java版推箱子(搬箱子)游戏开发入门示例及源码

推(搬)箱子,又名Sokoban,仓库番等,是一款堪称古玩级的电脑游戏。 提起它,笔者相信没什么人会感觉到陌生,更没什么生物会连听都没听说过。它的发展历史之久远,甚至超越了俄罗斯方块(1...

cping
06/26
0
0
js 简单的推箱子小游戏步骤解析--大家都玩过的

前言 推箱子小游戏大家肯定都玩过,之所以写这篇文章,是觉得这个小游戏足够简单好理解,大家看完文章之后,自己也能花上半天功夫敲出一个推箱子小游戏来,如果喜欢的话可以点波赞,或者关注...

01/09
0
0
C语言禁区之程序自身删除自身?是时候展现真正的技术之自删除

又到调侃时间了 前言 自删除: 顾名思义,这个程序功能很简单,就是实现程序的自删除功能。 是不是感到很困惑,一个程序自己运行着,怎样把自己关掉后,再把自己删除呢?结束自己进程的时候,...

这个人很懒什么都没留下
07/06
0
0
大神告诉你学好这几点,你就学会了C语言

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

诸葛玥
05/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

分布式之抉择分布式锁

前言: 目前网上大部分的基于zookpeer,和redis的分布式锁的文章都不够全面。要么就是特意避开集群的情况,要么就是考虑不全,读者看着还是一脸迷茫。坦白说,这种老题材,很难写出新创意,博...

Java大蜗牛
9分钟前
0
0
rm: cannot remove `xxx’: Operation not permitted

rm: cannot remove `xxx': Operation not permitted可以先用lsattr xxx查看文件的隐藏属性。如果看到-----a-------的情况,可以用chattr -a xxx去除a属性,然后再进行删除就可以了....

殘留回憶
9分钟前
0
0
oracle 如何查看当前用户的表空间名称

如何查询当前用户的表空间名称?因为oracle建立索引,需要知道当前用户的表空间,查找了一下资料 --查询语法-- select default_tablespace from dba_users where username='登录用户' 如,...

youfen
13分钟前
0
0
MicroPython-TPYBoard开发板DIY小型家庭气象站

对于喜欢登山的人来说,都会非常关心自己所处的高度跟温度,海拔高度的测量方法,海拔测量一般常用的有两种方式,一是通过GPS全球定位系统,二是通过测出大气压,根据气压值算出海拔高度。 ...

bodasisiter
13分钟前
0
0
抓取沪A股票资金流向数据

library(rvest)mydata<-list()day1<-Sys.Date()day2<-Sys.Date()-7stock<-c("600695","600734","603693","601990","603650","603045","603895","600735","601999","603970","600619"......

cuyi
14分钟前
0
0
Java中mqtt消息队列发送和订阅消息

1.首先本地建立mqtt协议的服务器 2.直接上代码 package io.powerx.test;import java.util.Date;import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;import org.eclipse.p......

江湖鱼大虾
15分钟前
0
0
数据结构-树的学习

1. 相关连接 维基-二叉搜索树 维基-红黑树 思否-红黑树

liuyan_lc
17分钟前
0
0
Nginx upstream 负载均衡

Nginx upstream 负载均衡 了了情空 关注 2016.05.31 16:16* 字数 612 阅读 537评论 1喜欢 0 上周五同事跟我提一个需求,大概描述是酱紫:“我们现在终端都在访问同一台服务器,如果流量过大造...

linjin200
19分钟前
0
2
Dubbo 源码解读——自定义 Classloader 之 ExtensionLoader

众所周知,Dubbo 是阿里巴巴公司自主研发开源的一个高性能的服务框架(现已捐献给 Apache 基金会组织),应用之间可以通过 RPC 的方式来互相调用并返回结果。主要基于 Java 语言开发,它提供...

Ryan-瑞恩
27分钟前
0
0
Sonar Maven/IDEA集成(未完待续)

前言:在上一篇(SonarQube安装步骤)的基础上,我们来集成maven/IDEA 1.首先是集成maven(maven的安装配置就不多说了) 找到maven安装目录下-conf文件夹-setting.xml文件 然后添加以下配置信...

张艺兴女朋友
27分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部