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

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循环,只需修改循环条件并添加满员判断即可:

  1. 修改循环条件:把while True改成while i < player,这样当玩家数i达到设定的上限player时,循环自动停止。
  2. 适配状态文本长度:每次更新玩家数后,重新生成状态文本的分隔线长度,避免长度不匹配。
  3. 添加满员后续逻辑:循环结束后,输出房间满员提示,衔接后续的准备流程。

修改后的核心代码片段:

# 替换原来的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.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 04:35:33