You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Pygame实现掷骰子后玩家1按点数前进功能需求及初始代码

实现Pygame掷骰子与玩家步数前进功能

核心实现步骤

  • 玩家状态管理:维护玩家当前所在的方格编号,初始值设为1
  • 掷骰子逻辑:利用random.randint(1,6)生成1-6的随机点数,通过键盘事件(如空格键)触发
  • 位置更新:根据骰子点数更新玩家位置,限制最大位置为总方格数(7×6=42)
  • 玩家标记绘制:根据玩家当前位置计算对应方格的坐标,绘制醒目标记(如红色圆圈)

完整修改后的代码

import pygame
import random 

w_in_squares = 7
h_in_squares = 6
square_dim   = 50
total_squares = w_in_squares * h_in_squares  # 总方格数

blue  = (47,134,150)
white = (255, 255, 255)
black = (0,0,0)
red   = (255,0,0)

# 玩家状态:当前所在方格编号
player1_pos = 1

def Draw_Checker_Board( window, number_font ):
    #7x6棋盘绘制
    number = 1
    current_colour = white

    for i in range(0, h_in_squares):
        tl_corner_y = i * square_dim     # 方格左上角Y坐标
        for j in range(0, w_in_squares):
            # 交替切换方格颜色
            current_colour = black if current_colour == white else white
            tl_corner_x = j * square_dim  # 方格左上角X坐标

            rectangle = ( tl_corner_x, tl_corner_y, square_dim, square_dim)
            pygame.draw.rect( window, current_colour, rectangle )
            
            # 绘制方格编号
            number_bitmap = number_font.render( str(number), True, blue )
            margin = 10
            window.blit( number_bitmap, ( tl_corner_x + margin, tl_corner_y + margin ) )
            number += 1

def draw_player(window, player_pos):
    # 根据玩家位置计算对应方格的坐标
    # 转换为网格索引:(pos-1) 是0开始的索引
    idx = player_pos - 1
    row = idx // w_in_squares
    col = idx % w_in_squares
    # 计算方格中心坐标
    center_x = col * square_dim + square_dim // 2
    center_y = row * square_dim + square_dim // 2
    # 绘制红色圆圈作为玩家标记
    pygame.draw.circle(window, red, (center_x, center_y), square_dim//3)

def main():
    pygame.init()
    window = pygame.display.set_mode( (w_in_squares*square_dim, h_in_squares*square_dim) )
    pygame.display.set_caption("掷骰子前进游戏")
    number_font = pygame.font.SysFont(None, 30)
    clock = pygame.time.Clock()

    global player1_pos

    running = True
    while running:
        window.fill(blue)
        Draw_Checker_Board(window, number_font)
        draw_player(window, player1_pos)

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False
            # 按空格键触发掷骰子
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_SPACE:
                    dice_roll = random.randint(1,6)
                    print(f"掷出点数:{dice_roll}")
                    # 更新玩家位置,不超过总方格数
                    player1_pos = min(player1_pos + dice_roll, total_squares)
                    print(f"玩家1当前位置:{player1_pos}")

        pygame.display.update()
        clock.tick(60)
    
    pygame.quit()

if __name__ == "__main__":
    main()

代码说明

  1. 玩家状态:用全局变量player1_pos记录当前位置,初始为1
  2. 掷骰子触发:监听空格键按下事件,调用random.randint(1,6)生成点数,同时更新玩家位置并做边界检查
  3. 玩家绘制:draw_player函数将方格编号转换为网格行列索引,计算方格中心后绘制红色圆圈,确保标记在方格中央
  4. 主循环:整合事件处理、棋盘绘制、玩家绘制,保证画面实时更新

内容的提问来源于stack exchange,提问作者azhua123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 17:20:48