Pygame中如何存储用户输入赌注金额?解决int()转换空字符串报错
解决Pygame中用户赌注输入无法识别为变量的问题
嘿,我来帮你搞定这个问题!你遇到的invalid literal for int() with base 10: ''报错,本质是因为你一开始把空字符串amount直接转成整数了——空字符串当然没法转成int啦。而且Pygame没有像普通Python程序那样的input()函数直接获取用户输入,得通过处理键盘事件来一步步收集用户输入的字符。
下面是具体的解决步骤和示例代码:
核心思路
- 用一个字符串变量存储用户输入的每一个字符(比如
amount_input); - 在游戏循环里监听键盘事件,收集数字、处理退格、确认输入;
- 确认输入时先校验内容是否为有效数字,再转成整数计算余额;
- 在屏幕上渲染输入内容,让用户能看到自己输入的是什么。
完整示例代码
import pygame pygame.init() # 初始化游戏窗口和字体 screen = pygame.display.set_mode((400, 300)) font = pygame.font.Font(None, 36) # 钱包和输入相关变量 money = 50 amount_input = "" # 存储用户输入的字符 input_active = True # 标记是否允许输入(可改成点击激活) new_balance = money # 初始化新余额为当前余额 running = True while running: screen.fill((255, 255, 255)) # 清屏 # 处理所有事件 for event in pygame.event.get(): if event.type == pygame.QUIT: running = False # 只在输入激活时处理键盘输入 if event.type == pygame.KEYDOWN and input_active: # 处理数字键输入 if event.key in range(pygame.K_0, pygame.K_9 + 1): amount_input += event.unicode # 处理退格键,删除最后一个字符 elif event.key == pygame.K_BACKSPACE: amount_input = amount_input[:-1] # 处理回车键,确认输入 elif event.key == pygame.K_RETURN: # 先校验输入是否为有效数字 if amount_input.isdigit(): stake = int(amount_input) # 额外校验:赌注必须是正数且不超过当前余额 if 0 < stake <= money: # 这里模拟输赢,赢了就加stake,输了就改成 money - stake new_balance = money + stake money = new_balance # 更新钱包余额 amount_input = "" # 清空输入框准备下次输入 else: print("⚠️ 赌注无效:请输入大于0且不超过当前余额的数字") else: print("⚠️ 请输入有效的数字!") # 渲染文本到屏幕上 money_text = font.render(f"当前余额: ${money}", True, (0, 0, 0)) input_text = font.render(f"输入赌注: {amount_input}", True, (0, 0, 0)) balance_text = font.render(f"新余额: ${new_balance}", True, (0, 0, 0)) screen.blit(money_text, (20, 20)) screen.blit(input_text, (20, 60)) screen.blit(balance_text, (20, 100)) pygame.display.flip() # 更新屏幕显示 pygame.quit()
关键细节说明
- 键盘事件处理:用
event.unicode直接获取按下的字符,比逐个判断数字键更简洁; - 输入校验:用
isdigit()确保输入是纯数字,避免转int时报错;额外加了赌注合理性校验,防止用户输入负数或超过余额的金额; - 可视化反馈:在屏幕上实时渲染输入内容和余额,让用户清楚当前状态;
- 可选优化:如果需要点击输入框才激活输入,可以添加一个矩形区域,监听鼠标点击事件来切换
input_active的状态。
内容的提问来源于stack exchange,提问作者Katiana
相关产品推荐
相关产品推荐

