码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-02-04 23:27:53      阅读:252      评论:0      收藏:0      [点我收藏+]

标签:swift   ios   游戏开发   

每个游戏都有它自己的规则,我们的俄罗斯方块的规则很明显,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联系起来了

技术分享

技术分享

技术分享

技术分享

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



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

标签:swift   ios   游戏开发   

原文地址:http://blog.csdn.net/u011156012/article/details/43492525

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!