Python游戏房间循环终止问题:如何实现满员后停止询问房间号
游戏房间满员后无法停止询问房间号的问题解决
我正在开发游戏房间功能,希望程序持续询问用户输入房间号,直到房间内玩家人数达到设定上限。但当前代码在玩家人数满员(如1/4→4/4)后仍继续询问,无法进入下一步流程,想了解是否需要使用for循环或其他方法解决该问题。
我的代码
# 1. 输入C创建游戏房间(已完成) # 2. 输入房间最大玩家数(已完成) # 3. 创建游戏房间(已完成) # 4. 获取房间号(已完成) # 5. 输入房间号加入房间(未完成) # 6. 玩家满员时,询问是否准备开始游戏(未完成) # 7. 输入R表示准备,N表示不准备(未完成) # 8. 所有人准备好后,玩家1输入P开始游戏(未完成) # 9. 开始游戏!(未完成) def roomnum_join(): import random as rd ### 生成随机房间号 return rd.randint(1,10) ### 返回随机房间号供后续使用 def text_unsuccess(): print("请勿输入字母或留空。") print("请输入大于0的数字。") def notfound_roomnum(): print("未找到该房间号。") print("请输入正确的6位房间号。") len_success = '创建成功!' create = '' while create != 'C': create = input('输入C创建房间: ') if create == 'C': print('设置房间最大玩家数?') while True: try: player = int(input('输入玩家数: ')) except ValueError: # 输入非数字时触发 print('\n创建失败。') text_unsuccess() continue if player <= 0: # 输入小于等于0时触发 print('\n创建失败。') text_unsuccess() else: i = 1 amount_player = f'等待其他玩家加入.. {i}/{player}.' roomnum = roomnum_join() print('='*len(amount_player)) print('创建成功!') print(f'你的房间号是 {roomnum}.') print(f'等待其他玩家加入.. {i}/{player}.') print('='*len(amount_player)) break while True: try: enter_roomnum = int(input('\n输入房间号加入: ')) except ValueError: print('\n加入失败。') notfound_roomnum() continue else: if enter_roomnum != roomnum: notfound_roomnum() elif enter_roomnum == roomnum: i += 1 print('='*len(amount_player)) print(f'你已加入房间 {roomnum}.') print(f'等待其他玩家加入.. {i}/{player}.') print('='*len(amount_player))
运行输出
输入C创建房间: C 设置房间最大玩家数? 输入玩家数: 4 =================================== 创建成功! 你的房间号是 7. 等待其他玩家加入.. 1/4. =================================== 输入房间号加入: 7 =================================== 你已加入房间 7. 等待其他玩家加入.. 2/4. =================================== 输入房间号加入: 7 =================================== 你已加入房间 7. 等待其他玩家加入.. 3/4. =================================== 输入房间号加入: 4 未找到该房间号。 请输入正确的6位房间号。 输入房间号加入: 3 未找到该房间号。 请输入正确的6位房间号。 输入房间号加入: 7 =================================== 你已加入房间 7. 等待其他玩家加入.. 4/4. =================================== 输入房间号加入: 7 =================================== 你已加入房间 7. 等待其他玩家加入.. 5/4. =================================== 输入房间号加入:
解决方案
问题出在第二个while True无限循环上,它没有终止条件,导致玩家数超过上限后仍继续运行。不需要换用for循环,只需修改循环条件并添加满员判断即可:
- 修改循环条件:把
while True改成while i < player,这样当玩家数i达到设定的上限player时,循环自动停止。 - 适配状态文本长度:每次更新玩家数后,重新生成状态文本的分隔线长度,避免长度不匹配。
- 添加满员后续逻辑:循环结束后,输出房间满员提示,衔接后续的准备流程。
修改后的核心代码片段:
# 替换原来的while True循环 while i < player: try: enter_roomnum = int(input('\n输入房间号加入: ')) except ValueError: print('\n加入失败。') notfound_roomnum() continue else: if enter_roomnum != roomnum: notfound_roomnum() elif enter_roomnum == roomnum: i += 1 current_status = f'等待其他玩家加入.. {i}/{player}.' print('='*len(current_status)) print(f'你已加入房间 {roomnum}.') print(current_status) print('='*len(current_status)) # 循环结束后进入下一步流程 print("\n房间已满!开始准备游戏...") # 这里可以添加后续的准备逻辑(询问是否ready等)
这样修改后,当玩家数达到设定上限时,循环会自动终止,程序进入下一步流程。
内容的提问来源于stack exchange,提问作者Arnu C.
相关产品推荐
相关产品推荐

