上述代码中添加过程回放功能
时间: 2024-03-23 08:38:18 浏览: 20
好的,以下是添加过程回放功能的五子棋小游戏代码:
```python
import numpy as np
import time
def create_board():
board = np.zeros((15,15))
return board
def is_valid_move(board, row, col):
if board[row][col] == 0:
return True
else:
return False
def play_move(board, row, col, player):
board[row][col] = player
def has_won(board, player):
# Check horizontally
for i in range(15):
for j in range(11):
if board[i][j] == player and board[i][j+1] == player and board[i][j+2] == player and board[i][j+3] == player and board[i][j+4] == player:
return True
# Check vertically
for i in range(11):
for j in range(15):
if board[i][j] == player and board[i+1][j] == player and board[i+2][j] == player and board[i+3][j] == player and board[i+4][j] == player:
return True
# Check diagonally
for i in range(11):
for j in range(11):
if board[i][j] == player and board[i+1][j+1] == player and board[i+2][j+2] == player and board[i+3][j+3] == player and board[i+4][j+4] == player:
return True
# Check reverse diagonally
for i in range(11):
for j in range(4, 15):
if board[i][j] == player and board[i+1][j-1] == player and board[i+2][j-2] == player and board[i+3][j-3] == player and board[i+4][j-4] == player:
return True
return False
def is_full(board):
if np.count_nonzero(board) == 15*15:
return True
else:
return False
def print_board(board):
print(" ", end="")
for i in range(15):
print(chr(i+65), end=" ")
print("")
for i in range(15):
print("{:2d}".format(i+1), end=" ")
for j in range(15):
if board[i][j] == 0:
print(".", end=" ")
elif board[i][j] == 1:
print("X", end=" ")
else:
print("O", end=" ")
print("")
def game_replay(moves):
board = create_board()
print("Replaying the game...")
time.sleep(1)
for move in moves:
player, row, col = move.split(",")
row = int(row)
col = ord(col.upper()) - 65
print(f"Player {player} ({'X' if int(player) == 1 else 'O'}) played at ({row}, {chr(col+65)})")
play_move(board, row, col, int(player))
print_board(board)
time.sleep(1)
print("Welcome to Five in a Row!")
board = create_board()
current_player = 1
moves = []
while True:
print_board(board)
if current_player == 1:
move = input("Player 1 (X), enter your move (row, col): ")
else:
move = input("Player 2 (O), enter your move (row, col): ")
row, col = move.split(",")
row = int(row) - 1
col = ord(col.upper()) - 65
if is_valid_move(board, row, col):
play_move(board, row, col, current_player)
moves.append(f"{current_player},{row},{chr(col+65)}")
if has_won(board, current_player):
print_board(board)
print("Player", current_player, "has won!")
game_replay(moves)
break
elif is_full(board):
print_board(board)
print("Game over! It's a tie.")
game_replay(moves)
break
else:
current_player = 3 - current_player
else:
print("Invalid move. Try again.")
```
在这个版本的代码中,我们添加了一个名为 `game_replay` 的函数,用于回放游戏过程。在每次下棋时,程序会将当前玩家、棋子的行和列封装成一个字符串,并将其添加到 `moves` 列表中。如果一方玩家成功连成五个棋子或者棋盘已经满了,游戏结束,程序会调用 `game_replay` 函数,将 `moves` 列表中的内容输出,以回放游戏过程。
在游戏过程中,如果输入的行和列不合法,程序会输出 "Invalid move. Try again." 的提示,并要求玩家重新输入。如果输入的行和列合法,程序会将棋子添加到棋盘上,并判断是否有任何一方玩家成功连成五个棋子或者棋盘已经满了。如果游戏还没有结束,程序会将当前玩家切换为另一方,并等待下一次输入。