下面接着上一篇随笔《用C写一个简单的推箱子游戏(一)》来写

tuidong()函数是用来判断游戏人物前方情况的函数,是推箱子游戏中非常重要的一个函数,下面从它开始继续介绍推箱子的小程序怎么写:

e)   tuidong()函数:判断移动人物的前方的情况

1)   第一部分:

 1 int count,caw=0;//行和列
2 int i,j,tui;
3 for(i=0;i<9;i++)
4 {
5 for (j=0;j<11;j++)
6 {
7 if(map[i][j]==2||map[i][j]==6)
8 {
9 count=i;
10 caw=j;
11 }
12 }
13 }
14 tui=getch();

说明:

①为了判断游戏人物位置,首先需要将人物位置记录下来,此处用count和caw变量记录初始位置;

②使用getch()函数而不用getchar()函数的原因是:getchar()函数输入一个字符后需要回车来进行下一个字符的输入,比较麻烦,而getch()函数则不需要回车就能连续输入多个字符。所以采用getch()函数对玩家键盘输入的内容进行记录,并将值赋给tui。

2)   第二部分

 1 switch(tui)
2 {
3 case 'w'://向上
4 if(map[count-1][caw]==0||map[count-1][caw]==4)
5 {
6 map[count][caw]-=2;
7 map[count-1][caw]+=2;
8 }
9 else if(map[count-1][caw]==3||map[count-1][caw]==7)
10 {
11 if(map[count-2][caw]==0||map[count-2][caw]==4)
12 {
13 map[count][caw]-=2;
14 map[count-1][caw]-=1;
15 map[count-2][caw]+=3;
16 }
17 }
18 break;
19 case 's'://向下
20 ……(同理)
21 case 'a'://向左
22 ……(同理)
23 case 'd'://向右
24 ……(同理)
25 default://错误输入
26 printf("你的输入有误,请输入方向键");
27 }

说明:

①这里只取向上的代码进行解释,其他方向原理同理;

②游戏人物前面的位置有以下几种情况:

1.人的前面是空地;

2.人的前面是终点位置;

3.人的前面是箱子

3.1.箱子的前面是空地;

3.2.箱子的前面是终点位置。

③第一个判断条件map[count-1][caw]==0||map[count-1][caw]==4就是判断前面第1和第2两种情况的。如果满足这两种情况,则执行map[count][caw]-=2和map[count-1][caw]+=2的操作,即:将人的位置变为空地并将前方一格变为人或者人在终点的标志。不满足则执行下一个判断。

④第二个判断条件map[count-1][caw]==3||map[count-1][caw]==7就是判断前面第3种情况。人的前面有箱子,这个箱子可以是在空地之上,也可以是在终点位置之上(这个是为了区分两种情况:一种是如果箱子在空地之上,那么人过后可以直接变为空地,但是另外一种情况就是,当箱子是在终点之上时,人通过终点后,仍然需要有终点标记)。而在人的前面有箱子(不管是箱子在空地之上还是在终点之上)这种情况下,因为箱子的前面情况不同,结果也会不同。比如说箱子前是墙壁或者是箱子,那么人是不能推动的,而如果前面是终点或者是空地则是可以推动的。因此,在判断完人前有箱子之后,还要进一步判断箱子前的情况,所以,就需要加上第二个判断条件(即前面3.1和3.2情况):当满足map[count-2][caw]==0||map[count-2][caw]==4情况时,进行如下操作:map[count][caw]-=2;map[count-1][caw]-=1;map[count-2][caw]+=3。

第一个是将人的位置变为空地,第二个是将箱子标志/箱子在终点标志变为人标志/人在终点的标志,第三个是将箱子前的空地/箱子前的终点位置变为箱子/箱子在终点的标志。

f)   winshu()函数:判断输赢的函数

1 int winshu()
2 {int k = 0;//初始化
3 int j,i;
4 for(i=0;i<9;i++)
5 {for (j=0;j<11;j++)
6 {if(map[i][j]==3)
7 k++;}}
8 if(k==0)
9 printf("恭喜你,你赢了!\n");}

这段函数是在每次移动指令输入后打印屏幕前进行判断的函数,所以它引用在drawmain()函数里面(见前面的d部分)。其判断依据很简单,我们把没有到达的箱子命名为空箱子,其判断依据就是当空箱子为零时,玩家就赢了。

将以上所有函数组合起来就可以完成这个简单的推箱子小游戏了,这个只是一关,如果想要增加关卡数,可以采用三维数组,新增的数组用来记录关卡数即可。

用C写推箱子游戏源码》已发布,密码请关注微信公众号“优秀物联人”后台回复“验证码”即可获得(密码不定时更换)。

用C写一个简单的推箱子游戏(二)的更多相关文章

  1. 用C写一个简单的推箱子游戏(一)

    我现在在读大二,我们有一门课程叫<操作系统>,课程考查要求我们可以写一段程序或者写Windows.iOS.Mac的发展历程.后面我结合网上的资料参考,就想用自己之前简单学过的C写一关的推箱 ...

  2. three.js 制作一个三维的推箱子游戏

    今天郭先生发现大家更喜欢看我发的three.js小作品,今天我就发一个3d版本推箱子的游戏,其实webGL有很多框架,three.js并不合适做游戏引擎,但是可以尝试一些小游戏.在线案例请点击博客原文 ...

  3. (原创)如何使用boost.asio写一个简单的通信程序(二)

    先说下上一篇文章中提到的保持io_service::run不退出的简单办法.因为只要异步事件队列中有事件,io_service::run就会一直阻塞不退出,所以只要保证异步事件队列中一直有事件就行了, ...

  4. 用while循环写一个简单的猜数字游戏

    import random #练习:模拟猜数字的游戏 """ 计算机出一个1~100之间的随机数由人来猜 计算机根据人猜的数字分别给出 大一点/小一点/猜中了 的提示 & ...

  5. JavaScript写一个小乌龟推箱子游戏

    推箱子游戏是老游戏了, 网上有各种各样的版本, 说下推箱子游戏的简单实现,以及我找到的一些参考视频和实例: 推箱子游戏的在线DEMO : 打开 如下是效果图: 这个拖箱子游戏做了移动端的适配, 我使用 ...

  6. 在Openfire上弄一个简单的推送系统

    推送系统 说是推送系统有点大,其实就是一个消息广播功能吧.作用其实也就是由服务端接收到消息然后推送到订阅的客户端. 思路 对于推送最关键的是服务端向客户端发送数据,客户端向服务端订阅自己想要的消息.这 ...

  7. 用Python写一个简单的Web框架

    一.概述 二.从demo_app开始 三.WSGI中的application 四.区分URL 五.重构 1.正则匹配URL 2.DRY 3.抽象出框架 六.参考 一.概述 在Python中,WSGI( ...

  8. 如何写一个简单的http服务器

    最近几天用C++写了一个简单的HTTP服务器,作为学习网络编程和Linux环境编程的练手项目,这篇文章记录我在写一个HTTP服务器过程中遇到的问题和学习到的知识. 服务器的源代码放在Github. H ...

  9. 如何写一个简单的shell

    如何写一个简单的shell 看完<UNIX环境高级编程>后我就一直想写一个简单的shell来作为练习,因为有事断断续续的写了好几个月,如今写了差不多来总结一下. 源代码放在了Github: ...

随机推荐

  1. 手写mybatis框架

    前言 很久没有更新mybatis的源码解析了,因为最近在将自己所理解的mybatis思想转为实践. 在学习mybatis的源码过程中,根据mybatis的思想自己构建了一个ORM框架 .整个代码都是自 ...

  2. CVPR2020 面向密集多角度物体检测的动态修正网络(DRN)

    论文链接:https://arxiv.org/pdf/2005.09973.pdf code:https://github.com/Anymake/DRN_CVPR2020 文章概要: 本文是中科院自 ...

  3. Activiti7 查询用户任务列表

    package com.itheima.activiti; import org.activiti.engine.ProcessEngine; import org.activiti.engine.P ...

  4. Java网络通信 —— 序列化问题

    Java序列化的目的主要有两个: 1.网络传输 2.对象持久化 当选行远程跨迸程服务调用时,需要把被传输的Java对象编码为字节数组或者ByteBuffer对象.而当远程服务读取到ByteBuffer ...

  5. PicGo软件搭配gitee实现图床

    1.安装PicGo软件,并配置gitee 1.1安装picGo picGo 安装gitee-uploader 插件 官网下载地址如下:最新版本 可以自行选择版本进行下载,这里我选择了最新的版本进行下载 ...

  6. Dos拒绝服务攻击DNS、SNMP、NTP放大攻击和slowhttptest攻击工具(三)

    DNS放大攻击产生大流量的攻击方式 udpDNS放大效果-查询请求流量小,但响应流量可能非常巨大-dig ANY baidu.com @1.1.1.1 //向1.1.1.1的服务器查询域名解析,流量放 ...

  7. NSThread线程对象

    NSThread 创建线程的方式 准备在后台线程调用的方法 longOperation: - (void)longOperation:(id)obj { NSLog(@"%@ - %@&qu ...

  8. Docker之使用Dockerfile创建定制化镜像(四)

    Dockerfile简介 镜像的定制实际上就是定制每一层所添加的配置.文件.如果我们可以把每一层修改.安装.构建.操作的命令都写入一个脚本,用这个脚本来构建.定制镜像,那么哪些无法重复的问题.镜像构建 ...

  9. LevelDb 101学习

    转自http://www.cnblogs.com/haippy/archive/2011/12/04/2276064.html LevelDb日知录之一:LevelDb 101 说起LevelDb也许 ...

  10. python爬取酷狗音乐

    url:https://www.kugou.com/yy/html/rank.html 我们随便访问一个歌曲可以看到url有个hash https://www.kugou.com/song/#hash ...