一步一步教你用Swift开发俄罗斯方块:No.5 Block Party

我实在想不出怎么才能起一个好听点的中文名字,还是用原教程中的名字,block party

如果前面的几篇教程你觉得很简单,那么是时候开始加深难度了。 在俄罗斯方块游戏中,我们的主体就是那些形状,而每一个形状都是由不同的块组成的。所以,我们需要建立一个基础类,block,用来为我们更上层的显示打基础。

首先,按照建立二维数组array2D的步骤建立一个新的class,起名叫做Block

按照下面修改你的block类

可能你已经猜到了,这不是我们block 类的全部内容。

这部分只是定义了一个enumeration, 枚举类型 : BlockColor ,如果你看了之前我们放进来的资源文件,我们的游戏一共有6种颜色的快

#1
我们定义了一个变量表示可以显示的颜色种类:6

#2
我们定义了一个枚举类型,这是一个int行的,然后它遵循一个协议  printable。 在你实际输入代码的时候,如果你没有定义description函数,那么会一直提示你printable是有错的,所以我们可以猜测如果遵循了协议Printable,那么description是必须的。

这就是为什么希望大家能手动输入代码,而不是直接复制粘贴过去的原因。

关于更多的协议知识,点击这里

#3
我们提供了所有可以枚举的选择,它们从Blue(0)开始,结束于Yellow(5)

关于更多的枚举知识,点击这里

#4 我们定义个可供计算的性质(computed property),spriteName, computed property类似一个变量,但是每次访问它的时候,它都会执行在其内部的代码块,我们原本可以在其内部放置一个函数名字,例如
getSpriteName(),但是很明显,computed property 是一个更棒的选择

我们用一个switch...case 来完成这个功能

#5
我们用了另一个computed property,description,前面我们已经提到过了,因为我们采用了协议printable,所以这个description是必须的。

关于更多的computed properties知识,点击这里 

最后在#6
我们定义了一个static 函数,名字叫random(),你可以很容易从它的名字已经它内部的计算知道,这是一个返回随机颜色的函数,如果你们的函数在rawValue这里提示出错,那么请升级你的Xcode到6.1版本以上,我们在教材开篇已经提醒过大家了。

好了,让我们接下来继续完成block class的全部吧:

#1, 我们定义了一个class,它将会同时执行协议PrintableHashable, 其中hashable将允许我们的Block存储在Array2D中。

#2, 我们把我们的属性color定义为let,意味着一旦我们对它赋值之后,我们就不能再对它进行赋值了。在游戏中就表现为,当一个block颜色被分配以后,它就不能再换成别的颜色了。

想要更深入的了解var和let? 点击这里

#3, 我们定义了column和row,这两个参数将决定我们的block在屏幕上的位置。
SKSpriteNode将会在GameScene对每一个block着色和动画的时候将其描绘在屏幕上。

#4, 我们其实定义了一个快照,当我们调用block.spriteName的时候其实我们调用的是block.color.spriteName

#5, 我们定义了hashable协议需要的内容,我们定义了当前block的行数和列数的亦或值以确保他们都是独一无二的,这样才能被hash出来

#6, 这个应该比较熟悉了吧,我们要完成printable协议需要的内容,注意我们不在需要@“...%@..,string”这样繁琐的形式来写一个string了,而用\()就可以轻松把我们想要的内容写入字符串,如果你的row是3, column是8,而color是blue,那么将会返回blue:[8,3]

同时还定义了init函数,这个函数比较简单吧。

最后#7, 我们自定义了一个符号
= , 它有两个参数lhs和rhs,返回bool类型的值;l和r其实是等号的left和right,如果这个block的row,column和color都一样,那么我就返回ture

============================================================================

OK,到这里,我们的基础类 Block就建立好了!

感觉还好么? 我建议大家还是仔细回顾和吸收一下这几个章节介绍的内容,把没有弄懂的地方都全部自己查看一遍,文中有很多展开的链接,相当于进阶的知识,大家都不妨学习一下。

另外这周我可能不能更新教程了,因为个人原因,暂停更新2天,下周一(2月2日)我将会恢复更新,到时候将能看到我们俄罗斯方块的初步样子了!

如果有进度比较快,又有些基础的同学,可以参照原版的教程先学习一下。原本教程地址在这里:https://www.bloc.io/tutorials/swiftris-build-your-first-ios-game-with-swift#!/chapters/681

但是我还是建议大家先把现在的内容都吃透,我当时研究closure就研究了整整一天才继续走教程,这样对后面的理解确实是有帮助的。而如果只是单纯把代码敲上去,然后运行一下程序,看到效果了就说:ok我学会了,其实是很不负责的,可能你对这些代码为什么这样写都不了解,怎么能说自己会了呢?

好了,我们下周一见!

时间: 2024-11-08 07:41:47

一步一步教你用Swift开发俄罗斯方块:No.5 Block Party的相关文章

一步一步教你用Swift开发俄罗斯方块:No.1 建立你的第一个Swift游戏工程

原文地址:https://www.bloc.io/tutorials/swiftris-build-your-first-ios-game-with-swift#!/chapters/677 好了,我们正式开始我们的swift游戏开发! 首先,需要新建一个工程,熟悉iOS开发的童鞋应该对这个步骤不会陌生.我们还是一步一步来吧: 这里有两种途径建立全新的工程,你可以: 如果你的Mac没有运行Xcode,请打开它,然后在欢迎页面点击Create a new Xcode project 这里我还是要重

一步一步教你用Swift开发俄罗斯方块:No.7 下落机制

上一章节我们完成了shape的建立,现在游戏里面的元素(blocks,shapes)都已经完成了,背景也搭好了(array2D),让我们开始制定游戏规则吧.首先就是需要让我们的shape掉下来,还记得我们刚开始的时候每个600毫秒要刷新一下屏幕呢?那会还有一个closure我们都不太明白是干嘛用的,马上就知道了. 好了,今天章节过后,你的程序运行起来应该是这样的: 让我们来修改代码吧,这次要修改的代码比较多,而且没有上一章节那样重复的工作.不用太过担心,我们一步一步来: 在#1, 函数在执行时会

一步一步教你用Swift开发俄罗斯方块:No.2 准备工作

如果你已经成功建好了工程,运行之后你会发现是个小飞机的程序,如果我没记错的: 这个程序是spin-the-bottle:Space Edition,但是可惜的是,我们并不需要这些东西,我们需要一个干净的模板,所以,我们需要首先清理下战场,然后把我们需要用到的一些资源放进来. 打开项目导航栏,如下图中圆圈内的图标,或者点击? + 1: 右键点击GameScene.sks,选择delete 当系统询问的时候,选择move to trash 接下来点击image.xcassets,然后删除spaces

一步一步教你用Swift开发俄罗斯方块:No.3 二维数组

数组是一个很有用的数据结构,很多程序都建立在数组之上,我很少看到哪个应用程序不用到数组的. 而我们的俄罗斯方块显然也需要数组,而且是更为特殊的  二维数组. 为什么是二维数组呢?其实我们的整个游戏区域,可以看做是一个二维数组区域,就像这样: 我们的每一个block都占据在这样一个20x10的区域之内,20行,10列的一个200个block的二维数组让我们可以根据(x,y)坐标来确定block的位置,而这些blocks其实就是组成我们的L形,或者Z形 等等不同但我们都熟知的俄罗斯方块: swift

一步一步教你用Swift开发俄罗斯方块:No.6 变形记

The object of art is to give life shape - William Shakespeare 上一章节我们介绍了这个游戏最基本的组成元素,block,那么接下来我们就开始更为清晰和形象地了解如果做出来俄罗斯方块的shape吧.是的,就是这样的形状: 首先我们来新建一个类,名字叫做Shape:到这里新建一个类的步骤应该很熟练了吧. 我们来修改下面的代码 在代码的第一部分,我们先建立了一个枚举类型,这个enumeration用来辅助我们定义我们的shape的4个方向,无

一步一步教你用Swift开发俄罗斯方块:No.4 滴答作响的时钟机制

为什么标题要叫做"滴答作响的时钟机制"呢? 想必我们大家都玩过俄罗斯方块,那些不同形状的东西,就是哪些不同形状,你懂的,会随着游戏级别的提高而下降的越来越快.是的 ,我们也要模仿那样,做出我们自己的时钟机制. 我们可以看到SKScene里面有一个函数 update(currentTime: CFTimeInterval). 这个函数被没一帧所调用.帧,frame, 是什么? 你可以理解一帧就是一副静态的图片,如果很多图片在很短的时间内连续播放,就成了动画.当你的眼睛开始去预知每一帧图像

一步一步教你用Swift开发俄罗斯方块:No.0

花了一周时间,按照Swift的开发教程,各种查阅资料,各种google,总算把俄罗斯方块游戏写完了,也想写个系列教学blog:因为虽然看着教程不长,但是对于从零学Swift的我,中间还是遇到了很多困难,好多bug不知道是怎么出来的,都是经过很纠结的过程才一一克服掉的,所以,这篇中文版的系列教学,也算是个为想学swift而又无从下手的童鞋们图个方便吧. 先上一个最终版本,基本效果就是这样,添加了动画效果和音效等等,其实还有很多事情可以做,只要照着这系列的blog进行下去,相信大家最终都创造出有着自

一步一步学习Swift之(一):关于swift与开发环境配置

一.什么是Swift? 1.Swift 是一种新的编程语言,用于编写 iOS 和 OS X 应用. 2.Swift 结合了 C 和 Objective-C 的优点并且不受 C 兼容性的限制. 3.Swift 采用安全的编程模式并添加了很多新特性,这将使编程更简单,更灵活,也更有趣. 4.Swift 是基于成熟而且倍受喜爱的 Cocoa 和 Cocoa Touch 框架,它的降临将重新定义软件开发. 5.Swift 是编写 iOS 和 OS X 应用的极佳手段,并将伴随着新的特性和功能持续演进.

教你一步一步部署.net免费空间OpenShift系列之一------帐号注册和验证

前几天有博友发布了一篇文章<一键部署mono 免费空间支持ASP.NET MVC 再也不担心伙食费换空间了>,支持MVC3和域名绑定,觉得不错,于是自己实践了一下,发现自己实际遇到的问题真不少,而且网上的关于此空间的帖子要么千篇一律,要么语焉不详,现总结为图文教程系列 帐号注册和验证 打开https://www.openshift.com/products/pricing,出现三种选择,前2种是免费的,建议选择第二个. 点击Create one跳转到创建用户界面 看到如下信息,填写邮箱和密码,