华容道是一个经典的益智游戏,玩家需要移动棋子来让特定的棋子(通常是“曹操”)从一个位置移动到另一个位置。由于华容道游戏的规则可以有很多变种,我将提供一个简化版的华容道游戏的Python实现。在这个简化版中,我们将使用一个二维数组(或列表的列表)来表示棋盘,每个元素表示一个棋子或空格。玩家可以通过输入来移动棋子,直到达到目标状态。
下面是一个简单的华容道游戏实现:
python复制代码
import copy | |
# 定义棋子的符号 | |
EMPTY = ' ' | |
CAOCAO = 'C' | |
GENERAL = 'G' | |
SOLDIER = 'S' | |
WALL = '#' | |
# 初始化棋盘 | |
def init_board(): | |
return [ | |
[WALL, WALL, WALL, WALL, WALL], | |
[WALL, SOLDIER, SOLDIER, SOLDIER, WALL], | |
[WALL, SOLDIER, CAOCAO, SOLDIER, WALL], | |
[WALL, SOLDIER, GENERAL, SOLDIER, WALL], | |
[WALL, SOLDIER, SOLDIER, SOLDIER, WALL], | |
[WALL, WALL, WALL, WALL, WALL] | |
] | |
# 打印棋盘 | |
def print_board(board): | |
for row in board: | |
print(' '.join(row)) | |
print() | |
# 判断游戏是否胜利 | |
def is_win(board): | |
# 检查曹操是否在正确的位置 | |
for i in range(len(board)): | |
for j in range(len(board[0])): | |
if board[i][j] == CAOCAO and i == 2 and j == 3: | |
return True | |
return False | |
# 移动棋子 | |
def move(board, direction): | |
# 复制棋盘以避免修改原始棋盘 | |
new_board = copy.deepcopy(board) | |
x, y = find_caocao(new_board) | |
# 根据方向移动曹操 | |
if direction == 'w': # 上 | |
if y > 0 and new_board[x][y-1] == EMPTY: | |
new_board[x][y], new_board[x][y-1] = new_board[x][y-1], new_board[x][y] | |
elif direction == 's': # 下 | |
if y < len(new_board[0]) - 1 and new_board[x][y+1] == EMPTY: | |
new_board[x][y], new_board[x][y+1] = new_board[x][y+1], new_board[x][y] | |
elif direction == 'a': # 左 | |
if x > 0 and new_board[x-1][y] == EMPTY: | |
new_board[x][y], new_board[x-1][y] = new_board[x-1][y], new_board[x][y] | |
elif direction == 'd': # 右 | |
if x < len(new_board) - 1 and new_board[x+1][y] == EMPTY: | |
new_board[x][y], new_board[x+1][y] = new_board[x+1][y], new_board[x][y] | |
else: | |
print("Invalid direction!") | |
return board | |
return new_board | |
# 找到曹操的位置 | |
def find_caocao(board): | |
for i in range(len(board)): | |
for j in range(len(board[0])): | |
if board[i][j] == CAOCAO: | |
return i, j | |
return None, None | |
# 主游戏循环 | |
def main(): | |
board = init_board() | |
print_board(board) | |
while not is_win(board): | |
direction = input("Enter your move (w/a/s/d): ") | |
board = move(board, direction) | |
print_board(board) | |
print("Congratulations! You have solved the puzzle!") | |
# 运行游戏 | |
if __name__ == "__main__": | |
main() |
这个简化版的华容道游戏只允许玩家通过输入“w”(上)、“a”(左)、“s”(下)、“d”(右)来移动曹操。游戏会在曹操到达正确的位置时结束。你可以根据需要扩展这个基础版本,例如添加更多的棋子类型、不同的初始布局或更复杂的规则。