从零开始开发并打包一个猜数字游戏

猜数字游戏是编程入门的经典练习,它涵盖了基本的程序逻辑、用户交互和条件判断等核心概念。在本文中,我将带您从零开始开发一个猜数字游戏,并使用 PyInstaller 将其打包为可执行文件,方便在没有 Python 环境的电脑上运行。

游戏设计思路

我们的猜数字游戏将包含以下功能:

  • 程序随机生成一个 1 到 100 之间的整数
  • 玩家有最多 10 次猜测机会
  • 每次猜测后,程序会提示猜大了、猜小了或猜对了
  • 记录玩家的猜测次数和历史记录
  • 游戏结束后可以选择重新开始

猜数字游戏代码

这段代码实现了一个经典的猜数字游戏,让我们逐行解析其功能和实现原理。

导入模块

import random
import os
  • import random:导入随机数模块,用于生成游戏中的目标数字
  • import os:导入操作系统模块,用于实现清空屏幕的功能

清空屏幕函数

def clear_screen():
    """清空屏幕"""
    os.system('cls' if os.name == 'nt' else 'clear')
  • 定义了一个名为clear_screen的函数,用于在不同操作系统下清空屏幕
  • 文档字符串"""清空屏幕"""说明了函数的功能
  • os.name == 'nt'判断是否为 Windows 系统('nt' 代表 Windows)
  • os.system('cls'):Windows 系统下执行 cls 命令清空屏幕
  • os.system('clear'):类 Unix 系统(Linux、macOS 等)下执行 clear 命令清空屏幕

游戏主逻辑函数

def play_game():
    """游戏主逻辑"""
    # 生成1到100之间的随机数
    secret_number = random.randint(1, 100)
    max_attempts = 10
    attempts = 0
    guess_history = []
  • 定义play_game函数作为游戏的主逻辑
  • secret_number = random.randint(1, 100):生成 1 到 100 之间的随机整数作为目标数字
  • max_attempts = 10:设置最大猜测次数为 10 次
  • attempts = 0:初始化已尝试次数为 0
  • guess_history = []:创建空列表,用于记录玩家的猜测历史
    print("欢迎来到猜数字游戏!")
    print(f"我已经想好了一个1到100之间的数字,你有{max_attempts}次机会猜出它。")
  • 打印游戏欢迎信息
  • 使用 f-string 格式化字符串,显示最大猜测次数
    while attempts < max_attempts:
        # 显示剩余次数
        remaining = max_attempts - attempts
        print(f"\n还剩{remaining}次机会")
  • while attempts < max_attempts:创建循环,只要尝试次数小于最大次数就继续游戏
  • remaining = max_attempts - attempts:计算剩余猜测次数
  • 打印剩余次数信息
        # 获取用户输入
        try:
            guess = input("请输入你猜的数字: ")
            guess = int(guess)
        except ValueError:
            print("请输入有效的整数!")
            continue
  • 使用 try-except 块处理用户输入,防止非数字输入导致程序崩溃
  • input("请输入你猜的数字: "):获取用户输入的字符串
  • guess = int(guess):将输入转换为整数
  • 如果转换失败(用户输入非数字),捕获ValueError异常,提示用户输入有效整数,并使用continue跳过本次循环的剩余部分
        # 记录猜测
        attempts += 1
        guess_history.append(guess)
  • 每次有效猜测后,尝试次数加 1
  • 将本次猜测的数字添加到历史记录列表中
        # 判断猜测结果
        if guess < secret_number:
            print("猜小了! 再试试更大的数字。")
        elif guess > secret_number:
            print("猜大了! 再试试更小的数字。")
        else:
            clear_screen()
            print(f"恭喜你! 你猜对了,答案就是{secret_number}!")
            print(f"你用了{attempts}次猜出了正确答案。")
            print(f"你的猜测历史: {guess_history}")
            return
  • 比较用户猜测与目标数字:
    • 如果猜小了,提示用户尝试更大的数字
    • 如果猜大了,提示用户尝试更小的数字
    • 如果猜对了:
      • 调用clear_screen()清空屏幕
      • 打印恭喜信息、使用的猜测次数和猜测历史
      • 使用return退出函数,结束本轮游戏
    # 如果用完所有机会仍未猜中
    clear_screen()
    print(f"很遗憾,你已经用完了所有{max_attempts}次机会。")
    print(f"正确答案是: {secret_number}")
    print(f"你的猜测历史: {guess_history}")
  • 当循环结束(用完所有猜测次数)仍未猜中时执行此部分
  • 清空屏幕并显示游戏结束信息、正确答案和猜测历史

主函数

def main():
    """主函数,控制游戏流程"""
    while True:
        play_game()
  • 定义main函数作为程序入口,控制整个游戏流程
  • while True创建无限循环,使玩家可以多次游戏
        # 询问是否再玩一次
        play_again = input("\n想再玩一次吗? (y/n): ").lower()
        if play_again != 'y' and play_again != 'yes':
            print("谢谢参与,再见!")
            break
        
        clear_screen()
  • 每轮游戏结束后,询问玩家是否再玩一次
  • input(...).lower():将用户输入转换为小写,方便判断
  • 如果用户输入不是 'y' 或 'yes',打印再见信息并使用break退出循环
  • 如果用户想继续玩,清空屏幕并回到循环开始,重新调用play_game()

程序入口

if __name__ == "__main__":
    main()

  • 这是 Python 的标准程序入口写法
  • 当直接运行该脚本时,__name__变量的值为"__main__",此时会调用main()函数启动游戏
  • 如果该脚本被作为模块导入,则不会自动执行游戏

总代码:

import random
import os

def clear_screen():
    """清空屏幕"""
    os.system('cls' if os.name == 'nt' else 'clear')

def play_game():
    """游戏主逻辑"""
    # 生成1到100之间的随机数
    secret_number = random.randint(1, 100)
    max_attempts = 10
    attempts = 0
    guess_history = []
    
    print("欢迎来到猜数字游戏!")
    print(f"我已经想好了一个1到100之间的数字,你有{max_attempts}次机会猜出它。")
    
    while attempts < max_attempts:
        # 显示剩余次数
        remaining = max_attempts - attempts
        print(f"\n还剩{remaining}次机会")
        
        # 获取用户输入
        try:
            guess = input("请输入你猜的数字: ")
            guess = int(guess)
        except ValueError:
            print("请输入有效的整数!")
            continue
        
        # 记录猜测
        attempts += 1
        guess_history.append(guess)
        
        # 判断猜测结果
        if guess < secret_number:
            print("猜小了! 再试试更大的数字。")
        elif guess > secret_number:
            print("猜大了! 再试试更小的数字。")
        else:
            clear_screen()
            print(f"恭喜你! 你猜对了,答案就是{secret_number}!")
            print(f"你用了{attempts}次猜出了正确答案。")
            print(f"你的猜测历史: {guess_history}")
            return
    
    # 如果用完所有机会仍未猜中
    clear_screen()
    print(f"很遗憾,你已经用完了所有{max_attempts}次机会。")
    print(f"正确答案是: {secret_number}")
    print(f"你的猜测历史: {guess_history}")

def main():
    """主函数,控制游戏流程"""
    while True:
        play_game()
        
        # 询问是否再玩一次
        play_again = input("\n想再玩一次吗? (y/n): ").lower()
        if play_again != 'y' and play_again != 'yes':
            print("谢谢参与,再见!")
            break
        
        clear_screen()

if __name__ == "__main__":
    main()

这个游戏逻辑清晰,交互友好,适合作为编程入门练习。

打包该程序

1.环境配置:

Pyinstaller库:

PyInstaller 是一个流行的 Python 应用打包工具,它可以将 Python 脚本及其依赖项打包成独立的可执行文件(.exe、.app 等),使应用能够在没有安装 Python 解释器的环境中运行。这对于 Python 应用的分发和部署非常有用。

安装Pyinstaller:

pip install Pyinstaller

Pyinstaller库的使用:

使用方法在命令提示符窗口或终端中执行命令,以实现相应功能。使用形式如下:

Pyinstaller 代码文件路径+代码文件名

如果打包命令产生大量临时文件,可以在Pyinstaller命令后加入一个参数-F,使打包后只产生一个dist文件:

Pyinstaller -F 代码文件路径+代码文件名

如果需要在命令窗口添加图标,可以使用以下命令:

Pyinstaller -i 图标文件地址+文件名称 -F 代码文件路径+代码文件名

实例演示:

打开命令提示符窗口(windows+r,cmd)

输入代码:

运行中:

保存地址

成功打包:

快去试试吧!大家。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值