用C写一个简单的推箱子游戏(二)
下面接着上一篇随笔《用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写一个简单的推箱子游戏(二)的更多相关文章
- 用C写一个简单的推箱子游戏(一)
我现在在读大二,我们有一门课程叫<操作系统>,课程考查要求我们可以写一段程序或者写Windows.iOS.Mac的发展历程.后面我结合网上的资料参考,就想用自己之前简单学过的C写一关的推箱 ...
- three.js 制作一个三维的推箱子游戏
今天郭先生发现大家更喜欢看我发的three.js小作品,今天我就发一个3d版本推箱子的游戏,其实webGL有很多框架,three.js并不合适做游戏引擎,但是可以尝试一些小游戏.在线案例请点击博客原文 ...
- (原创)如何使用boost.asio写一个简单的通信程序(二)
先说下上一篇文章中提到的保持io_service::run不退出的简单办法.因为只要异步事件队列中有事件,io_service::run就会一直阻塞不退出,所以只要保证异步事件队列中一直有事件就行了, ...
- 用while循环写一个简单的猜数字游戏
import random #练习:模拟猜数字的游戏 """ 计算机出一个1~100之间的随机数由人来猜 计算机根据人猜的数字分别给出 大一点/小一点/猜中了 的提示 & ...
- JavaScript写一个小乌龟推箱子游戏
推箱子游戏是老游戏了, 网上有各种各样的版本, 说下推箱子游戏的简单实现,以及我找到的一些参考视频和实例: 推箱子游戏的在线DEMO : 打开 如下是效果图: 这个拖箱子游戏做了移动端的适配, 我使用 ...
- 在Openfire上弄一个简单的推送系统
推送系统 说是推送系统有点大,其实就是一个消息广播功能吧.作用其实也就是由服务端接收到消息然后推送到订阅的客户端. 思路 对于推送最关键的是服务端向客户端发送数据,客户端向服务端订阅自己想要的消息.这 ...
- 用Python写一个简单的Web框架
一.概述 二.从demo_app开始 三.WSGI中的application 四.区分URL 五.重构 1.正则匹配URL 2.DRY 3.抽象出框架 六.参考 一.概述 在Python中,WSGI( ...
- 如何写一个简单的http服务器
最近几天用C++写了一个简单的HTTP服务器,作为学习网络编程和Linux环境编程的练手项目,这篇文章记录我在写一个HTTP服务器过程中遇到的问题和学习到的知识. 服务器的源代码放在Github. H ...
- 如何写一个简单的shell
如何写一个简单的shell 看完<UNIX环境高级编程>后我就一直想写一个简单的shell来作为练习,因为有事断断续续的写了好几个月,如今写了差不多来总结一下. 源代码放在了Github: ...
随机推荐
- Currency Exchange(SPFA判负环)
Several currency exchange points are working in our city. Let us suppose that each point specializes ...
- 猜数字 python 3
随机选取一个1-100的整数 通过5次机会猜整数 会提醒猜大或者猜小 当猜对或者已经猜过5次后结束游戏
- [LeetCode]96. 不同的二叉搜索树(DP,卡特兰数)
题目 给定一个整数 n,求以 1 ... n 为节点组成的二叉搜索树有多少种? 示例: 输入: 3 输出: 5 解释: 给定 n = 3, 一共有 5 种不同结构的二叉搜索树: 1 3 3 2 1 \ ...
- java时间日期的运用
我们在使用QQ.微信等应用时,我们的手机会提示该消息时在过去的某个时间发送的,我们如何运用JAVA来实现这个功能呢? 代码如下: public class Time { public static v ...
- [记录点滴]授人以渔,从Tensorflow找不到dll扩展到如何排查问题
[记录点滴]授人以渔,从Tensorflow找不到dll扩展到如何排查问题 目录 [记录点滴]授人以渔,从Tensorflow找不到dll扩展到如何排查问题 0x00 摘要 0x01 引言 0x02 ...
- 项目初始化CSS公共样式
/*! normalize.css v6.0.0 | MIT License | github.com/necolas/normalize.css */ /* Document =========== ...
- archaius(3) 配置管理器
基于上一节介绍的配置源,我们来继续了解配置管理器.配置源只是抽象了配置的获取来源,配置管理器是基于配置源的基础上对这些配置项进行管理.配置管理器的主要功能是将配置从目标位置加载到内存中,并且管理内存配 ...
- Java审计之文件操作漏洞
Java审计之文件操作漏洞篇 0x00 前言 本篇内容打算把Java审计中会遇到的一些文件操作的漏洞,都给叙述一遍.比如一些任意文件上传,文件下载,文件读取,文件删除,这些操作文件的漏洞. 0x01 ...
- Spring Boot实战之Redis缓存登录验证码
1.工具类 1 import lombok.experimental.UtilityClass; 2 3 import java.awt.*; 4 import java.awt.image.Buff ...
- gcc g++ 安装与配置 入门详解 - 精简归纳
gcc g++ 安装与配置 入门详解 - 精简归纳 JERRY_Z. ~ 2020 / 9 / 24 转载请注明出处!️ 目录 gcc g++ 安装与配置 入门详解 - 精简归纳 一.下载MinGW ...