下面接着上一篇随笔《用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. 【Java/DateTime】用当前日期时间与确定日期时间比较,大于则执行某动作

    代码: package logbackCfg; import java.text.ParseException; import java.text.SimpleDateFormat; import j ...

  2. leetcode刷题-60第k个队列

    题目 给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列. 按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下: "123""132& ...

  3. Ubuntu更换国内源--解决终端下载速度慢的问题

    目前我已知的更改国内源的方法基本上就两种,第一种,把/etc/apt/sources.list文件里的源更换一下,改成阿里云或者其它源.第二种,更换在设置中software&updates(软 ...

  4. 10.深入k8s:调度的优先级及抢占机制源码分析

    转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com 源码版本是1.19 上一篇我们将了获取node成功的情况,如果是一个优先pod获取nod ...

  5. SpringBoot集成Nacos

    一.环境说明 1.CentOS7 2.Jdk1.8 3.Mysql5.7 4.Nacos1.3 5.SpringBoot2.3.1.RELEASE 6.Maven3.6 二.下载Nacos 1.Nac ...

  6. Java数据类型之Cache模式

    1.关于Java数据类型 基本数据类型 基本数据类型有8种,每种基本数据类型都有对应的引用类型. 类型 描述 长度 可表示数据 包装类型 boolean 布尔型 1 true.false Boolea ...

  7. spring boot环境配置以及开发工具选择(Spring一)

    首先安装java jdk jdk的安装参考:https://blog.csdn.net/zhys0902/article/details/79499329配置效果如下: 接下来是maven的相关配置 ...

  8. [程序员代码面试指南]二叉树问题-在二叉树中找到两个节点的最近公共祖先、[LeetCode]235. 二叉搜索树的最近公共祖先(BST)(非递归)

    题目 题解 法一: 按照递归的思维去想: 递归终止条件 递归 返回值 1 如果p.q都不在root为根节点的子树中,返回null 2 如果p.q其中之一在root为根节点的子树中,返回该节点 3 如果 ...

  9. linux定时删除过期文件

    需求说明 每日凌晨0点定时删除/temp目录下的所有一个月未被访问的文件. 脚本实现 linux 终端输入crontab -e,添加定时任务脚本命令 [root@localhost ~]# cront ...

  10. 原文https://blog.csdn.net/hongzhen91/article/details/57422897

    C语言操作EXCEL文件(读写) 大小宝 2017-02-26 18:18:37 94247 收藏 136展开C语言操作EXCEL文件(读写)本文主要介绍通过纯C语言进行EXCEL的读写操作:(修改时 ...