猫咪藏在哪个房间

作者 by 超米 / 2024-11-25 / 暂无评论 / 17 个足迹

#import simplegui as gui  # 在线编辑器中使用本行,pycharm中运行时注释本行
import simpleguitk as gui  # 简单用户图形界面接口,在线编译器中运行时注释本行
import random              # 用random.randrange(range_high)随机生成猫咪要藏的房间号
import math                # 用math.log(x, base)计算猜中所需的最少次数

# 初始化全局变量
secret_number = None                         # 每个回合计算机随机产生的秘密数字
range_high = 25                              # 房间号的上限

new_game_started = True                      # 新一轮游戏是否开始
remaining_guesses = 0                        # 一个回合剩余的猜测次数

canvas_height = 500                          # 画布高度,单位为像素
canvas_width = 500                           # 画布宽度,单位为像素

room_list = []                               # 所有房间的状态
cat_image = gui.load_image("http://202.201.225.74/video/PythonResoure/ProjectResource/images/project2/cat.png")   # 猫咪图片

def new_game():
   #启动或重新启动游戏的辅助函数
    global secret_number, new_game_started, remaining_guesses, room_list
    secret_number = random.randrange(range_high)
    new_game_started = True
    remaining_guesses = int(math.log(range_high, 2))
    room_list.clear()
    for i in range(range_high):
        room_list.append(False)

def range25():
    global range_high
    range_high = 25
    new_game()

def range36():
#设置房间号的范围为[0,36)并重新开始游戏
    global range_high
    range_high = 36
    new_game()

def range100():
    # 设置房间号的范围为[0,100)并重新开始游戏

    global range_high
    range_high = 100
    new_game()

secret_number = random.randrange(25)

def guess_room_number(user_input):
    """文本输入框控件的处理函数,也是游戏的主要逻辑实现的函数"""
    global secret_number, remaining_guesses
    guess = int(user_input)
    if guess == secret_number:
        remaining_guesses = 0
    else:
        remaining_guesses -= 1
        # 控制台输出剩余猜测次数
        print("剩余猜测次数:", remaining_guesses)
        update_room(guess)
    update_room(int(user_input))      # 更新房间状态,请不要修改这行代码

# 创建窗口
frame = gui.create_frame("猫咪藏在哪个房间", canvas_width, canvas_height)
# 注册控件事件
frame.add_button("新游戏", new_game, 100)
frame.add_button("25个房间", range25, 100)
frame.add_button("36个房间", range36, 100)
frame.add_button("100个房间", range100, 100)
frame.add_input("你的猜测是:", guess_room_number, 100)

# 调用new_game初始化一些全局变量并向终端输出新一轮游戏开始的相关信息
new_game()

# 请别忘记对照评分标准核对你最终完成的程序
# 请不要修改这行之后的所有代码
def draw(canvas):
    """画布显示刷新事件的处理函数"""
    # 请不要修改该函数
    root = int(math.sqrt(range_high))
    length = canvas_width // root
    for row in range(root):
        for col in range(root):
            index = root * row + col
            text_width = frame.get_canvas_textwidth(str(index), 12, 'sans-serif')
            top_left = [length * col,length * row]
            top_right = [length * (col + 1),length * row]
            bottom_right = [length * (col + 1),length * (row + 1)]
            bottom_left = [length * col,length * (row + 1)]
            if not room_list[index]:
                canvas.draw_polygon([top_left, top_right, bottom_right, bottom_left], 1, 'Red', 'Green')
                canvas.draw_text(str(index), (top_left[0] + (length - text_width) / 2, top_left[1] + length - 2), 12, 'White', 'sans-serif')
            else:
                canvas.draw_polygon([top_left, top_right, bottom_right, bottom_left], 1, 'Red', 'Blue')
                canvas.draw_text(str(index), (top_left[0] + (length - text_width) / 2, top_left[1] + length - 2), 12, 'White', 'sans-serif')
                if index != secret_number:
                    no_cat = frame.get_canvas_textwidth('没有猫', 12, 'sans-serif')
                    canvas.draw_text('没有猫', (top_left[0] + (length - no_cat) / 2, top_left[1] + length / 2), 12, 'White', 'sans-serif')
                else:
                    canvas.draw_image(cat_image, [256,256], [512,512],[top_left[0] + length//2,top_left[1]+length//2 ],[length, length])

def update_room(guess):
    """更新房间的状态"""
    # 请不要修改该函数
    if guess == secret_number:
        for i in range(range_high):
            room_list[i] = True
    elif guess < secret_number:

        if remaining_guesses == 0:
            for i in range(range_high):
                room_list[i] = True
        else:
            for i in range(0,guess + 1):
                room_list[i] = True
    else:
        if remaining_guesses == 0:
            for i in range(range_high):
                room_list[i] = True
        else:
            for i in range(guess, range_high):
                room_list[i] = True

frame.set_draw_handler(draw)      # 注册显示刷新处理事件,每秒调用draw函数60次
frame.start()                     # 启动窗口框架

独特见解