ich habe ein kleines Problem in meinem Tic Tac Toe, und zwar funktioniert der Zug des Computers nicht(Funktion: computer_move). Ich möchte aber schon, dass der Computerzug erstmal random ist. Die " richtige KI" möchte ich auch selber coden . Was habe ich falsch gemacht?
Vielen Dank für Antworten.
Code: Alles auswählen
import random
def draw_board(board):
#Gibt das Spielfeld mit eingesetzten Zeichen wider
print(" | | ")
print(" " + board[7] + " | " + board[8] + " | " + board[9])
print(" | | ")
print("------------")
print(" | | ")
print(" " + board[4] + " | " + board[5] + " | " + board[6])
print(" | | ")
print("------------")
print(" | | ")
print(" " + board[1] + " | " + board[2] + " | " + board[3])
print(" | | ")
def player_move(board, sign):
#Lässt den Spieler/die Spieler den Zug bestimmen
while True:
try: #Idiotensicher
field = int(input("Auf welchem Feld möchtest du {} platzieren? (Zahl von 1 - 9)".format(sign)))
if field < 1 or field > 9:
print("Gib Zahl von 1 -9 ein.")
elif board[field] != " ":
print("Das Feld ist schon belegt, nimm ein anderes Feld!")
else:
break
except ValueError:
player_move(board,sign)
board[field] = sign
draw_board(board)
def main_player(turn):
#Leitet den Spieler richtig zur player_move Funktion
if turn == 1:
player_move(board, "X")
elif turn == -1:
player_move(board, "O")
def main_computer(turn):
#Leitet den Computer richtig zur computer_move Funktion
if turn == 1:
computer_move(board, "X")
elif turn == -1:
computer_move(board, "O")
def is_winner(bo, le):
#Checkt, ob jemand gewonnen hat
if le == 1:
le = "X"
elif le == -1:
le = "O"
return ((bo[1] == le and bo[2] == le and bo[3] == le) or
(bo[4] == le and bo[5] == le and bo[6] == le) or
(bo[7] == le and bo[8] == le and bo[9] == le) or
(bo[1] == le and bo[4] == le and bo[7] == le) or
(bo[2] == le and bo[5] == le and bo[8] == le) or
(bo[3] == le and bo[6] == le and bo[9] == le) or
(bo[1] == le and bo[5] == le and bo[9] == le) or
(bo[3] == le and bo[5] == le and bo[7] == le))
def play_again():
#Fragt nach, ob nochmal gespielt werden soll
print("Möchtest du nochmal spielen?(ja oder nein)")
return input().lower().startswith("j" or "J")
def is_free(board, move):
#Vielleicht unnötig??????????????????
return board[move]==[" "]
def computer_move(board, letter):
#Lässt den Computer seinen Zug bestimmen. Diese Funktion meinte ich in der Frage!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
print("Der Computer ist dran:")
move = 1
while board[move] != [" "]:
move = random.randint(1,9)
else:
board[move] = letter
draw_board(board)
sign = "O" and "X"
print("WIllkomen bei Tic Tac Toe!")
while True:
counter = 0
move = 1
mode = 0 #Hier wird alles resettet
board = [" "] * 10
gameIsPlaying = True
while mode != "PvP" and mode != "PvE" and mode != "EvE":
mode = input("Möchtest du PvP, PvE oder EvE spielen?")
if mode == "PvP":
#ES wird Spieler gegen Spieler gespielt
while gameIsPlaying:
if move == 1 or move == -1:
main_player(move)
counter = counter+1
if is_winner(board, move):
if move == 1:
move = "X"
elif move == -1:
move = "O"
print("Super, Spieler {} hat gewonnen!".format(move))
gameIsPlaying = False
elif counter == 9:
print("Unentschieden!")
gameIsPlaying = False
move = move * -1
if not play_again():
break
elif mode == "PvE":
#Es wird Spieler gegen Computer gespielt
while gameIsPlaying:
if move == 1:
main_player(1)
move = -1
counter = counter + 1
if is_winner(board, "X"):
print("Super, du hast gewonnen!")
gameIsPlaying = False
elif counter == 9:
print("Unentschieden")
gameIsPlaying = False
elif move == -1:
computer_move(board)
move = 1
counter = counter + 1
if is_winner(board, "O"):
print("Schade, der Computer gewinnt!")
gameIsPlaying = False
elif counter == 9:
print("Unentschieden")
gameIsPlaying = False
if not play_again():
break
elif mode == "EvE":
#ES wird Computer gegen Computer gespielt
while gameIsPlaying:
if move == 1 or move == -1:
main_computer(move)
counter = counter + 1
if is_winner(board, move):
if move == 1:
move = "X"
elif move == -1:
move = "O"
print("Computer {} hat gewonnen!".format(move))
gameIsPlaying = False
elif counter == 9:
print("Unentschieden!")
gameIsPlaying = False
move = move * -1
if not play_again():
break