代码之家  ›  专栏  ›  技术社区  ›  Ace Green

Tic Tac Toe游戏中的代码错误

  •  -1
  • Ace Green  · 技术社区  · 10 年前

    我非常感谢你在以下方面的帮助。我已经和这个小麻烦作了一段时间的斗争,但运气不佳。我有这段代码,它基本上模拟了一个AI对一个玩家玩TIC TAC TOE。

    let Result = RowCheck(value: 0)
    if Result != nil {
        println("Computer has two in a row")
        var WhereToPlayResult = WhereToPlay(Result.location, pattern: Result.pattern)
        if !IsOccupied(WhereToPlayResult) {
            SetImageForSpot(WhereToPlayResult, player: 0)
            aiDeciding = false
            CheckForWin()
            return
        }
        return
    }
    

    RowCheck只是检查一个模式。

    func RowCheck(#‎value:Int) -> (location:String,pattern:String)? {
        var AcceptableFinds = ["011","110","101"]
        var FindFuncs = [CheckTop,CheckBottom,CheckLeft,CheckRight,CheckMiddleAcross,CheckMiddleDown,CheckDiagionalRightLeft,CheckDiagionalLeftRight]
        for Algorthm in FindFuncs {
            var AlgorthmResults = Algorthm(value:value)
            if (find(AcceptableFinds,AlgorthmResults.pattern) != nil) {
                return AlgorthmResults
            }
        }
        return nil
    }
    

    但它给了我一个错误:

    var WhereToPlayResult = WhereToPlay(Result.location, pattern: Result.pattern)
    
    1 回复  |  直到 9 年前
        1
  •  2
  •   Ian MacDonald    10 年前

    因为你的 RowCheck 方法返回可选的(并且可能返回 nil ),您需要展开可选作业或使用其他作业:


    let Result = RowCheck(value: 0)
    if Result != nil {
      var WhereToPlayResult = WhereToPlay(Result!.location, pattern: Result!.pattern)
      // ...                                    ^                          ^
    }
    

    if let Result = RowCheck(value: 0) {
      // ...
    }
    

    附带说明:只有类应该以大写字母开头命名。要保持苹果的代码风格,您应该将变量和函数 result , rowCheck