ios - Swift - 在 Tic Tac Toe 中编写 Tie 函数

标签 ios xcode swift

我今年 13 岁,正在尝试学习 Brian Advent 的 Swift 教程。他正在教我如何做一个简单的井字游戏。经过几个小时的研究,我试图在 Swift 中编写一个 tie 函数,我发现了很多代码,但没有任何帮助我。

这是我给获奖者的信息:

if winner != "" { //if winner is something

    let alert = UIAlertController(title: "Tic Tac Toe", message: "The winner is \(winner)!", preferredStyle: UIAlertControllerStyle.Alert)
    alert.addAction(UIAlertAction(title: "Ok", style: UIAlertActionStyle.Default, handler: { (alert:UIAlertAction!) -> Void in
        //TODO reset the fields
        self.resetField()
     }))
     self.presentViewController(alert, animated: true, completion: nil)
 }

这是平局时的消息:

else if winner == "" {
    let alert = UIAlertController(title: "Tic Tac Toe", message: "It was a tie", preferredStyle: UIAlertControllerStyle.Alert)
    alert.addAction(UIAlertAction(title: "Ok", style: UIAlertActionStyle.Default, handler: { (alert:UIAlertAction!) -> Void in
        //TODO reset the fields
        self.resetField()
    }))
    self.presentViewController(alert, animated: true, completion: nil)
}

但是当我输入这段代码并运行它时,它会弹出“平局”警报,因为一开始仍然没有赢家。

现在我需要的是一个代码,告诉我什么时候空格都被填满,这样就不会调用“It's a tie” block 。

我也有这段代码,如果有帮助的话。它检查是否有获胜者:

func checkResults(){
    var winner = ""
    if fields[0].player == "Steve" && fields[1].player == "Steve" && fields[2].player == "Steve"{
        winner = "Steve"
    }else if fields[0].player == "Creeper" && fields[1].player == "Creeper" && fields[2].player == "Creeper"{
        winner = "Creeper"
    }else if fields[3].player == "Steve" && fields[4].player == "Steve" && fields[5].player == "Steve"{
        winner = "Steve"
    }else if fields[3].player == "Creeper" && fields[4].player == "Creeper" && fields[5].player == "Creeper"{
        winner = "Creeper"
    }else if fields[6].player == "Steve" && fields[7].player == "Steve" && fields[8].player == "Steve"{
        winner = "Steve"
    }else if fields[6].player == "Creeper" && fields[7].player == "Creeper" && fields[8].player == "Creeper"{
        winner = "Creeper"
    }else if fields[0].player == "Steve" && fields[3].player == "Steve" && fields[6].player == "Steve"{
        winner = "Steve"
    }else if fields[0].player == "Creeper" && fields[3].player == "Creeper" && fields[6].player == "Creeper"{
        winner = "Creeper"
    }else if fields[1].player == "Steve" && fields[4].player == "Steve" && fields[7].player == "Steve"{
        winner = "Steve"
    }else if fields[1].player == "Creeper" && fields[4].player == "Creeper" && fields[7].player == "Creeper"{
        winner = "Creeper"
    }else if fields[2].player == "Steve" && fields[5].player == "Steve" && fields[8].player == "Steve"{
        winner = "Steve"
    }else if fields[2].player == "Creeper" && fields[5].player == "Creeper" && fields[8].player == "Creeper"{
        winner = "Creeper"
    }else if fields[0].player == "Steve" && fields[4].player == "Steve" && fields[8].player == "Steve"{
        winner = "Steve"
    }else if fields[0].player == "Creeper" && fields[4].player == "Creeper" && fields[8].player == "Creeper"{
        winner = "Creeper"
    }else if fields[2].player == "Steve" && fields[4].player == "Steve" && fields[6].player == "Steve"{
        winner = "Steve"
    }else if fields[2].player == "Creeper" && fields[4].player == "Creeper" && fields[6].player == "Creeper"{
        winner = "Creeper"
    }

编辑以包含 Daniel T 的函数:

最终的工作allFieldsFull()代码:

  else if allFieldsFull() == true && winner == "" {
        let alert = UIAlertController(title: "Tic Tac Toe", message: "It's a tie", preferredStyle: UIAlertControllerStyle.Alert)
        alert.addAction(UIAlertAction(title: "Ok", style: UIAlertActionStyle.Default, handler: { (alert:UIAlertAction!) -> Void in
            //TODO reset the fields
            self.resetField()
        }))
        self.presentViewController(alert, animated: true, completion: nil)
    }

感谢您的帮助,非常感谢:) 如果有任何疑问请在下方评论

最佳答案

您的代码从不检查游戏是否结束。它仅检查是否有人获胜。

您需要一个 if 语句来检查所有方格是否都已满,如果是,并且 Winner == "",那么 游戏平局。

-编辑-

您了解循环并编写自己的函数了吗?解决新问题的方法是创建一个循环遍历所有字段的函数。

func allFieldsFull() -> Bool {
    for i in 0 ..< 9 {
        if fields[i].player.isEmpty {
            return false
        }
    }
    return true
}

我将让您弄清楚如何使用上述内容。祝你好运!

关于ios - Swift - 在 Tic Tac Toe 中编写 Tie 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27239769/

相关文章:

c++ - 与 iOS 项目上的 C++ 库链接失败

ios - 获取 “use of undeclared identifier” ,当我添加 getter 时,为什么?

iphone - 在真实iPhone中测试应用程序,但它仍然运行旧版本应用程序?

ios - CFStringTransform 和 Swift 3 中 'init' 的使用不明确

ios - Swift 问题中的 NSXMLDelegate

iOS:Firebase token 返回 null

javascript - 是否有可接受的跨平台方法在基于触摸的设备上以标准 Web 形式显示数字小键盘?

ios - WebView 显示来自 apple.com 的空白屏幕部分

ios - 如何根据其结果更改文本标签的颜色?

swift - Alamofire 非阻塞连接