这篇文章展示了使用 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_SIZEPLAYER_COUNT: 定义了棋盘的大小和玩家数量。
  • PLAYER_START_POSITIONS: 定义了每个玩家的飞机的起始位置。
  • EMPTY, START, END, OBSTACLE: 定义了棋盘格子的类型。
  • PLAYER_COLORSPLAYER_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 编写简单的游戏。您可以根据自己的需求进行修改和扩展,创建更复杂、更有趣的游戏。

Python 实现简单飞行棋游戏:代码示例和解释

原文地址: https://www.cveoy.top/t/topic/n71l 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录