Проблема с расчетом выигрыша, когда компьютер выигрывает в моем приложении Swift «TicTacToe»IOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Гость
 Проблема с расчетом выигрыша, когда компьютер выигрывает в моем приложении Swift «TicTacToe»

Сообщение Гость »


В настоящее время я разрабатываю приложение на основе Swift для игры в крестики-нолики, и столкнулся с проблемой правильного расчета выигрышей при игре против компьютера.

В своем приложении я реализовал логику, позволяющую отслеживать количество побед как игрока, так и компьютера. Выигрыши рассчитываются правильно, когда два пользователя играют друг против друга, но когда я играю против компьютера, выигрыши компьютера рассчитываются неправильно. Вместо увеличения от 0 до 1 в случае победы компьютера оно все время остается равным 0.

Я внимательно просмотрел свой код и не нашел явных ошибок. Я подозреваю, что проблема может заключаться в моей функции checkForWinner() или в том, как я обрабатываю расчет выигрыша при игре против компьютера.

Я был бы признателен, если бы кто-нибудь проверил мой код и предложил понимание того, что может быть причиной такого поведения, или есть ли какие-либо рекомендации по расчету выигрыша при игре против компьютера.

Вот мой код:

импортировать UIKit класс GameViewController: UIViewController {

// Все мои розетки @IBOutlet слабая переменная TurnSign: UILabel! @IBOutlet кнопки var: [UIButton]! var currentPlayer: Int = 1 // Чтобы отслеживать игрока вар playerOneName: String? // Чтобы сохранить имя игрока в переменной вар playerTwoName: String? // Чтобы сохранить имя второго игрока в переменной вар победитель: Строка? var boardArray = ["", "", "", "", "", "", "", "", ""] // Массив пустых строк вар countPlayer1 = 0 вар countPlayer2 = 0 пусть playAgainstComputer = GameSettings.shared.playAgainstComputer переопределить функцию viewDidLoad() { супер.viewDidLoad() boardArray = ["", "", "", "", "", "", "", "", ""] // Если настал ход игрока 1 -> обновляем текст labelSign если (текущийPlayer == 1) { TurnSign.text = имя_игрока } еще { TurnSign.text = playerTwoName } print("Начальный currentPlayer: \(currentPlayer)") } // Функция переключения хода между игроком 1 и 2 функция переключателяPlayers() { если текущийPlayer == 1 { текущийPlayer = 2 } еще { текущийплеер = 1 } } /** В этой функции я хочу установить заголовок на кнопке, а затем переключать ее при нажатии кнопки. Все кнопки прикреплены к этой функции, поэтому «let index» будет включать одинаковые термины для всех моих кнопок. **/ @IBAction func buttonTapped (_ отправитель: UIButton) { пусть индекс = sender.tag если boardArray[индекс] == "" { если текущийPlayer == 1 { print("Перед обновлением currentPlayer: \(currentPlayer)") boardArray[индекс] = "X" sender.setTitle("X", для: .normal) } еще { boardArray[индекс] = "О" sender.setTitle("O", для: .normal) } sender.setTitle(boardArray[index], for: .normal) переключательИгроки() если текущийPlayer == 1 { print("Перед обновлением currentPlayer: \(currentPlayer)") TurnSign.text = имя_игрока } еще { TurnSign.text = playerTwoName } если letwinnerMessage = checkForWinner() { self.winner = сообщение победителя myAlertMessage (winnerMessage: winMessage) } } else if !boardArray.contains("") { myAlertMessage(winnerMessage: «Ничья!») } if GameSettings.shared.playAgainstComputer && currentPlayer == 2 { print("Перед обновлением currentPlayer: \(currentPlayer)") играть противNPC() } } // Функция для проверки победителя func checkForWinner() -> Строка? { пусть winPatterns: [[Int]] = [ [0, 1, 2], [3, 4, 5], [6, 7, 8], [0, 3, 6], [1, 4, 7], [2, 5, 8], [0, 4, 8], [2, 4, 6] ] если GameSettings.shared.playAgainstComputer && текущийPlayer == 2 { если !boardArray.contains("") { return "Ничья!" } вернуть ноль } для шаблона в winPatterns { пусть позиции = шаблон.карта {boardArray[$0]} ifpositions == ["X", "X", "X"] { если GameSettings.shared.playAgainstComputer { если текущийPlayer == 1 { print("Перед обновлением currentPlayer: \(currentPlayer)") количество игроков1 += 1 } return "Поздравляю \(playerOneName ?? "X"), вы выиграли!" } еще { print("Перед обновлением currentPlayer: \(currentPlayer)") количество игроков1 += 1 return "Поздравляю \(playerOneName ?? "X"), вы выиграли!" } } else ifpositions == ["O", "O", "O"] { если GameSettings.shared.playAgainstComputer { если текущийPlayer == 2 { print("Перед обновлением currentPlayer: \(currentPlayer)") countPlayer2 += 1 } return "Поздравляю \(playerTwoName ?? "O"), вы выиграли!" } еще { countPlayer2 += 1 return "Поздравляю \(playerTwoName ?? "O"), вы выиграли!" } } } если boardArray.contains("") { вернуть ноль } еще { return "О, какой красивый галстук!" } } // Это мое предупреждающее сообщение после каждой победы/ничьи func myAlertMessage (winnerMessage: String) { let CrossesText = "Кресты: \(countPlayer1)" let noughtsText = "Ноли: \(countPlayer2)" let messageText = "Хочешь сыграть еще раз?\n\n\(crossesText)\n\(noughtsText)" let myAlertController = UIAlertController (title: winMessage, message: messageText,eferredStyle: .alert) let yesAction = UIAlertAction(title: "Да", стиль: .default) {_ in self.resetGame() } let noAction = UIAlertAction(title: «Нет», стиль: .cancel) {_ в self.dismissGame() } myAlertController.addAction(даДействие) myAlertController.addAction(noAction) присутствует (myAlertController, анимированный: true, завершение: ноль) } // Эта функция сбрасывает игру и готовит к новой игре функция сброса игры() { boardArray = ["", "", "", "", "", "", "", "", ""] для кнопки в кнопках { button.setTitle("", для: .normal) button.isEnabled = правда } текущийплеер = 1 TurnSign.text = имя_игрока } // Эта функция позволяет мне закрыть игру в GameViewController и вернуться в SecondViwController функция увольнения () { отклонить (анимация: правда, завершение: ноль) } /* Эта функция позволяет компьютеру сделать ход Он ищет пустые места в игре и заставляет двигаться случайным образом. */ функция makeComputerMove() { вар пустойSpots = [Int]() for (индекс, значение) в boardArray.enumerated() { если значение.isEmpty { пустойSpots.append(индекс) } } если пусть randomIndex = пустойSpots.randomElement(){ let buttonToPress = кнопки[randomIndex] buttonTapped (buttonToPress) } } /* Эта функция контролирует, происходит ли игра между пользователем и компьютером. Если это правда, это позволяет компьютеру сделать ход. */ функция playAgainstNPC() { if GameSettings.shared.playAgainstComputer == true && currentPlayer == 2 { makeComputerMove() } }

Когда я играю против компьютера, он выводит: Первоначальный currentPlayer: 1 в моем выводе. После того, как я сделаю свой первый ход в игре, я получаю следующие результаты: До текущего обновления плеера: 1 До текущего обновления плеера: 2 До текущего обновления плеера: 1 Надеюсь, эта информация поможет
Ответить Пред. темаСлед. тема

Быстрый ответ, комментарий, отзыв

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «IOS»