Программа не остановится при выполнении условий - PullRequest
0 голосов
/ 05 августа 2020

Я пишу итоговую игру, в которой два игрока по очереди выбирают случайное число из диапазона (1,9), повторение числа не допускается. Если первый игрок выберет [7, 2, 3, 5], он выиграет, потому что 7 + 3 + 5 = 15

Итак, мой вопрос: почему программа не останавливается, когда first_player имеет сумму входов that == 15 Ниже находится файл readme

Ответы [ 2 ]

0 голосов
/ 05 августа 2020

Игра не останавливается, когда ввод первого игрока равен 15, потому что вы запрашиваете ввод второго игрока независимо от того, выиграл ли первый игрок. Вы можете увидеть это в своем тестовом коде, где у вас есть два оператора while для ввода каждого игрока. Если вы завершите этот раунд с участием второго игрока, ваша программа работает и останавливается на этом. Чтобы остановить, когда игрок выигрывает на вводе, просто добавьте условную проверку для выхода из основного l oop перед запросом ввода следующего игрока.

0 голосов
/ 05 августа 2020

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

примечания:

  • Все игровые состояния повторно используются в fstrings, как dict ключи и даже для представления игрока
  • Игра l oop (update()) представляет один ход, и игрок, которому соответствует ход, переключается в конце l oop
  • make_move также представляет один ход
  • вся игра содержится в классе
  • reset() используется для очистки окна, сброса всех свойств игры и запуска l oop , но при первом вызове он действует как инициализатор для всех свойств игры.
  • Никогда не будет случая, когда у обоих игроков будет по 15 очков
import os

UNFINISHED  = "unfinished"
DRAW        = "draw"
FIRST_WON   = "First"
SECOND_WON  = "Second"

CLEAR       = lambda: os.system('cls') #windows only

class AddThreeGame:
    @property
    def current_state(self):
        return self.__state
        
    @property
    def player(self):
        return self.__rotation[self.__player]

    def __init__(self):
        self.__rotation = [FIRST_WON, SECOND_WON]
        self.__states = {
            UNFINISHED:'We have unfinished business, come back for more\n',
            DRAW:'Draw game\n',
            FIRST_WON:'First player won this game!!!\n',
            SECOND_WON:'Second player won this game!!!\n',
        }
        
        self.reset()
    
    def make_move(self, player, number):
        if number not in range(1, 10) or number in self.__input:
            return False
            
        self.__input.append(number)
        self.__players[self.player].append(number)
        
        if len(self.__players[self.player]) >= 3:
            L = self.__players[self.player]
            for i in range(0, len(L)-2):
                for j in range(i+1, len(L)-1):
                    for k in range(j+1, len(L)):
                        if (L[i] + L[j] + L[k]) == 15:
                            self.__state = player
                            return True
    
        if len(self.__input) == 9:
            self.__state = DRAW
    
        return True
        
    def update(self):
        while True:
            num = int(input(f'{self.player} player please enter a number from 1 to 9: '))
            while True:
                if self.make_move(self.player, num):
                    break
                else:
                    num = int(input("Wrong input, please try a different number: "))
                    
            if self.current_state == UNFINISHED:
                if self.__player == 1: #technically, this is player 2
                    print(self.__states[self.current_state])
                #next player
                self.__player = (self.__player + 1) % 2
            else:
                print(self.__states[self.current_state])
                break

        
        if input('Play Again? (y or n): ') == 'y':        
            self.reset()
        
    def reset(self):
        CLEAR()
        self.__player = 0
        self.__input  = []
        self.__state  = UNFINISHED
        
        self.__players = {
            FIRST_WON:[],
            SECOND_WON:[],
        }
        self.update()

  
if __name__ == '__main__':      
    AddThreeGame()
...