【发布时间】:2020-03-25 07:47:04
【问题描述】:
这就是问题所在。有一个机器人会玩石头,纸,剪刀。机器人应该选择会击败其前一个动作的动作。例如:第一轮:机器人挑纸,所以第二轮机器人应该挑剪刀。等等……
到目前为止我的代码是这样的:使第一步随机移动的方法。
let randomizer = GKARC4RandomSource()
// TODO: - REFACTOR
func botRandomChoice() -> Symbol {
let botSymbol = randomizer.nextInt(upperBound: 3) // or 2
if botSymbol == 0 {
print("RandomSymbol is rock")
return .rock
} else if botSymbol == 1 {
print("Random Symbol is paper")
return .paper
} else {
print("Random Symbol is scissor")
return .scissor
}
}
型号:
struct Game {
var symbol: Symbol
var state: GameState
}
enum Symbol: String {
case rock = "????"
case paper = "????"
case scissor = "✂️"
func outcome(botChoice: Symbol) -> GameState {
if self == botChoice {
return .draw
}
switch self {
case .rock:
return botChoice == .scissor ? .win : .lose
case .paper:
return botChoice == .rock ? .win : .lose
case .scissor:
return botChoice == .paper ? .win : .lose
}
}
}
到目前为止,我尝试了什么? 我试图想出最好的方法来做到这一点。我正在考虑一个看起来像这样的 if 或 switch 语句:
var moveNumber = 1
var symbol: Symbol
if moveNumber == 1 {
// It is the first move so pick a random choice.
let boySymbol = randomizer.nextInt(upperBound: 3)
}
if moveNumber == 2 {
// Look at previous move
let previous = botSymbol
// Use the move that would beat it.
if previous == .rock {
// play paper
我认为有更好的方法来解决或编码这个问题,但我迷路了。我什至在考虑一个链表?也许是一本字典?
【问题讨论】: