Python使用Pygame库实现五子棋游戏:包含落子音效与胜利提示功能

介绍

五子棋是一种古老而经典的策略游戏,通过在棋盘上落子,先在横、竖、斜方向上连成五子的一方获胜。本文将使用Python语言和Pygame库实现一个简单的五子棋游戏。

环境设置

  • Python 3.x
  • Pygame库
pip install pygame

项目结构

|- five_in_a_row_game.py   # 主游戏文件

代码编写

import pygame
import sys

# 初始化Pygame
pygame.init()

# 设置窗口尺寸
WIDTH, HEIGHT = 600, 600
WINDOW_SIZE = (WIDTH, HEIGHT)
screen = pygame.display.set_mode(WINDOW_SIZE)
pygame.display.set_caption("五子棋")

# 定义颜色
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
GRAY = (200, 200, 200)

# 绘制棋盘
def draw_board():
    for i in range(1, 16):
        pygame.draw.line(screen, BLACK, (40 * i, 40), (40 * i, 560), 2)
        pygame.draw.line(screen, BLACK, (40, 40 * i), (560, 40 * i), 2)
    pygame.draw.rect(screen, BLACK, (35, 35, 530, 530), 2)
    for i in range(3):
        for j in range(3):
            pygame.draw.circle(screen, BLACK, (160 + 200 * i, 160 + 200 * j), 5, 0)

# 主游戏循环
def main():
    running = True
    while running:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False

        screen.fill(WHITE)
        draw_board()
        pygame.display.update()

    pygame.quit()

if __name__ == "__main__":
    main()

详细解释

  • 导入Pygame库并初始化。
  • 设置窗口尺寸和标题。
  • 定义棋盘颜色和尺寸,并绘制棋盘网格和边框。
  • 编写主游戏循环,处理退出事件并绘制棋盘。

总结

通过这个简单的实现,我们成功地创建了一个基本的五子棋游戏框架,为后续功能的实现打下了基础。

扩展功能

  1. 添加落子功能,允许玩家和AI在棋盘上落子,并检测游戏胜负。
  2. 实现悔棋功能,允许玩家撤销上一步的落子。
  3. 设计美观的界面和游戏音效,提升用户体验。
import pygame
import sys

# 初始化Pygame
pygame.init()

# 设置窗口尺寸
WIDTH, HEIGHT = 600, 600
WINDOW_SIZE = (WIDTH, HEIGHT)
screen = pygame.display.set_mode(WINDOW_SIZE)
pygame.display.set_caption("五子棋")

# 定义颜色
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
GRAY = (200, 200, 200)
BLUE = (0, 0, 255)
RED = (255, 0, 0)

# 加载音效
pygame.mixer.init()
drop_sound = pygame.mixer.Sound("drop.wav")
win_sound = pygame.mixer.Sound("win.wav")

# 定义棋盘大小
ROWS = 15
COLS = 15
GRID_SIZE = WIDTH // COLS

# 初始化棋盘
board = [[0] * COLS for _ in range(ROWS)]

# 绘制棋盘
def draw_board():
    for i in range(1, ROWS):
        pygame.draw.line(screen, BLACK, (0, i * GRID_SIZE), (WIDTH, i * GRID_SIZE), 2)
    for j in range(1, COLS):
        pygame.draw.line(screen, BLACK, (j * GRID_SIZE, 0), (j * GRID_SIZE, HEIGHT), 2)

# 绘制棋子
def draw_pieces():
    for i in range(ROWS):
        for j in range(COLS):
            if board[i][j] == 1:
                pygame.draw.circle(screen, BLUE, (j * GRID_SIZE + GRID_SIZE // 2, i * GRID_SIZE + GRID_SIZE // 2), GRID_SIZE // 2 - 5)
            elif board[i][j] == 2:
                pygame.draw.circle(screen, RED, (j * GRID_SIZE + GRID_SIZE // 2, i * GRID_SIZE + GRID_SIZE // 2), GRID_SIZE // 2 - 5)

# 下棋
def drop_piece(row, col, player):
    board[row][col] = player
    drop_sound.play()

# 判断胜负
def check_win(player):
    # 检查横向
    for i in range(ROWS):
        for j in range(COLS - 4):
            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:
                win_sound.play()
                return True
    # 检查纵向
    for i in range(ROWS - 4):
        for j in range(COLS):
            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:
                win_sound.play()
                return True
    # 检查斜向(左上到右下)
    for i in range(ROWS - 4):
        for j in range(COLS - 4):
            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:
                win_sound.play()
                return True
    # 检查斜向(右上到左下)
    for i in range(4, ROWS):
        for j in range(COLS - 4):
            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:
                win_sound.play()
                return True
    return False

# 悔棋
def undo_move():
    for i in range(ROWS):
        for j in range(COLS):
            board[i][j] = 0

# 主游戏循环
def main():
    player = 1
    running = True
    while running:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False
                pygame.quit()
                sys.exit()

            if event.type == pygame.MOUSEBUTTONDOWN:
                mouseX = event.pos[0]
                mouseY = event.pos[1]
                clicked_row = mouseY // GRID_SIZE
                clicked_col = mouseX // GRID_SIZE

                if board[clicked_row][clicked_col] == 0:
                    drop_piece(clicked_row, clicked_col, player)
                    if check_win(player):
                        print("Player", player, "wins!")
                    player = 3 - player  # 切换玩家

                elif event.button == 3:  # 右键悔棋
                    undo_move()

        screen.fill(WHITE)
        draw_board()
        draw_pieces()
        pygame.display.update()

if __name__ == "__main__":
    main()

这段代码实现了基本的五子棋游戏功能,包括落子、胜负判断和悔棋功能以及添加了两种音效:落子音效和胜利音效。你只需要将drop.wavwin.wav替换成你喜欢的音效文件。界面方面,你可以进一步美化棋盘、棋子等元素。

### 回答1: 我可以给你一些思路,但实际编写代码还是需要你自己去实现五子棋的编程思路是:首先,定义棋盘,用二维数组表示;其次,定义落子函数,在棋盘上落子;然后,定义判断胜负函数,判断谁获胜。最后,定义主函数,在此函数中实现五子棋的交互,完成游戏的开始和结束等功能。 ### 回答2: 五子棋是一种简单又经典的策略棋类游戏使用Python编写一个五子棋代码可以提供给玩家一个与电脑对战的机会。以下是一个简单的五子棋代码示例: ```python import random # 创建棋盘 def create_board(): board = [[' ' for _ in range(15)] for _ in range(15)] return board # 打印棋盘 def print_board(board): for row in board: print(' | '.join(row)) print('-' * 59) # 玩家落子 def player_move(board, row, col): if board[row][col] != ' ': print('该位置已有落子,请重新选择!') return False else: board[row][col] = 'X' return True # 电脑落子 def computer_move(board): while True: row = random.randint(0, 14) col = random.randint(0, 14) if board[row][col] == ' ': board[row][col] = 'O' break # 判断是否胜利 def check_win(board, row, col): directions = [(1, 0), (0, 1), (-1, 1), (1, 1)] # 右、下、左上、右下 for direction in directions: count = 1 for d in range(1, 5): new_row = row + direction[0] * d new_col = col + direction[1] * d if new_row >= 0 and new_row < 15 and new_col >= 0 and new_col < 15 and board[new_row][new_col] == board[row][col]: count += 1 else: break if count == 5: return True return False # 游戏主函数 def game(): board = create_board() print_board(board) while True: print('请玩家(X)落子(行 列):') row, col = map(int, input().split()) if not player_move(board, row, col): continue if check_win(board, row, col): print('玩家(X)胜利!') break if ' ' not in [cell for row in board for cell in row]: print('平局!') break computer_move(board) print_board(board) if check_win(board, row, col): print('电脑(O)胜利!') break # 运行游戏 if __name__ == '__main__': game() ``` 这个代码实现了一个简单的五子棋游戏,玩家用X表示,电脑用O表示。通过输入行和列,玩家可以在棋盘上落子,电脑会随机选择一个可落子的位置进行落子游戏将持续进行直到有一方获胜或者平局。 ### 回答3: 五子棋是一种古老而经典的策略棋类游戏,现在我来介绍一下如何使用Python编写五子棋代码。 首先,我们需要创建一个游戏的棋盘。可以使用一个二维数组来表示棋盘,其中每个元素可以是空白、黑子或白子。 接下来,我们需要设置游戏的规则。五子棋的规则很简单,玩家轮流下棋,每位玩家只能在空白的格子上下子,当有连续五个相同颜色的棋子在横、竖、斜线上连接时,游戏结束,该玩家获胜。 在游戏中,我们需要实现两个关键的功能:下棋和判断胜负。 当玩家决定下子时,我们需要检查该位置是否为空,在二维数组中相应位置上放置玩家的棋子。 当每次下完子后,我们需要判断该玩家是否获胜。通过检查横、竖、斜线上是否存在五个相同颜色的棋子连成一线,可以判断胜负。具体实现方法是迭代遍历整个棋盘,通过判断相邻的五个棋子是否相同,来确定胜负。 除了判断胜负,我们还需要考虑平局的情况。当棋盘上所有格子都被下满且没有玩家获胜时,游戏以平局结束。 最后,我们可以添加一些界面交互来提升游戏体验,例如展示棋盘、显示当前玩家、显示获胜信息等。 通过以上步骤,我们可以完成一个简单的五子棋游戏代码。当然,你也可以根据个人的需求和想法来扩展和改进代码,使游戏更趋完善和丰富。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序熊.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值