2016-03-15 2 views
0

Недавно я столкнулся с другой проблемой с использованием функций для игры с tic tac toe. Я хочу, чтобы эта функция выполняла проверку, если кто-либо из игроков выиграл функцию «выиграть». Функция работает в моем исходном коде, но это потребовало, чтобы я написал ее 4 раза. Я хотел упростить его, сделав его функцией, но я не могу заставить его работать. Я попытался добавить глобальные переменные в начале функции, но это, похоже, не так.Функция, которая проверяет, является ли что-то переменным

num1 = '1' 
num2 = '2' 
num3 = '3' 
num4 = '4' 
num5 = '5' 
num6 = '6' 
num7 = '7' 
num8 = '8' 
num9 = '9' 
player1_mark = "X" 
player2_mark = "O" 
endgame = False 

def drawBoard(): 
    ''' Prints the board''' 
    print 

def win(x): 
    if (num1 == x and num2 == x and num3 == x): 
     drawBoard() 
     print "The computer wins!" 
     endgame = True 
    elif (num1 == x and num5 == x and num9 == x): 
     drawBoard() 
     print "The computer wins!" 
     endgame = True 
    elif (num1 == x and num4 == x and num7 == x): 
     drawBoard() 
     print "The computer wins!" 
     endgame = True 
    elif (num4 == x and num5 == x and num6 == x): 
     drawBoard() 
     print "The computer wins!" 
     endgame = True 
    elif (num7 == x and num8 == x and num9 == x): 
     drawBoard() 
     print "The computer wins!" 
     endgame = True 
    elif (num7 == x and num5 == x and num3 == x): 
     drawBoard() 
     print "The computer wins!" 
     endgame = True 
    elif (num1 == x and num2 == x and num3 == x): 
     drawBoard() 
     print "The computer wins!" 
     endgame = True 
    elif (num8 == x and num5 == x and num2 == x): 
     drawBoard() 
     print "The computer wins!" 
     endgame = True 
    elif (num9 == x and num6 == x and num3 == x): 
     drawBoard() 
     print "The computer wins!" 
     endgame = True 
    elif (num1 != '1' and num2 != '2' and num3 != '3' and num4 != '4' and num5 != '5' and num6 != '6' and num7 != '7' and num8 != '8' and num9 != '9'): 
     drawBoard() 
     print "Draw" 
     endgame = True 

'''Lets say that the player gets the row 1 2 and 3''' 
num1 = 'X' 
num2 = 'X' 
num3 = 'X' 
while True: 
    win(player1_mark) 
    while endgame == True: 
     print 'You win!' 
     break 

Приветствия

+2

Почему вы используете девять отдельных переменных для игрового поля, а не, например, список или список списков? – kindall

+0

Извините, но ваш код - настоящий беспорядок. Вы должны переписать его. Например. вы намеренно дважды проверяете, являются ли '(num1 == x и num2 == x и num3 == x)'? Я подозреваю, что это ваш дизайн, все повторения, что в конечном итоге затрудняет логику. – jDo

ответ

1

Я не понимаю ваш код, но вы можете заставить его работать, возвращая эндшпиль из функции. Добавьте это в конце функции:

def win(x): 
    ... 
    #all the if/elif statements# 
    ... 
    return endgame 

Также я не знаю, почему вы называете все циклы while. Я хотел бы предложить следующее:

endgame = win(player1_mark) 
if endgame == True: 
    print "You win!" 

Приветствиях

1

Быстрая модификация будет выглядеть следующим образом (возвращает значение equal, удалите вторую while и удалить дубликаты кода с более булевой формулы):

num1 = '1' 
num2 = '2' 
num3 = '3' 
num4 = '4' 
num5 = '5' 
num6 = '6' 
num7 = '7' 
num8 = '8' 
num9 = '9' 
player1_mark = "X" 
player2_mark = "O" 

def drawBoard(): 
    ''' Prints the board''' 
    print 

def win(x): 
    if (num1 == x and num2 == x and num3 == x) or (
     num1 == x and num5 == x and num9 == x) or (
     num1 == x and num4 == x and num7 == x) or (
     num4 == x and num5 == x and num6 == x) or (
     num7 == x and num8 == x and num9 == x) or (
     num7 == x and num5 == x and num3 == x) or (
     num1 == x and num2 == x and num3 == x) or (
     num8 == x and num5 == x and num2 == x) or (
     num9 == x and num6 == x and num3 == x) : 
     drawBoard() 
     print "The computer wins!" 
     return True 
    elif (num1 != '1' and num2 != '2' and num3 != '3' and num4 != '4' and num5 != '5' and num6 != '6' and num7 != '7' and num8 != '8' and num9 != '9'): 
     drawBoard() 
     print "Draw" 
     return True 
    else: 
     return False 
'''Lets say that the player gets the row 1 2 and 3''' 
num1 = 'X' 
num2 = 'X' 
num3 = 'X' 
while True: 
    endgame = win(player1_mark) 
    if(endgame): 
     print 'You win!' 
     break 
+0

Точно - хороший ответ вместо того, чтобы наказывать ОП об их коде. –

Смежные вопросы