Swift游戏开发之俄罗斯方块:No.8 游戏规则

每个游戏都有它自己的规则,我们的俄罗斯方块的规则很明显,shape落到最底端时就停止下落,然后下一个shape开始往下落;当任一一个点挡住下落的shape时,整个shape就认为是已经到底了;当一行充满所有blocks时,这行消除,然后所有的往下落一行等等等等。

那么我们现在就开始制定我们的游戏规则,本节过后,我们的程序运行起来是这样子的:

我们首先从自定义的协议(protocol)开始,之前我们已经接触过两个swift自带的协议,hashableprintable。我们首先在swiftris类中添加我们自己的protocol

我们的程序将以试错法(trial-and-error)作为基本的原则进行,我们的用户交互界面GameViewController询问swiftris去向左向右向下移动,如果这条指令是合法的,我们就执行。

那什么时候“不合法”呢?我们来定义不合法的情况。

这里我们在#2中新建了一个函数用来判断shape是否处于不合法的地方,因为我们采用trial-and-error方法来测试是否处于合法位置,所以,我们的shape可能会处于各种奇怪的地方,没有关系。

接下来我们添加一些函数,用来旋转,移动我们的shape

#1中我们分别添加了两个函数让shape可以顺时针和逆时针的旋转,接下来我们添加了可以使shape左右上下移动的函数

接下来,让我们真正让这些函数发挥作用吧:

#1 dropshape函数中,我们每次将shape往下移动一行,如果它没有处于非法的位置,就循环执行下去,知道它处于非法的位置,因为它已经处于非法的位置了,所以我们需要把它复原到最后一个合法的位置,所以我们需要把它往上移动一行。

#2
我们定义了每次tick都会被调用的函数,不用担心没有见到的settle函数,我们稍后会来完善它

#3 我们可以让我们的shape在下落的过程中旋转

让我们来修复现在存在的error

#1中的settleShape函数会在shape无法再往下落的时候调用,我们把当前shape中的所有block都写入到blockArray里面,然后告诉程序,这个shape已经成功着陆了,不管它是真的着陆还是降落在别的shape头上,#2中的函数正是完成这样的检测;

同时fallingshape设置成nil,这样swiftris就会开始新的fallingshape。

得分机制

我们应该还记得,玩游戏大部分都有得分的,让我们来完善得分机制吧:

我们需要一组变量 scorelevel来表示得分和关卡数

当我们移除掉一整行的时候,我们就得分了,整个游戏就是依靠这样来得分的,对吧。

这是一段很长很长的代码,但是里面应该没有什么特别难以理解的内容,整个逻辑看起来也很清楚。返回两个数组,linesRemovedfallenBlocks

好了,我们已经走完了好长的一段,休息一下:

接下来还有好长的一段路要走。。。。。。。。。。。。。。。

swiftris即将完成了,我们还需要一个函数允许用户一次性将所有的block都移除出去

是时候将我们之前自定义的协议和GameViewController联系起来了

好了,运行一下你的程序,看看是不是想象的样子呢?

时间: 2024-10-17 09:23:31

Swift游戏开发之俄罗斯方块:No.8 游戏规则的相关文章

最大的幻术-游戏开发-到底是先学游戏引擎还是先学游戏编程

学习游戏的目的 我们学习游戏制作,游戏开发,游戏编程,游戏XX,我们的目的只有一个,打造一个非常牛逼,非常屌,非常让人开心的虚拟体验.我们用自己的学识让玩家在虚拟世界征战,生活,一步一步的让玩家幸福!那么我们的目的只有一个,让玩家知道自己的幸福在哪里,并且学会追求自己的幸福.当然,每个人对幸福的定义不一样.那么,我们只好让玩家来体验我们所来表达的最通俗的,最普遍的幸福体验,然后慢慢引导玩家去寻找自己的幸福体验.可能,在最后玩家都会离开游戏,离开虚拟世界,(对,这是真的,玩家需要一步一步达到定点,

6、Cocos2dx 3.0游戏开发找小三之游戏的基本概念

重开发者的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27689713 郝萌主友情提示: 人是习惯的产物,当你习惯快乐时,记忆里的不愉快就消失了. 游戏开始之前 经过之前的学习,我们已经可以开发一个最基本的 Cocos2d-x 游戏了,这个游戏包括一张背景图片和一个退出游戏的按 钮,但是这距离完成一个完整.实用的游戏还很遥远.在这一章节中,我们将首先抛开 Cocos2d,介绍游戏开发的基本概念,然后结合 Co

JavaFX战旗类游戏开发 第三课 创建游戏角色

在上一节课程中,我们学习了在JavaFX中绘制游戏地图.这一节课,我们将会创建我们的游戏角色. 首先,同样的,我们创建一个简单的基类. import javafx.scene.canvas.GraphicsContext; /** * 游戏物体基类 * @author Wing Mei */ public abstract class BaseObject { protected double x, y; protected double width,height; protected bool

【开发记录】微信小游戏开发入门——俄罗斯方块

叨叨 我在前一阵子,打算做一个微信小游戏,当然是单机的,只是为了了解小游戏开发的过程,最终选择了俄罗斯方块这一经典小游戏作为demo,源代码已托管值github,当然,这个游戏demo对用不并不友好,但是已经可以让我入门小程序开发了XD. demo地址:https://github.com/nbclw/Laya_Brick 准备 在任何开发前都需要对要开发的东西有一定的了解.准备: 小游戏原理:微信小游戏是属于H5游戏的一种吧,我是这样理解的:在H5中,有一个叫Canvas(画布)的存在,与电脑

Unity3D游戏开发之如何发布Android游戏

怎么在Unity3D游戏开发软件里,发布Android游戏?如果你感到有疑问,不如看看下面笔者的介绍. 新装的软件会自带一个demo,我们的讲解就是拿demo打不一款Android游戏,点击File -> build seting.如果你已经创建好一个场景需要发布,也可以加载进来跟着以下的步骤进行. 我们要发布到Android平台上,所以在这里就需要选择Android平台,再点击player settings.当然这里还需要你对游戏的部署信息进行写修改,值得注意的是:如果你使用的是破解版Unit

[Android游戏开发]八款开源 Android 游戏引擎 (巨好的资源)

初学Android游戏开发的朋友,往往会显得有些无所适从,他们常常不知道该从何处入手,每当遇到自己无法解决的难题时,又往往会一边羡慕于 iPhone下有诸如Cocos2d-iphone之类的免费游戏引擎可供使用,一边自暴自弃的抱怨Android平台游戏开发难度太高,又连个像样的游 戏引擎也没有,甚至误以为使用Java语言开发游戏是一件费力不讨好且没有出路的事情. 事实上,这种想法完全是没有必要且不符合实际的,作为能和苹果iOS分庭抗礼的Android(各种意义上),当然也会有相当数量的游戏引擎存

14、Cocos2dx 3.0三,找一个小游戏开发Scene and Layer:游戏梦想

发人员的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/30474393 Scene :场景 了解了Director 之后,接下来介绍 Scene 这个与它紧密相关的游戏组件. 通过之前的学习,我们已经了解了场景以及它在流程控制中的地位. 在 Cocos2d-x 中,Scene 定义了一个场景.场景仅仅是层的容器.包括了全部须要显示的游戏元素. 因此相对于其它游戏元素,Scene 并没有提供什么特别的功能,就是一

unity3d游戏开发之第一人称射击游戏

简介 这个教程中,我们详细了解下如何制作一个简单的第一人称射击游戏(FPS).其中将介绍一些基本的3D游戏编程的概念和一些关于怎样如游戏程序员般思考的技巧. 前提 这个教程假定你已经熟悉软件Unity基本操作,掌握了基本的脚本概念. 创建新工程 下载FPS_Tutorial.zip压缩文件,解压,在Unity中打开工程文件. 从Unity安装目录导入Standard Assets资源包. 导入工程后,你会在Unity工程面板中的"Standard Assets"文件夹下看见这些资源内容

Swift游戏开发之俄罗斯方块:No.9 添加点击和移动事件

本节内容过后,我们的程序运行起来将是这样的: 我们一步一步来,首先添加点击事件: 接触过iOS开发的应该对这些步骤不陌生,我们要添加UITapGestureDetector到view里面. 打开Main.storyboard,界面应该类似于下面这样 在右下角通过搜索找到 Tap Gesture Recognizer 然后把它拖入到GameViewControllerScene 里面 接下来打开Assistant Editor,界面看起来是这样的: 按住ctrl将Tap Gesture Recog