返回
一盏灯的兴衰:Swift 游戏开发之「能否关个灯」(一)
IOS
2023-09-07 05:15:32
在上一篇文章中,我们已经完成了对《能否关个灯》小游戏的界面和游戏逻辑进行了初步搭建,并且也具备了一定的可玩性。但细心的你会发现,这种「随机过程」的游戏开局,我们几乎一把都不会赢,因为这并不符合这个游戏的初衷——逆序出开灯的顺序去关灯。 在现有代码中,每次新开局游戏里各种灯的状态都是随机的,这样一来,即使我们按规律去点击关灯,也往往会出现「白费功夫」的情况。因为开局的随机状态很可能与我们设想的顺序并不一致。
那么,有没有办法让游戏开始时,灯的状态是确定的呢?
答案是肯定的。我们只需要在游戏开始时,对灯的状态进行人为的初始化即可。
具体来说,我们可以这样做:
- 在
GameScene
类中,添加一个新的属性initialState
,类型为[Bool]
,表示灯的初始状态。 - 在
didMove(to:)
方法中,将initialState
初始化为我们希望的状态。 - 在
newGame()
方法中,将灯的状态重置为initialState
。
这样一来,每次游戏开始时,灯的状态都是确定的,我们就可以按照规律去点击关灯了。
以下是修改后的代码:
import SpriteKit
class GameScene: SKScene {
// 游戏中灯的状态
var lampStatus: [Bool] = []
// 灯的初始状态
var initialState: [Bool] = []
override func didMove(to view: SKView) {
// 初始化灯的初始状态
initialState = [false, true, false, true, false, true, false, true, false]
// 创建灯
for i in 0..<9 {
let lamp = SKSpriteNode(imageNamed: "lamp_off")
lamp.position = CGPoint(x: 100 + i * 100, y: 200)
lamp.name = "lamp\(i)"
addChild(lamp)
}
// 新开局游戏
newGame()
}
func 新游戏() {
// 将灯的状态重置为初始状态
lampStatus = initialState
// 更新灯的显示状态
for i in 0..<9 {
let lamp = childNode(withName: "lamp\(i)") as! SKSpriteNode
lamp.texture = SKTexture(imageNamed: lampStatus[i] ? "lamp_on" : "lamp_off")
}
}
// ... 省略其他代码 ...
}
修改后,游戏开始时,灯的状态将变为:
[false, true, false, true, false, true, false, true, false]
这样一来,我们就可以按照以下顺序去点击关灯了:
2, 4, 6, 8, 7, 5, 3, 1, 9
小提示:
如果你觉得这个顺序太难记,可以自己设计一个更简单的顺序。只要确保这个顺序是逆序的即可。
总结:
通过对灯的初始状态进行人为的初始化,我们可以让游戏开始时,灯的状态是确定的,从而使得游戏更加可玩。
在下一篇博文中,我们将继续探讨《能否关个灯》小游戏的其他玩法和技巧。敬请期待!