基于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()
代码说明
- 玩家状态:用全局变量
player1_pos记录当前位置,初始为1 - 掷骰子触发:监听空格键按下事件,调用
random.randint(1,6)生成点数,同时更新玩家位置并做边界检查 - 玩家绘制:
draw_player函数将方格编号转换为网格行列索引,计算方格中心后绘制红色圆圈,确保标记在方格中央 - 主循环:整合事件处理、棋盘绘制、玩家绘制,保证画面实时更新
内容的提问来源于stack exchange,提问作者azhua123
相关产品推荐
相关产品推荐

