Python图形化双人骰子游戏Sentinel Loop启动及按钮检测问题求助
双人骰子游戏:触发游戏主循环的按钮点击检测方案
问题背景
开发了一款双人图形化骰子游戏,规则如下:
- 玩家可选择掷骰子(点数1-6)或跳过回合(每人限3次跳过)
- 累计掷骰点数先达21者落败,另一方获胜
- 使用
inbetween函数检测按钮点击(函数代码如下),该函数在其他程序可正常工作,但无法实现**检测两个不同按钮点击以触发进入游戏主循环(sentinel loop)**的逻辑
def inbetween(pt1, pt2, pt3): return (pt1.getX()<=pt2.getX()<=pt3.getX()) and (pt1.getY()<=pt2.getY()<=pt3.getY())
解决方案
核心思路是:通过状态变量跟踪两名玩家的就绪状态,在初始等待循环中持续检测按钮点击,当两名玩家都完成点击后,进入游戏主循环。
1. 定义按钮坐标区域
先为两个"玩家就绪"按钮(比如「玩家1就绪」「玩家2就绪」)定义左上角和右下角的坐标点:
# 示例坐标,根据你的UI布局调整 # 玩家1就绪按钮:左上角(100, 200),右下角(250, 250) player1_btn_top = Point(100, 200) player1_btn_bottom = Point(250, 250) # 玩家2就绪按钮:左上角(300, 200),右下角(450, 250) player2_btn_top = Point(300, 200) player2_btn_bottom = Point(450, 250)
2. 跟踪玩家就绪状态
用布尔变量记录两名玩家是否已完成点击:
player1_ready = False player2_ready = False
3. 等待玩家就绪的触发循环
在初始阶段运行此循环,监听鼠标点击并更新状态,直到两名玩家都就绪后进入游戏主循环:
# 等待玩家就绪的前置循环 while not (player1_ready and player2_ready): # 获取鼠标点击点(根据你的GUI库调整,比如Graphics库的win.getMouse()) click_pos = win.getMouse() # 检测玩家1按钮点击 if inbetween(player1_btn_top, click_pos, player1_btn_bottom) and not player1_ready: player1_ready = True # 可选:添加按钮点击后的视觉反馈,比如变色、显示文字 print("玩家1已准备完毕") # 检测玩家2按钮点击 if inbetween(player2_btn_top, click_pos, player2_btn_bottom) and not player2_ready: player2_ready = True print("玩家2已准备完毕") # 进入游戏主sentinel loop game_active = True current_player = 1 player1_score = 0 player2_score = 0 player1_skip_count = 3 player2_skip_count = 3 while game_active: # 处理当前玩家回合逻辑(掷骰子/跳过) # 示例:监听当前玩家的操作按钮点击 action_click = win.getMouse() # 检测掷骰子按钮点击... # 检测跳过按钮点击... # 游戏结束判断 if player1_score >= 21: print("玩家1点数达标,落败!玩家2获胜") game_active = False elif player2_score >= 21: print("玩家2点数达标,落败!玩家1获胜") game_active = False
关键注意点
- 确保鼠标点击获取逻辑与你的GUI库匹配(比如Tkinter需绑定
<Button-1>事件,Pygame用pygame.mouse.get_pressed()) inbetween函数的Point类需具备getX()和getY()方法,与你的坐标系统逻辑一致- 可在按钮点击后添加视觉反馈(如按钮变色、弹出提示),优化玩家体验
内容的提问来源于stack exchange,提问作者Danny Allen
相关产品推荐
相关产品推荐

