华容道是一个经典的益智游戏,玩家需要移动棋子来让特定的棋子(通常是“曹操”)从一个位置移动到另一个位置。由于华容道游戏的规则可以有很多变种,我将提供一个简化版的华容道游戏的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”(右)来移动曹操。游戏会在曹操到达正确的位置时结束。你可以根据需要扩展这个基础版本,例如添加更多的棋子类型、不同的初始布局或更复杂的规则。