簡體   English   中英

Python 中的井字游戲

[英]Tic Tac Toe in Python

到目前為止,我的井字游戲可以正常工作,但是在有人獲勝(或游戲以平局結束)后,我無法讓它停止。 誰能給我一個提示我做錯了什么? 它總是開始提示玩家 1 選擇一個字段:

這是我的代碼(開始我調用的游戲 intro() ):

def print_board(spot_lst):

print("\t|\t|\n  ",spot_lst[1],"   |  ",spot_lst[2],"  |  ",spot_lst[3],"\n\t|\t|\n------------------------\
     \n\t|\t|\n  ",spot_lst[4],"   |  ",spot_lst[5],"  |  ",spot_lst[6],"  \n\t|\t|\n------------------------\
     \n\t|\t|\n  ",spot_lst[7],"   |  ",spot_lst[8],"  |  ",spot_lst[9],"  \n\t|\t|")

if len(chosen_nums)%2 == 0:
    plyr1_input()

else:
    plyr2_input()

def plyr1_input():

while True:
    
    player_1_input = input(print("Player 1 please choose 1 available field: "))
    
    if (player_1_input in acceptable_nums) and (player_1_input not in chosen_nums) and (player_1_input != "0"):
            
            chosen_nums.append(player_1_input)
            
            acceptable_nums[int(player_1_input)] = player_1
            
            check_win_plyr1()
    
    else:
            if (player_1_input not in acceptable_nums) or (player_1_input == "0"):
                
                print("Field Out of Bounds! Choose again.")
            
            elif player_1_input in chosen_nums:
                
                print("Field already occupied. Choose another field.")

def check_win_plyr1():

if len(chosen_nums) == 9:
    
    print("The game ends with a draw. Thanks for playing!")
    
    someone_won = True
    
    play_again()
    
elif (acceptable_nums[1] == acceptable_nums[2] == acceptable_nums[3]) or (acceptable_nums[4] == acceptable_nums[5] == acceptable_nums[6]) or (acceptable_nums[7] == acceptable_nums[8] == acceptable_nums[9]) or (acceptable_nums[1] == acceptable_nums[4] == acceptable_nums[7]) or (acceptable_nums[2] == acceptable_nums[5] == acceptable_nums[8]) or (acceptable_nums[3] == acceptable_nums[6] == acceptable_nums[9]) or (acceptable_nums[1] == acceptable_nums[5] == acceptable_nums[9]) or (acceptable_nums[3] == acceptable_nums[5] == acceptable_nums[7]):
    
    print("Congrats Player 1! You've won the game!")
    
    print("\t|\t|\n  ",acceptable_nums[1],"   |  ",acceptable_nums[2],"  |  ",acceptable_nums[3],"\n\t|\t|\n------------------------\
     \n\t|\t|\n  ",acceptable_nums[4],"   |  ",acceptable_nums[5],"  |  ",acceptable_nums[6],"  \n\t|\t|\n------------------------\
     \n\t|\t|\n  ",acceptable_nums[7],"   |  ",acceptable_nums[8],"  |  ",acceptable_nums[9],"  \n\t|\t|")
    
    someone_won = True
    
    play_again()
    
else:
    
    print_board(acceptable_nums)                    
                       

def plyr2_input():

while True:

    player_2_input = input(print("Player 2 please choose 1 available field: "))
    
    if (player_2_input in acceptable_nums) and (player_2_input not in chosen_nums) and (player_2_input != "0"):
        
        chosen_nums.append(player_2_input)
        
        acceptable_nums[int(player_2_input)] = player_2
        
        check_win_plyr2()
    
    else:
        
        if (player_2_input not in acceptable_nums) or (player_2_input == "0"):
            
            print("Field Out of Bounds! Choose again.")
        
        elif player_2_input in chosen_nums:
            
            print("Field already occupied. Choose another field.")

def check_win_plyr2():

if (acceptable_nums[1] == acceptable_nums[2] == acceptable_nums[3]) or (acceptable_nums[4] == acceptable_nums[5] == acceptable_nums[6]) or (acceptable_nums[7] == acceptable_nums[8] == acceptable_nums[9]) or (acceptable_nums[1] == acceptable_nums[4] == acceptable_nums[7]) or (acceptable_nums[2] == acceptable_nums[5] == acceptable_nums[8]) or (acceptable_nums[3] == acceptable_nums[6] == acceptable_nums[9]) or (acceptable_nums[1] == acceptable_nums[5] == acceptable_nums[9]) or (acceptable_nums[3] == acceptable_nums[5] == acceptable_nums[7]):
           
    print("Congrats Player 2! You've won the game!")
    
    print("\t|\t|\n  ",acceptable_nums[1],"   |  ",acceptable_nums[2],"  |  ",acceptable_nums[3],"\n\t|\t|\n------------------------\
     \n\t|\t|\n  ",acceptable_nums[4],"   |  ",acceptable_nums[5],"  |  ",acceptable_nums[6],"  \n\t|\t|\n------------------------\
     \n\t|\t|\n  ",acceptable_nums[7],"   |  ",acceptable_nums[8],"  |  ",acceptable_nums[9],"  \n\t|\t|")
    
    someone_won = True
    
    play_again()
    
else:
    
    print_board(acceptable_nums)

定義介紹():

global acceptable_nums 
acceptable_nums = ["0","1","2","3","4","5","6","7","8","9"]

global chosen_nums
chosen_nums = []

global someone_won
someone_won = False

start_game()

定義開始游戲():

global player_1
player_1 = "empty"

global player_2
player_2 = "empty"

global repeat
repeat = "empty"

while someone_won == False:
    
    while player_1 not in ["X", "O"]:
    
        player_1 = input("Welcome to Tic Tac Toe. Please choose your player: X or O ")
    
        if player_1 not in ["X","O"]:
            
            print("Invalid choice. Please try again.")
        
        elif player_1 == "X":
            
            player_2 = "O"
            
            print(f"Player 1 is '{player_1}' and Player 2 is '{player_2}'")
            
            print_board(acceptable_nums)
            
        else:
            
            player_2 = "X"
            
            print(f"Player 1 is '{player_1}' and Player 2 is '{player_2}'")
            
            print_board(acceptable_nums)

def play_again():

while someone_won == True:
    
    if repeat not in ["Y","N"]:
        
        repeat = input("Do you want to play again? Insert Y or N: ")
        
    elif repeat == "N":
        
        print("Thanks for playing! Have a good day!")
        
        break
    
    else:
        intro()

while 循環中沒有“break”關鍵字,您必須在需要時停止,使用 break 關鍵字。

while True:

player_1_input = input(print("Player 1 please choose 1 available field: "))

if (player_1_input in acceptable_nums) and (player_1_input not in chosen_nums) and (player_1_input != "0"):
        
        chosen_nums.append(player_1_input)
        
        acceptable_nums[int(player_1_input)] = player_1
        
        check_win_plyr1()
        
        break;  #May be this break can keep the game going

else:
        if (player_1_input not in acceptable_nums) or (player_1_input == "0"):
            
            print("Field Out of Bounds! Choose again.")
        
        elif player_1_input in chosen_nums:
            
            print("Field already occupied. Choose another field.")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM