Python 实现简单飞行棋游戏:代码示例和解释
这篇文章展示了使用 Python 编写一个简单飞行棋游戏的示例代码。
游戏规则
简单飞行棋游戏规则如下:
- 每个玩家有 4 架飞机,从起点出发,通过掷骰子决定移动步数。
- 玩家的飞机可以停留在任何位置,但不能停留在障碍物上。
- 玩家的飞机可以通过起点多次,直到到达终点。
- 当玩家的所有飞机都到达终点时,游戏结束,该玩家获胜。
Python 代码实现
import random
# 定义棋盘大小和玩家飞机数量
BOARD_SIZE = 30
PLAYER_COUNT = 2
# 定义玩家飞机的起始位置
PLAYER_START_POSITIONS = {
0: [0, 0],
1: [0, BOARD_SIZE - 1],
2: [BOARD_SIZE - 1, 0],
3: [BOARD_SIZE - 1, BOARD_SIZE - 1]
}
# 定义棋盘格子类型
EMPTY = 0
START = 1
END = 2
OBSTACLE = 3
# 定义每个玩家的颜色和飞机
PLAYER_COLORS = ['red', 'blue', 'green', 'yellow']
PLAYER_PLANES = ['A', 'B', 'C', 'D']
# 定义飞行棋类
class FlightChess:
def __init__(self):
self.board = [[EMPTY for i in range(BOARD_SIZE)] for j in range(BOARD_SIZE)]
self.players = []
self.current_player = None
self.winner = None
# 初始化棋盘
def init_board(self):
# 设置起点和终点
self.board[0][0] = START
self.board[BOARD_SIZE - 1][BOARD_SIZE - 1] = END
# 随机放置障碍
for i in range(BOARD_SIZE // 3):
x = random.randint(0, BOARD_SIZE - 1)
y = random.randint(0, BOARD_SIZE - 1)
while self.board[x][y] != EMPTY:
x = random.randint(0, BOARD_SIZE - 1)
y = random.randint(0, BOARD_SIZE - 1)
self.board[x][y] = OBSTACLE
# 初始化玩家
def init_players(self):
for i in range(PLAYER_COUNT):
player = {
'color': PLAYER_COLORS[i],
'planes': {
'A': {'position': PLAYER_START_POSITIONS[i], 'finished': False},
'B': {'position': PLAYER_START_POSITIONS[i], 'finished': False},
'C': {'position': PLAYER_START_POSITIONS[i], 'finished': False},
'D': {'position': PLAYER_START_POSITIONS[i], 'finished': False}
}
}
self.players.append(player)
# 判断飞机是否可以移动
def can_move(self, plane, steps):
x, y = plane['position']
if plane['finished']:
return False
if self.board[x][y] == END:
return False
if steps == 6 and self.board[x][y] != START:
return False
if x == 0 and y == 0 and steps != 6:
return False
if x == BOARD_SIZE - 1 and y == BOARD_SIZE - 1 and steps != 6:
return False
if self.board[x][y] == OBSTACLE:
return False
return True
# 移动飞机
def move_plane(self, player, plane, steps):
if not self.can_move(plane, steps):
return
x, y = plane['position']
for i in range(steps):
if x == 0 and y == 0:
x += 1
elif x == BOARD_SIZE - 1 and y == BOARD_SIZE - 1:
x -= 1
elif y == BOARD_SIZE - 1:
x += 1
elif x % 2 == 0:
y += 1
elif y == 0:
x += 1
else:
y -= 1
if self.board[x][y] == OBSTACLE:
break
plane['position'] = [x, y]
if self.board[x][y] == END:
plane['finished'] = True
if all(plane['finished'] for plane in player['planes'].values()):
self.winner = player
# 判断是否结束游戏
def is_game_over(self):
return self.winner is not None
# 输出棋盘
def print_board(self):
for i in range(BOARD_SIZE):
row = ''
for j in range(BOARD_SIZE):
if self.board[i][j] == EMPTY:
row += '.'
elif self.board[i][j] == START:
row += 'S'
elif self.board[i][j] == END:
row += 'E'
elif self.board[i][j] == OBSTACLE:
row += 'X'
print(row)
# 输出玩家信息
def print_players(self):
for player in self.players:
print(player['color'])
for plane in player['planes'].values():
print(' ', PLAYER_PLANES.index(plane['position']), plane['position'], plane['finished'])
# 运行游戏
def run(self):
self.init_board()
self.init_players()
self.current_player = 0
while not self.is_game_over():
player = self.players[self.current_player]
print('Player', player['color'], 'turn')
for plane in player['planes'].values():
print(' ', PLAYER_PLANES.index(plane['position']), plane['position'], plane['finished'])
dice = random.randint(1, 6)
print('Roll dice:', dice)
for plane in player['planes'].values():
self.move_plane(player, plane, dice)
self.current_player = (self.current_player + 1) % PLAYER_COUNT
self.print_board()
self.print_players()
print('Winner:', self.winner['color'])
if __name__ == '__main__':
game = FlightChess()
game.run()
代码解释
BOARD_SIZE和PLAYER_COUNT: 定义了棋盘的大小和玩家数量。PLAYER_START_POSITIONS: 定义了每个玩家的飞机的起始位置。EMPTY,START,END,OBSTACLE: 定义了棋盘格子的类型。PLAYER_COLORS和PLAYER_PLANES: 定义了玩家的颜色和飞机名称。FlightChess类: 实现了飞行棋游戏的主要逻辑。__init__(): 初始化游戏,包括棋盘、玩家、当前玩家和获胜者。init_board(): 初始化棋盘,包括设置起点、终点和随机放置障碍物。init_players(): 初始化玩家,包括设置玩家颜色和飞机信息。can_move(): 判断飞机是否可以移动。move_plane(): 移动飞机。is_game_over(): 判断游戏是否结束。print_board(): 输出棋盘。print_players(): 输出玩家信息。run(): 运行游戏。
if __name__ == '__main__':: 运行游戏。
进一步改进
- 可以使用图形界面库 (如 Tkinter 或 Pygame) 来创建更直观的图形界面。
- 可以添加更多游戏规则,例如特殊格子、道具等等。
- 可以使用多线程或协程来提高游戏的效率。
这个简单的飞行棋游戏示例可以帮助您了解如何使用 Python 编写简单的游戏。您可以根据自己的需求进行修改和扩展,创建更复杂、更有趣的游戏。
原文地址: https://www.cveoy.top/t/topic/n71l 著作权归作者所有。请勿转载和采集!