喜欢交流的或者有什么疑问的可以加作者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语言写的推箱子源码,非常适合新手学习相关推荐

  1. 控制台推箱子小游戏C语言

    自己开发的C语言控制台推箱子小游戏,基于二维数组实现,功能不多但是游戏整体较为完整,因为技术有限,所以代码暂未优化且整体显得较为臃肿,整体架构简单,代码全自主设计编写,仅作交流学习,还望大佬多多指点. ...

  2. 易语言大漠插件破解版注册例子源码

    易语言大漠插件破解版注册例子源码

  3. 写给初学asp.net的新人们 新手学习经验

    写给初学asp.net的新人们 新手学习经验 发布:dxy 字体:[增加 减小] 类型:转载 IT=挨踢,这是IT人的自嘲,进入IT行业是有四五年了,也算得上是一个"老人"了吧,见 ...

  4. c语言推箱子文字说明,c语言 推箱子(C language Sokoban).doc

    c语言 推箱子(C language Sokoban) c语言 推箱子(C language Sokoban) 推箱子游戏/ * * / #包括<< DOS." #包括< ...

  5. 啊哈c的推箱子游戏(C语言)

    啊哈c的推箱子游戏(更新附带失败判断!) 以下是原文,2020.6.28更新了推箱子失败判断,以及优化方向代码,还新加了博主的无情嘲讽 . 因为啊哈c后面推箱子游戏未附代码,而且说实话考虑很多种状况和 ...

  6. c 语言推箱子vs,基于C语言实现推箱子游戏

    本文实例为大家分享了C语言实现推箱子游戏的具体代码,供大家参考,具体内容如下 代码在vs2013上测试运行. 思想: 1):地图用二维数组实现,箱子.墙壁.人等事物用不同的数字表示,遍历二维数组,遇到 ...

  7. 推箱子游戏(C语言版)

    [C语言经典算法100道实战题]点击链接即可在线学习: https://edu.csdn.net/course/detail/37564 一.推箱子游戏C语言版[运行效果如下]** 二.安装图形库 我 ...

  8. 推箱子小游戏---c语言

    推箱子 游戏特色 1.游戏同时支持鼠标和键盘操作,鼠标操作时,可点击任意你想去的地方. 2.提供回复上一步的功能,可以回到任何一步走过的路径,可以给用户足够的思考空间,使用户的智力在游戏的乐趣中得到充 ...

  9. 推箱子游戏 —— 代码我来写

    问题描述: 一天嘻哈华的弟弟正在玩一款推箱子游戏,他就想我能不能自己写个推箱子游戏呢? 源代码: // 获取并打印地图 void getMap(){int i, j;for(i=0; i<INF ...

  10. 推箱子android源代码,android自定义view实现推箱子小游戏

    本文实例为大家分享了android推箱子游戏的具体实现代码,供大家参考,具体内容如下 自定义view: package com.jisai.materialdesigndemo.tuixiangzhi ...

最新文章

  1. 谷歌把安全融入主机芯片
  2. shell脚本中的YYYY-MM-DD格式日期
  3. 虚幻填坑004:减少starter content占用空间,只保留使用的assets
  4. 你们的蛙儿子成马云儿子了 阿里巴巴获得《旅行青蛙》独家代理权
  5. reading notes -- Amazon.com Recommendations: Item-to-Item Collaborative Filtering
  6. python堆排序的库_Python:堆排序
  7. php end array_value,PHP常用处理数组函数
  8. springmvc错误java.lang.IllegalArgumentException
  9. 防护针对SQL Server数据库的SQL注入攻击
  10. 计算机字体库位置,win7电脑的字体库在哪里?
  11. 又一打包工具介绍:Installshield 打包安装包心得
  12. Adobe国际认证|发布 Adob​e Photoshop全部教程
  13. EDM大师独家收藏的30个绝佳节日邮件模板
  14. SmartUpload用法
  15. arcgis 只能查看指定行政区域_[教程】Arcgis进阶:统计分析
  16. 解决 Cannot locate a 64-bit Oracle Client library 问题
  17. 金融学习之十一——久期
  18. 解决V-Rep接近传感器(距离传感器、超声波传感器、红外传感器)不能正常识别问题
  19. date_sub函数用法-----随笔记
  20. DSP TMS320C6657中FFT函数的调用与具体使用方法

热门文章

  1. 【独家】阿里云罗庆超:对象存储 OSS 海量数据管理和应用最佳实践
  2. 【电力负荷预测】基于matlab日特征气象因素支持向量机SVM电力负荷预测【含Matlab源码 1612期】
  3. 【MDVRP】基于matlab遗传算法求解多仓库车辆路径规划问题【含Matlab源码 1481期】
  4. 【多目标优化求解】基于matlab自适应风驱动算法求解多目标优化问题【含Matlab源码 1414期】
  5. openai-gpt_GPT-3不会承担您的编程工作
  6. openai-gpt_GPT-3:大惊小怪的是什么?
  7. 一张图片分成两张matlab,matlab – 两幅图像之间的相似度量
  8. linux mysql 消失_Linux下修改mysql的root密码后数据库消失怎么处理
  9. html4与java混编,JavaWeb04-HTML篇笔记(四)
  10. deque插入和删除操作