Как исправить пока L oop для Ti c -Ta c -Toe Game на Python? - PullRequest
1 голос
/ 26 мая 2020
def display_board(board):
    print(board[7]+"|"+board[8]+"|"+board[9])
    print("-|-|-")
    print(board[4]+"|"+board[5]+"|"+board[6])
    print("-|-|-")
    print(board[1]+"|"+board[2]+"|"+board[3])
    print("-|-|-")   

testing_board=[" "]*10
display_board(testing_board)

def player_input():
    marker=" "
    while marker !="x" or marker !="o":
        marker= input("player1 choose x,o: ")

        if marker=="o":
            return ("o","x")
        else:
            return ("x","o")
        break

player_input()

import random

def first_move():
    if random.randint(0,1)==1:
        return "player 2"
    else:
        return "player 1"

def handle_turn(board,marker,position):
    position=input("select a position from 1-9: ")
    position=int(position)
    board[position]=marker

handle_turn(testing_board,"x",8)
display_board(testing_board)

def check_win(board, mark):
    return ((board[7]==mark and board[8]==mark and board[9]==mark)or
    (board[4]==mark and board[5]==mark and board[6]==mark)or
    (board[1]==mark and board[2]==mark and board[3]==mark)or
    (board[7]==mark and board[4]==mark and board[1]==mark)or
    (board[8]==mark and board[5]==mark and board[2]==mark)or
    (board[9]==mark and board[6]==mark and board[3]==mark)or
    (board[7]==mark and board[5]==mark and board[3]==mark)or
    (board[9]==mark and board[5]==mark and board[1]==mark))

check_win(testing_board,"x")

def space_free(board,position):
    return board[position]==" "

def fullboardcheck(board):
    for i in range(1,10):
        if space_free(board, i):
            return False
    return True

def player_choice(board):
    position = 0

    while position not in [1,2,3,4,5,6,7,8,9] or not space_free(board,position):
        return position

#game start
#board,marker,first player to go
while True:
    theBoard = [' '] * 10
    player1_marker, player2_marker = player_input()
    turn = first_move()
    print (turn + " will go first")

   #game play 
    play_game = input('Are you ready to play? Enter Yes or No.')

    if play_game == "Yes":
        game_is_on = True
    else:
        game_is_on = False

    while game_is_on:
        #player1 turn
        if turn=="player 1":
            display_board(theBoard)
            position=player_choice(theBoard)
            handle_turn(theBoard,player1_marker,position)

            if check_win(theBoard,player1_marker):
                display_board(theBoard)
                print('Congratulations! You have won the game!')
                game_is_on=False
            else:
                if fullboardcheck(theBoard):
                    display_board(theBoard)
                    print('The game is a draw!')
                else:
                    turn = 'player 2'

        else:
            display_board(theBoard)
            position = player_choice(theBoard)
            handle_turn(theBoard, player2_marker, position)

            if check_win(theBoard, player2_marker):
                display_board(theBoard)
                print('player 2 has won!')
                game_is_on=False

            else:
                if fullboardcheck(theBoard):
                    display_board(theBoard)
                    print('The game is a draw!')
                else:
                    turn = 'player 1'

Я пытаюсь создать игру ti c -ta c -toe на Python. Выше приведен код, который я написал до сих пор, и я застрял в следующих точках.

  1. Первый ход игрока 1 не регистрируется
  2. Первый ход игрока 2 объявляется он сразу же станет победителем без дальнейших ходов со стороны любого из игроков.
  3. У меня пока l oop не работает, чтобы проверить, все ли позиции заполнены или нет.

Я новичок в Python, прошу совета, где я ошибаюсь.

1 Ответ

0 голосов
/ 26 мая 2020

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

def display_board(board):
    print(board[7]+"|"+board[8]+"|"+board[9])
    print("-|-|-")
    print(board[4]+"|"+board[5]+"|"+board[6])
    print("-|-|-")
    print(board[1]+"|"+board[2]+"|"+board[3])
    print("-|-|-")

testing_board=[" "]*10
display_board(testing_board)

def player_input():
    marker=" "
    while marker !="x" or marker !="o":
        marker= input("player1 choose x,o: ")

        if marker=="o":
            return ("o","x")
        else:
            return ("x","o")

player_input()

import random

def first_move():
    if random.randint(0,1)==0:
        return "player 2"
    else:
        return "player 1"

def handle_turn(board,marker,position):
    #print("Handling turn")
    position=position #error in this line, you were requesting position again even though you passed it as a parameter. Instead of an input just store the value passed from player_choice.
    position=int(position)
    board[position]=marker
    #print(board[position])
#handle_turn(testing_board,"x"," ")
#display_board(testing_board)

def check_win(board, mark):
    return ((board[7]==mark and board[8]==mark and board[9]==mark)or #error in this line, changed commas to and
    (board[4]==mark and board[5]==mark and board[6]==mark)or
    (board[1]==mark and board[2]==mark and board[3]==mark)or
    (board[7]==mark and board[4]==mark and board[1]==mark)or
    (board[8]==mark and board[5]==mark and board[2]==mark)or
    (board[9]==mark and board[6]==mark and board[3]==mark)or
    (board[7]==mark and board[5]==mark and board[3]==mark)or
    (board[9]==mark and board[5]==mark and board[1]==mark))

check_win(testing_board,"x")

def space_free(board,position):
    return board[position]==" "

def fullboardcheck(board):
    for i in range(1,10):
        if space_free(board, i):
            return False
    return True

def player_choice(board):
    position = 0
    #print("player_choice func")
    while position not in [1,2,3,4,5,6,7,8,9] or not space_free(board, position):
        position = int(input('Choose your next position: (1-9) '))

    return position

#game start
#board,marker,first player to go
while True:
    theBoard = [' '] * 10
    player1_marker, player2_marker = player_input()
    turn = first_move()
    print (turn + " will go first")

   #game play 
    play_game = input('Are you ready to play? Enter Yes or No.')

    if play_game == "Yes":
        game_is_on = True
    else:
        game_is_on = False

    while game_is_on:
        #print(turn)
        #print("Player 1:" + player1_marker)
        #print("Player 2:" + player2_marker)
        if turn=="player 1": #typo in this line, you needed a space after player and before 1
            #print("yes")
            display_board(theBoard)
            position=player_choice(theBoard)
            handle_turn(theBoard,player1_marker,position)
            #print(check_win(theBoard,player1_marker))
            if check_win(theBoard,player1_marker):
                display_board(theBoard)
                print('Congratulations! You have won the game!')
                game_is_on=False
            else:
                if fullboardcheck(theBoard):
                    display_board(theBoard)
                    print('The game is a draw!')
                else:
                    turn = 'player 2' #typo in this line, player needed to be lowercase

        else:
            display_board(theBoard)
            position = player_choice(theBoard)
            handle_turn(theBoard, player2_marker, position)

            if check_win(theBoard, player2_marker):
                display_board(theBoard)
                print('Player 2 has won!')
                game_is_on=False

            else:
                if fullboardcheck(theBoard):
                    display_board(theBoard)
                    print('The game is a draw!')
                else:
                    turn = 'player 1' #typo in this line, player needed to be lowercase

Для решения проблем OP в комментариях:

player1 choose x,o: x
player 2 will go first
Are you ready to play? Enter Yes or No.Yes
 | | 
-|-|-
 | | 
-|-|-
 | | 
-|-|-
Choose your next position: (1-9) 1
 | | 
-|-|-
 | | 
-|-|-
o| | 
-|-|-
Choose your next position: (1-9) 1
Choose your next position: (1-9) 1
Choose your next position: (1-9) 1
Choose your next position: (1-9) 2
 | | 
-|-|-
 | | 
-|-|-
o|x| 
-|-|-
Choose your next position: (1-9) 1
Choose your next position: (1-9) 1
Choose your next position: (1-9) 1
Choose your next position: (1-9) 5
 | | 
-|-|-
 |o| 
-|-|-
o|x| 
-|-|-
Choose your next position: (1-9) 3
 | | 
-|-|-
 |o| 
-|-|-
o|x|x
-|-|-
Choose your next position: (1-9) 3
Choose your next position: (1-9) 2
Choose your next position: (1-9) 1
...