首页 > 解决方案 > 在我的井字游戏中,我在哪里合并没有人赢过

问题描述

我是编码新手,最近开始学习 python。我的第一个挑战是建立一个井字游戏。以下是我的游戏代码,除了没有获胜者(即游戏平局)外,一切正常;我想展示no body has won the game.我试图else在不同的地方合并一个。但是,他们没有帮助。这是我的代码。

  # a dictionary to display the grid
grid = {
    '1':'1', '2':'2', '3':'3',
    '4':'4', '5':'5', '6':'6',
    '7':'7', '8':'8', '9':'9'
}
# a list to store the values that has already been entered
used_places = []

# players and their symbols
player_1 = 'x'
player_2 = 'o'

# to store result
result = None

def grid_display():
    #this function displays the grid
    print('\n\n')
    print(grid['1'], '\t|\t', grid['2'], '\t|\t', grid['3'])
    print(''.rjust(19,'*'))
    print(grid['4'], '\t|\t', grid['5'], '\t|\t', grid['6'])
    print(''.rjust(19, '*'))
    print(grid['7'], '\t|\t', grid['8'], '\t|\t', grid['9'])

def win_the_game():
    # this function checks for result and returns true or false
    if(
        (grid['1'] == grid['2'] == grid['3']) or (grid['4'] == grid['5'] == grid['6']) or
        (grid['7'] == grid['8'] == grid['9']) or (grid['1'] == grid['4'] == grid['7']) or
        (grid['2'] == grid['5'] == grid['8']) or (grid['3'] == grid['6'] == grid['9']) or
        (grid['1'] == grid['5'] == grid['9']) or (grid['3'] == grid['5'] == grid['7'])
    ):
        return True
    else:
        return False

def taking_turns(turn):
    #this function asks user for input
    print("its turn of ", turn)
    choice = input("enter your choice")
    while not (choice.isdecimal() and choice in grid and (choice not in used_places)):
    # taking proper input by checkin it with already entered numbers
    # and if it is a number
    # and if number is in between 1 and 9
        choice = input("\nenter your choice properly:")

    player_move(choice, turn)

def player_move(move, assign):
    # this function fills the entered numbers into used_places list
    # and replaces numbers in grid with user input
    used_places.append(move)
    grid[move] = assign

print("player 1 : 'X'")
print("player 2 : 'O'")

for i in range(0,10):               # loops 9 times to play the game
    if i % 2 == 0:                  # giving turns. if i is even, player 1 gets turn and odd, player 2
        grid_display()              # displaying complete grid
        turn = player_1             # to display whose turn it is; refer the function
        taking_turns(turn)
        if win_the_game() == True:  # if the called function returns true in this 'if'
            result = turn           # player 1 wins
            break
    else:
        grid_display()              # same code as above
        turn = player_2
        taking_turns(turn)

        if win_the_game() == True:
            result = turn
            break

print('\n\n',result, "won the game!!")     # printing result

标签: pythonpython-3.x

解决方案


而不是设置结果 = 无,设置结果 = 'Nobody'。

查看您的逻辑,您仅​​在有人获胜时才设置结果,这会将结果的默认设置留给任何人。

- 编辑 -

抱歉,我有点走神了,重写了你的游戏逻辑来证明我的解决方案。接受它或离开它,但它现在很好用,也许你可以用它作为一个例子来修复你自己的。

import os

# a dictionary to display the grid
grid = {
    '1':'1', '2':'2', '3':'3',
    '4':'4', '5':'5', '6':'6',
    '7':'7', '8':'8', '9':'9'
}
# a list to store the values that are available
places = ['1','2','3','4','5','6','7','8','9']

# to store result
result = 'Nobody'

# starting player
turn = 'O'

# display a game grid
def grid_display():
    os.system('cls' if os.name == 'nt' else 'clear')
    #this function displays the grid
    print
    print(grid['1'], '|', grid['2'], '|', grid['3'])
    print(''.rjust(25,'*'))
    print(grid['4'], '|', grid['5'], '|', grid['6'])
    print(''.rjust(25, '*'))
    print(grid['7'], '|', grid['8'], '|', grid['9'])

# check to see if anyone has won or are we out of moves
def win_the_game():
    # this function checks for result and returns true or false
    if(
        (grid['1'] == grid['2'] == grid['3']) or (grid['4'] == grid['5'] == grid['6']) or
        (grid['7'] == grid['8'] == grid['9']) or (grid['1'] == grid['4'] == grid['7']) or
        (grid['2'] == grid['5'] == grid['8']) or (grid['3'] == grid['6'] == grid['9']) or
        (grid['1'] == grid['5'] == grid['9']) or (grid['3'] == grid['5'] == grid['7'])
    ):
        return True

    # checks if there are any moves left
    elif not places:
        return False

    else:
        return False

# input / grid update function
def taking_turns():
    # this function asks user for input
    # use RAW_INPUT to make it a string
    print
    print map(str, places)
    choice = raw_input("\nEnter "+turn+"'s choice: ")

    if choice in places:
        # this removes the number from the available list
        # and replaces numbers in grid with user input
        places.remove(choice)
        grid[choice] = turn


# Logic loop
while places:
        grid_display()                      # always display the grid
        if turn == "O":                     # giving turns.
            turn = 'X'
            taking_turns()
            if win_the_game() == True:      # if the called function returns true in this 'if'
                result = turn               # player 1 wins
                grid_display()              # Winners GRID
                break
        else:
            turn = 'O'
            taking_turns()
            if win_the_game() == True:
                result = turn
                grid_display()              # Winners GRID
                break

# results
print
print(result, "won the game!!")             # printing result
print

推荐阅读