Swift – кодирование Функция связывания в Tic Tac Toe
Мне 13 лет, и я стараюсь следовать инструкциям Swift от Brian Advent. Он учит меня, как сделать простую игру с tic tac toe. Я пытаюсь закодировать связь в Swift после многих часов исследований, я нашел много кода, но ничего, что мне поможет.
Это мое сообщение победителю:
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) }
И это сообщение в случае галстука:
- UITableView медленно прокручивается с помощью UIImage
- URLForResource () всегда возвращает nil, swift 2.3, iOS10
- с помощью Swift 2.2 Pods с XCode 8
- NSBatchUpdateRequest вызывает ошибку в Swift
- Я начал проект для iPhone и iPad, но я хочу удалить iPad
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) }
Но когда я ввожу этот код и запускаю его, он выводит предупреждение «Это галстук», потому что в начале все еще нет победителя.
Теперь мне нужен код, который говорит мне, когда заполняются пробелы, поэтому блок «Это галстук» не называется.
У меня также есть этот код, если это какая-то помощь. Он проверяет, есть ли победитель:
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" }
Отредактировано для включения функции Дэниела Т:
Окончательный рабочий 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) }
Спасибо за помощь, мы очень благодарны 🙂 Если у вас есть какие-либо вопросы, пожалуйста, прокомментируйте ниже
- Невозможно перетащить и перемещать файлы в Project Navigator в Xcode
- copyItemAtPath работает на симуляторе, но не работает на устройстве
- Завершение Xcode-кода отсутствующих переменных и методов?
- Приложение OTA Xcode Server устанавливает версию iOS 8
- dyld: Символ не найден: _OBJC_CLASS _ $ _ Ошибка NSNetService
- Запустить приложение IPad из другого приложения, такого как электронная почта / веб-браузер
- Многоразовая ячейка не вызывает функцию prepareForReuse
- Где находится владелец файла в Xcode 8?
Ваш код никогда не проверяет, закончилась ли игра. Он проверяет только, выиграл ли кто-то.
Вам нужна инструкция if, которая проверяет, заполнены ли все квадраты, если они есть, и победитель == "", тогда игра является галстуком.
-РЕДАКТИРОВАТЬ-
Вы узнали о циклах и написании своих собственных функций? Способ решить вашу новую проблему – создать функцию, которая пересекает все поля.
func allFieldsFull() -> Bool { for i in 0 ..< 9 { if fields[i].player.isEmpty { return false } } return true }
Я оставлю это вам, чтобы выяснить, как использовать выше. Удачи!
Я использовал это для проверки на ConnectFour. Вместо операторов if вы передаете 1, -1 в StepX и StepY и соответствующим образом настраиваете свой цикл.
func isLinearMatch(#column: Int, row: Int, stepX: Int, stepY: Int)->Bool{ var startGamePieceType = gamePieceTypeOnBoard(column: column, row: row) for var i = 0; i < 4; ++i{ var newX = row + i * stepY var newY = column + i * stepX if(gamePieceTypeOnBoard(column: newY, row: newX) == GamePieceType.Undefined){ return false } if (startGamePieceType != gamePieceTypeOnBoard(column: newY, row: newX)){ return false } } return true }