def move(list, wins_1, wins_2):
global turn
if turn % 2 == 0:
sign = "| x "
else:
sign = "| o "
y_1 = int(input("Type the value of y: "))
x_1 = int(input("Type the value of x: "))
if list[y_1 - 1][x_1 - 1] == "| x " or list[y_1 - 1][x_1 - 1] == "| o ":
print("The place is already filled by %s |" % list[y_1 - 1][x_1 - 1])
move(list, wins_1, wins_2)
else:
list[y_1 - 1][x_1 - 1] = sign
print_board(list) #
wins_1, wins_2 = check_winner(sign, wins_1, wins_2)
turn += 1
return wins_1, wins_2
ユーザーがリストの[x] [y]を入力し、すでにaxまたはo(それはティックタックトーゲーム)であれば、既に埋め込まれている ")、ユーザがxとyの別のセットを入力してx/oを入れるようにします。中に関数を呼び出す
私は、おそらく単に関数を呼び出してそれを繰り返してもいいと思っていました。それは正常に動作し、エラーは発生しませんでした。 何らかの理由で、何とか私のボード2を印刷しました(何度も、すでに塗りつぶされた場所に "x"と "y"を何回押したか)。
あなたが関数にいるときに関数を呼び出すと、何が起こるか説明できますか?そして、私のコードではどういうことが起こったのですか?
注:私のコードは非常に長く、これはほんの少しです。より多くのコードが必要な場合は、教えてください。
出力の例を次に示します。x/oをすでに塗りつぶした場所にボードを2回印刷したことに注意してください。
Type the name of player 1: 1
type the name of player 2: 1
____________________________________________________________
player_1: 1 X wins: 0
player_2: 1 O wins: 0
____________________________________________________________
Type the value of y: 1
Type the value of x: 1
-------------
| x | | |
-------------
| | | |
-------------
| | | |
-------------
____________________________________________________________
player_1: 1 X wins: 0
player_2: 1 O wins: 0
____________________________________________________________
Type the value of y: 1
Type the value of x: 1
The place is already filled by | x |
Type the value of y: 1
Type the value of x: 2
-------------
| x | o | |
-------------
| | | |
-------------
| | | |
-------------
-------------
| x | o | |
-------------
| | | |
-------------
| | | |
-------------
____________________________________________________________
player_1: 1 X wins: 0
player_2: 1 O wins: 0
____________________________________________________________
Type the value of y:
全体コード:
wins_1 = 0
wins_2 = 0
turn = 0
board = [
['| ', '| ', '| ', '| '],
['| ', '| ', '| ', '| '],
['| ', '| ', '| ', '| ']
]
def print_board(board_list):
for i in range(len(board_list)):
print(" -------------\n %s" % "".join(board_list[i])) # .join binder 2 items sammen.
print(" -------------")
player_1 = input("Type the name of player 1: ")
player_2 = input("type the name of player 2: ")
def game_info(player_1, player_2, wins_1, wins_2): # prints layout
print("_" * 60)
print("player_1: %s X wins: %s"
"\nplayer_2: %s O wins: %s"
% (str(player_1), str(wins_1), str(player_2), str(wins_2)))
print("_" * 60)
# ovenstående viser output af wins og navn
def print_winner(sign, wins_1, wins_2):
if sign == "| x ":
print("%s got 3 in a row, %s wins!" % (player_1, player_1))
wins_1 += 1
else:
print("%s got 3 in a row, %s wins!" % (player_2, player_2))
wins_2 += 1
return wins_1, wins_2
def check_winner(sign, wins_1, wins_2):
# check vertical: |
for x in range(0,3):
if board[0][x] == sign and board[1][x] == sign and board[2][x] == sign:
wins_1, wins_2 = print_winner(sign, wins_1, wins_2)
# check horizontal: -
for x in range(0, 3):
if board[x][0] == sign and board[x][1] == sign and board[x][2] == sign:
wins_1, wins_2 = print_winner(sign, wins_1, wins_2)
# check diagonal: \
if board[0][0] == sign and board[1][1] == sign and board[2][2] == sign:
wins_1, wins_2 = print_winner(sign, wins_1, wins_2)
elif board[0][2] == sign and board[1][1] == sign and board[2][0] == sign:
wins_1, wins_2 = print_winner(sign, wins_1, wins_2)
return wins_1, wins_2
def move(list, wins_1, wins_2):
global turn
if turn % 2 == 0:
sign = "| x "
else:
sign = "| o "
y_1 = int(input("Type the value of y: "))
x_1 = int(input("Type the value of x: "))
if list[y_1 - 1][x_1 - 1] == "| x " or list[y_1 - 1][x_1 - 1] == "| o ":
print("The place is already filled by %s |" % list[y_1 - 1][x_1 - 1])
move(list, wins_1, wins_2)
else:
list[y_1 - 1][x_1 - 1] = sign
print_board(list) #
wins_1, wins_2 = check_winner(sign, wins_1, wins_2)
turn += 1
return wins_1, wins_2
while True:
game_info(player_1, player_2, wins_1, wins_2)
wins_1, wins_2 = move(board, wins_1, wins_2) # move() sætter et 'tegn' og returner win1/win2
if wins_1 or wins_2 == 1:
break
print("*****************************************************\nGame Over. \n IT WORKED!")
intendationは疑わしいです
希望を印刷していない場合、プログラムがのみ印刷することができます
一度
printed
ので、それだけプリントと呼ばれる変数を追加しました。これは最後の 'move'メソッドですか?またはいくつかの他の方法?メソッドは、入力の問題があるときにそれ自身を呼び出すべきではありません。 –こんにちはSebastian、コード全体を含めてください。あなたがコピーして貼り付けることができればそれをあなたのためのコードフォーマットに変更します。そして、私はコード全体を見て、正しく実行することができます。 –
https://gist.github.com/sebastian3495/6c856c6d7f93f629f91496893c2b5cfb コード全体を見てください。 –