mac推箱子c语言,c语言写的推箱子源码,非常适合新手学习
喜欢交流的或者有什么疑问的可以加作者QQ:916154899
//=================================================================================================================================================================
//项目名称 : 推箱子
//作 者 : 愚人自忧
//制作时间 : 2017年8月19日
//
//
//=================================================================================================================================================================
//头文件
#include
#include
#include
#include //获取键盘上的消息
#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
}
}
}
mac推箱子c语言,c语言写的推箱子源码,非常适合新手学习相关推荐
- 控制台推箱子小游戏C语言
自己开发的C语言控制台推箱子小游戏,基于二维数组实现,功能不多但是游戏整体较为完整,因为技术有限,所以代码暂未优化且整体显得较为臃肿,整体架构简单,代码全自主设计编写,仅作交流学习,还望大佬多多指点. ...
- 易语言大漠插件破解版注册例子源码
易语言大漠插件破解版注册例子源码
- 写给初学asp.net的新人们 新手学习经验
写给初学asp.net的新人们 新手学习经验 发布:dxy 字体:[增加 减小] 类型:转载 IT=挨踢,这是IT人的自嘲,进入IT行业是有四五年了,也算得上是一个"老人"了吧,见 ...
- c语言推箱子文字说明,c语言 推箱子(C language Sokoban).doc
c语言 推箱子(C language Sokoban) c语言 推箱子(C language Sokoban) 推箱子游戏/ * * / #包括<< DOS." #包括< ...
- 啊哈c的推箱子游戏(C语言)
啊哈c的推箱子游戏(更新附带失败判断!) 以下是原文,2020.6.28更新了推箱子失败判断,以及优化方向代码,还新加了博主的无情嘲讽 . 因为啊哈c后面推箱子游戏未附代码,而且说实话考虑很多种状况和 ...
- c 语言推箱子vs,基于C语言实现推箱子游戏
本文实例为大家分享了C语言实现推箱子游戏的具体代码,供大家参考,具体内容如下 代码在vs2013上测试运行. 思想: 1):地图用二维数组实现,箱子.墙壁.人等事物用不同的数字表示,遍历二维数组,遇到 ...
- 推箱子游戏(C语言版)
[C语言经典算法100道实战题]点击链接即可在线学习: https://edu.csdn.net/course/detail/37564 一.推箱子游戏C语言版[运行效果如下]** 二.安装图形库 我 ...
- 推箱子小游戏---c语言
推箱子 游戏特色 1.游戏同时支持鼠标和键盘操作,鼠标操作时,可点击任意你想去的地方. 2.提供回复上一步的功能,可以回到任何一步走过的路径,可以给用户足够的思考空间,使用户的智力在游戏的乐趣中得到充 ...
- 推箱子游戏 —— 代码我来写
问题描述: 一天嘻哈华的弟弟正在玩一款推箱子游戏,他就想我能不能自己写个推箱子游戏呢? 源代码: // 获取并打印地图 void getMap(){int i, j;for(i=0; i<INF ...
- 推箱子android源代码,android自定义view实现推箱子小游戏
本文实例为大家分享了android推箱子游戏的具体实现代码,供大家参考,具体内容如下 自定义view: package com.jisai.materialdesigndemo.tuixiangzhi ...
最新文章
- 谷歌把安全融入主机芯片
- shell脚本中的YYYY-MM-DD格式日期
- 虚幻填坑004:减少starter content占用空间,只保留使用的assets
- 你们的蛙儿子成马云儿子了 阿里巴巴获得《旅行青蛙》独家代理权
- reading notes -- Amazon.com Recommendations: Item-to-Item Collaborative Filtering
- python堆排序的库_Python:堆排序
- php end array_value,PHP常用处理数组函数
- springmvc错误java.lang.IllegalArgumentException
- 防护针对SQL Server数据库的SQL注入攻击
- 计算机字体库位置,win7电脑的字体库在哪里?
- 又一打包工具介绍:Installshield 打包安装包心得
- Adobe国际认证|发布 Adob​e Photoshop全部教程
- EDM大师独家收藏的30个绝佳节日邮件模板
- SmartUpload用法
- arcgis 只能查看指定行政区域_[教程】Arcgis进阶:统计分析
- 解决 Cannot locate a 64-bit Oracle Client library 问题
- 金融学习之十一——久期
- 解决V-Rep接近传感器(距离传感器、超声波传感器、红外传感器)不能正常识别问题
- date_sub函数用法-----随笔记
- DSP TMS320C6657中FFT函数的调用与具体使用方法
热门文章
- 【独家】阿里云罗庆超:对象存储 OSS 海量数据管理和应用最佳实践
- 【电力负荷预测】基于matlab日特征气象因素支持向量机SVM电力负荷预测【含Matlab源码 1612期】
- 【MDVRP】基于matlab遗传算法求解多仓库车辆路径规划问题【含Matlab源码 1481期】
- 【多目标优化求解】基于matlab自适应风驱动算法求解多目标优化问题【含Matlab源码 1414期】
- openai-gpt_GPT-3不会承担您的编程工作
- openai-gpt_GPT-3:大惊小怪的是什么?
- 一张图片分成两张matlab,matlab – 两幅图像之间的相似度量
- linux mysql 消失_Linux下修改mysql的root密码后数据库消失怎么处理
- html4与java混编,JavaWeb04-HTML篇笔记(四)
- deque插入和删除操作