【AI游戏】基于OpenAI打造自动生成剧情的 Python 游戏

引言

你是否曾经梦想过成为一名游戏设计师,创造出引人入胜的冒险故事?今天,我将带你使用 OpenAI 的 GPT 模型和 Python 编写一个简单的自动生成剧情游戏。通过这个项目,你可以体验到人工智能在创意写作中的强大能力,并学习如何将 AI 技术应用到游戏开发中。

配套资源:https://download.csdn.net/download/weixin_74773078/90264914


项目概述

我们将创建一个基于文本的冒险游戏,玩家可以通过选择不同的路径来影响剧情的发展。游戏的核心是利用 OpenAI 的 GPT 模型动态生成剧情内容。每次玩家做出选择后,GPT 会根据选择生成一段独特的故事情节。


技术栈
  • Python:用于编写游戏逻辑。

  • OpenAI GPT:用于生成剧情内容。

  • OpenAI API:通过 API 调用 GPT 模型。


实现步骤
1. 安装依赖

首先,确保你已经安装了 OpenAI 的 Python 库。如果没有安装,可以通过以下命令安装:

pip install openai

 

2. 设置 OpenAI API 密钥

在代码中,你需要设置 OpenAI 的 API 密钥。你可以从 OpenAI 官网 获取你的 API 密钥,并将其替换到代码中:

client = OpenAI(api_key="your_openai_api_key_here")
3. 编写剧情生成函数

我们使用 OpenAI 的 chat.completions.create 方法来生成剧情。以下是核心代码:

def generate_story_with_gpt(prompt):
    try:
        response = client.chat.completions.create(
            model="gpt-3.5-turbo",
            messages=[
                {"role": "system", "content": "你是一个剧情生成器,负责生成有趣的冒险故事。"},
                {"role": "user", "content": prompt}
            ],
            max_tokens=200,
            temperature=0.7
        )
        return response.choices[0].message.content.strip()
    except Exception as e:
        print(f"生成剧情时出错: {e}")
        return "剧情生成失败,请稍后再试。"

 

4. 玩家选择机制

玩家可以在游戏中做出选择,例如进入森林、沙漠或城堡。选择会影响生成的剧情:

def player_choice():
    print("\n你遇到了一个分叉路口,你会选择:")
    print("1. 向左走,进入幽暗的森林")
    print("2. 向右走,前往荒凉的沙漠")
    print("3. 直行,前往古老的城堡")
    choice = input("请输入你的选择(1、2 或 3):")
    if choice == "1":
        return "你决定进入幽暗的森林。"
    elif choice == "2":
        return "你决定前往荒凉的沙漠。"
    elif choice == "3":
        return "你决定前往古老的城堡。"
    else:
        print("无效的选择,默认进入幽暗的森林。")
        return "你决定进入幽暗的森林。"
5. 主游戏逻辑

游戏的主循环会不断生成新的剧情,直到玩家选择退出:

def main():
    print("欢迎来到自动生成剧情游戏!")
    print("在这个游戏中,你的选择将影响剧情的发展。")
    print("让我们一起开始冒险吧!\n")

    while True:
        input("按下回车键继续...")
        choice_prompt = player_choice()
        print("\n生成剧情中,请稍候...\n")

        # 生成初始剧情
        initial_prompt = "在一个遥远的国度,一位勇敢的冒险者踏上了旅程。" + choice_prompt
        story = generate_story_with_gpt(initial_prompt)

        # 打印生成的剧情
        print("=== 剧情开始 ===")
        print(story)
        print("=== 剧情结束 ===\n")

        # 询问玩家是否继续
        play_again = input("是否继续生成新的剧情?(y/n): ").lower()
        if play_again != 'y':
            print("感谢游玩,再见!")
            break
示例输出

运行游戏后,你会看到类似以下的输出:

欢迎来到自动生成剧情游戏!
在这个游戏中,你的选择将影响剧情的发展。
让我们一起开始冒险吧!

按下回车键继续...

你遇到了一个分叉路口,你会选择:
1. 向左走,进入幽暗的森林
2. 向右走,前往荒凉的沙漠
3. 直行,前往古老的城堡
请输入你的选择(1、2 或 3):1

生成剧情中,请稍候...

=== 剧情开始 ===
你决定进入幽暗的森林。森林中弥漫着浓雾,四周充满了神秘的气息。突然,你听到远处传来低沉的咆哮声。你小心翼翼地向前探索,发现了一只受伤的小鹿。你决定帮助它,并跟随它来到了一片隐藏的湖泊。湖泊中央有一座小岛,岛上闪烁着奇异的光芒。你划船前往小岛,发现了一颗神秘的宝石。这颗宝石似乎拥有无穷的力量……
=== 剧情结束 ===

是否继续生成新的剧情?(y/n): y

 持续更新:

  1. 增加更多选择

    可以让玩家选择战斗、逃跑或谈判,进一步丰富剧情。
  2. 记忆上下文

    使用 GPT 的上下文记忆功能,让剧情更加连贯。
  3. 图形化界面

    使用 Pygame 或 Tkinter 为游戏添加图形化界面。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/953181.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2025华数杯国际赛A题完整论文讲解(含每一问python代码+数据+可视化图)

大家好呀,从发布赛题一直到现在,总算完成了2025“华数杯”国际大学生数学建模竞赛A题Can He Swim Faster的完整的成品论文。 本论文可以保证原创,保证高质量。绝不是随便引用一大堆模型和代码复制粘贴进来完全没有应用糊弄人的垃圾半成品论文…

Python 二次元初音未来桌宠

标题 相关资源文件已经打包成EXE文件,可双击直接运行程序,且文章末尾已附上相关源码,以供大家学习交流,博主主页还有更多Python相关程序案例,秉着开源精神的想法,望大家喜欢,点个关注不迷路&…

vue3学习日记5 - 项目起步

最近发现职场前端用的框架大多为vue,所以最近也跟着黑马程序员vue3的课程进行学习,以下是我的学习记录 视频网址: Day2-11.项目起步-静态资源引入和ErrorLen安装_哔哩哔哩_bilibili 学习日记: vue3学习日记1 - 环境搭建-CSDN博…

【Linux系统】—— vim 的使用

【Linux系统】—— vim 的使用 1 vim 的基本概念2 vim 的多模式3 命令模式下的命令集3.1 进入/退出其他模式3.2 光标移动命令集3.3 复制/剪切/粘贴/删除命令集3.4 撤销命令集3.5 查找命令集3.6 替换命令集3.7 进入与退出替换模式 4 批量化编译5 底行模式6 vim 小技巧7 vim简单配…

JAVA实战开源项目:课程智能组卷系统(Vue+SpringBoot) 附源码

本文项目编号 T 009 ,文末自助获取源码 \color{red}{T009,文末自助获取源码} T009,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 老…

了解 Ansys Mechanical 中的网格方法:综合指南

网格是每个有限元分析 (FEA) 仿真的支柱。它将几何图形划分为离散单元,使 Ansys Mechanical 能够近似模型在各种条件下的行为。结构良好的网格可确保准确、可靠和计算高效的结果,而结构不佳的网格可能会导致错误、收敛问题或不必要…

【Linux】深刻理解软硬链接

一.软硬链接操作 1.软连接 touch 创建一个文件file.txt ,对该文件创建对应的软链接改怎么做呢? ln -s file.txt file-soft.link .给对应文件创建软连接。 软连接本质就是一个独立的文件,因为我们对应的软连接有独立的inode,他…

施耐德M241与MR30-FBS-MT 在Machine Expert V2.0的组态过程

一、系统概述 MR30分布式IO是一个高度灵活的可扩展分布式 I/O 系统,MR30-FBC-MT用于通过 Modbus TCP 总线将过程信号连接到上一级控制器。 具有以下特点: 结构紧凑 PUSH IN端子,易于安装,布线简单 灵活性高:开关量模…

大数据技术在服饰行业的应用

大数据技术的快速发展为各行各业带来了深刻的变革,本文将详细探讨大数据技术的发展脉络,大数据技术推动服饰企业的数字化转型,旨在为相关领域的研究和实践提供参考。 什么是大数据大数据技术的发展历程大数据在服饰行业的应用总结 1&#xff…

Vue2+OpenLayers添加/删除点、点击事件功能实现(提供Gitee源码)

目录 一、案例截图 二、安装OpenLayers库 三、安装Element-UI 四、代码实现 4.1、添加一个点 4.2、删除所有点 4.3、根据经纬度删除点 4.4、给点添加点击事件 4.5、完整代码 五、Gitee源码 一、案例截图 可以新增/删除标记点,点击标记点可以获取到当前标…

Windows 10 ARM工控主板连接I2S音频芯片

在Windows工控主板应用中,音频功能是一项基本的需求,USB声卡在x86/x64 Windows系统上就可直接免驱使用,但这些USB声卡通常不提供ARM上的Windows系统驱动。本文将介绍如何利用安装在ARM上的Windows工控主板——ESM8400的I2S接口、连接WM8960音…

【Rust】错误处理机制

目录 思维导图 引言 一、错误处理的重要性 1.1 软件中的错误普遍存在 1.2 编译时错误处理要求 二、错误的分类 2.1 可恢复错误(Recoverable Errors) 2.2 不可恢复错误(Unrecoverable Errors) 三、Rust 的错误处理机制 3…

提升租赁效率的租赁小程序全解析

内容概要 在如今快节奏的生活中,租赁小程序俨然成为了提升租赁效率的一把利器。无论是个人还是企业,都会因其便捷的功能而受益。简单来说,租赁小程序能让繁琐的租赁流程变得轻松、高效。在这里,我们将带您畅游租赁小程序的海洋&a…

SSM商城设计与实现

摘 要 本文的主要工作是对基于B/S模式及JSP技术的基于智能推荐的b2c销售网站进行了研究与设计。本文首先介绍了基于智能推荐的b2c销售网站的背景,分析比较了国内外相关基于智能推荐的b2c销售网站的运行模式、系统特点与开发技术。然后分析了目前热点的各种Web应用开…

drawDB docker部属

docker pull xinsodev/drawdb docker run --name some-drawdb -p 3000:80 -d xinsodev/drawdb浏览器访问:http://192.168.31.135:3000/

CentOS7下Hadoop集群分布式安装详细图文教程

1、集群规划 主机 角色 DSS20 NameNode DataNode ResourceManager NodeManager DSS21 SecondaryNameNode NameNode NodeManager DSS22 DataNode NodeManager 1.1、环境准备 1.1.1 关闭防火墙 #查看防火墙状态 firewall-cmd --state #停止…

计算机网络——网络层-IPV4相关技术

一、网络地址转换NAT • 网络地址转换 NAT 方法于1994年提出。 • 需要在专用网连接到因特网的路由器上安装 NAT 软件。装有 NAT 软件的路由器叫做 NAT路由器,它至少有一个有效的外部全球地址 IPG。 • 所有使用本地地址的主机在和外界通信时都要在 NAT 路由器上将…

postgresql|数据库|利用sqlparse和psycopg2库批量按顺序执行SQL语句(psyconpg2新优化版本)

一、 旧版批量执行SQL脚本的python文件缺点,优点,以及更新内容 书接上回,postgresql|数据库开发|python的psycopg2库按指定顺序批量执行SQL文件(可离线化部署)_python sql psycopg2-CSDN博客 这个python脚本写了很久了,最近开始…

Node.js——http 模块(二)

个人简介 👀个人主页: 前端杂货铺 🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展 📃个人状态: 研发工程师,现效力于中国工业软件事业 🚀人生格言: 积跬步…

基于element UI el-dropdown打造表格操作列的“更多⌵”上下文关联菜单

<template><div :class"$options.name"><el-table :data"tableData"><el-table-column type"index" label"序号" width"60" /><!-- 主要列 BEGIN---------------------------------------- --&g…