完整教程:我用 Pygame + DeepSeek 做了一个中文 AI RPG 游戏!

news/2026/1/17 12:46:06/文章来源:https://www.cnblogs.com/tlnshuju/p/19495753

完整教程:我用 Pygame + DeepSeek 做了一个中文 AI RPG 游戏!

2026-01-17 12:44  tlnshuju  阅读(0)  评论(0)    收藏  举报

在学习大模型的过程中,我尝试用 Pygame 打造了一个简单的可对话的中文 RPG 游戏。通过集成 DeepSeek 的大模型接口,每个 NPC 都能“开口说话”,而且是根据你设计的 prompt 自动生成回复内容。

本篇文章将分享这个项目的完整思路与核心代码,欢迎读者交流反馈!


✨ 项目亮点

  • • ✅ 中文交互:对话框内支持中文文本分页显示;

  • • ✅ AI 驱动:每个 NPC 背后接入大模型接口(DeepSeek);

  • • ✅ Prompt 可控:每个 NPC 都可以设置独特 prompt,打造剧情或知识问答玩法;

  • • ✅ Pygame 实现:轻量、简单,适合入门项目。


项目结构一览

deepseek_rpg/
├── main.py             # 游戏主循环
├── ai_api.py           # 接入 DeepSeek 接口
├── dialog_box.py       # 对话框 UI 逻辑
├── player.py           # 玩家控制
├── npc.py              # NPC 角色定义
├── assets/
│   ├── player.png
│   └── npc.png

️ 游戏主逻辑:Game 类

管理事件监听、玩家移动、NPC 检测、对话展示等功能:

class Game:
    def__init__(self):
        pygame.init()
        self.screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
        self.player = Player(100, 100)
        self.npcs = pygame.sprite.Group(NPC(300, 300))
        self.dialog_box = DialogBox()
        self.show_dialog = False
        self.current_npc = None
        self.running = True
    defprocess_events(self):
        keys = pygame.key.get_pressed()
        self.player.update(keys)
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                self.running = False
            elif event.type == pygame.KEYDOWN:
                if event.key == pygame.K_SPACE andself.current_npc:
                    ifself.show_dialog:
                        self.dialog_box.next_page()
                        ifnotself.dialog_box.has_more_pages():
                            self.show_dialog = False
                    else:
                        prompt = self.current_npc.prompt
                        answer = get_deepseek_response(prompt)
                        self.dialog_box.add_text(answer)
                        self.show_dialog = True

对话系统:DialogBox(支持分页)

将长文本分页显示在屏幕底部,避免文字溢出:

class DialogBox:
    def__init__(self):
        self.font = pygame.font.SysFont("Arial", 20)
        self.rect = pygame.Rect(50, 400, 700, 180)
        self.text_lines = []
        self.page = 0
    defadd_text(self, new_text):
        self.text_lines = [new_text[i:i+40] for i inrange(0, len(new_text), 40)]
        self.page = 0
    defnext_page(self):
        self.page += 1
    defhas_more_pages(self):
        returnself.page < len(self.text_lines)
    defdraw(self, screen):
        pygame.draw.rect(screen, (255, 255, 255), self.rect)
        pygame.draw.rect(screen, (0, 0, 0), self.rect, 2)
        ifself.page < len(self.text_lines):
            text_surface = self.font.render(self.text_lines[self.page], True, (0, 0, 0))
            screen.blit(text_surface, (self.rect.x + 10, self.rect.y + 10))

接入大模型:DeepSeek AI 接口封装

通过 REST API 与 DeepSeek 进行交互,并返回 AI 回复:

import requests
DEEPSEEK_API_URL = "https://api.deepseek.com/v1/chat/completions"
api_key = "your_deepseek_api_key"
defget_deepseek_response(prompt):
    headers = {
        "Content-Type": "application/json",
        "Authorization": f"Bearer {api_key}"
    }
    data = {
        "model": "deepseek-chat",
        "messages": [{"role": "user", "content": prompt}],
        "temperature": 0.7
    }
    try:
        response = requests.post(DEEPSEEK_API_URL, headers=headers, json=data)
        response.raise_for_status()
        return response.json()["choices"][0]["message"]["content"]
    except Exception as e:
        print(f"Error: {e}")
        return "(AI 接口调用失败)"

角色定义:玩家 & NPC

玩家可以移动,NPC 静止但可以设置不同 Prompt:

class NPC(pygame.sprite.Sprite):
    def__init__(self, x, y, prompt="你是谁?"):
        super().__init__()
        self.image = pygame.image.load("npc.png")
        self.rect = self.image.get_rect(topleft=(x, y))
        self.prompt = prompt
classPlayer(pygame.sprite.Sprite):
    def__init__(self, x, y):
        super().__init__()
        self.image = pygame.image.load("player.png")
        self.rect = self.image.get_rect(topleft=(x, y))
        self.speed = 5
    defupdate(self, keys):
        if keys[pygame.K_LEFT]: self.rect.x -= self.speed
        if keys[pygame.K_RIGHT]: self.rect.x += self.speed
        if keys[pygame.K_UP]: self.rect.y -= self.speed
        if keys[pygame.K_DOWN]: self.rect.y += self.speed

快速运行

pip install pygame requests
python main.py

记得将你的 DeepSeek API Key 填入 ai_api.py 中。


效果演示

deepseek接入游戏npc

玩家靠近 NPC,按下 空格键 开始对话;
模型将根据预设 Prompt 实时生成中文回复。

后续你可以继续拓展:

  • • 设置剧情逻辑

  • • 接入不同模型(如 Moonshot、GPT-4)

  • • 加入任务系统或成就系统


最后

如果你对 AI + 游戏结合感兴趣,欢迎大家关注微信公众号【AI安全这点事】获取完整代码,点赞、分享、评论交流~
项目源码整理后我也会开源,欢迎关注更新!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

我让AI读了1000个GitHub测试项目,总结出“最佳实践”

‌一、测试工程的四大支柱‌基于对1000 GitHub 测试项目、科技巨头公开文档及行业实践的深度分析&#xff0c;软件测试的最佳实践已形成清晰的四维框架&#xff1a;维度核心实践代表项目/工具关键价值‌测试架构‌测试金字塔&#xff08;80%单元 15%集成 5%E2E&#xff09;Go…

如何看待“AI写作导致人类语言退化”?

当语言成为算法的训练集 在软件测试领域&#xff0c;我们习惯将系统缺陷分为功能异常与性能衰减两类。而AI写作工具的普及&#xff0c;正悄然触发一场关乎人类语言能力的“性能衰减危机”——它并非直接崩溃&#xff0c;而是在流畅输出的表象下&#xff0c;逐步消解表达的精确…

CentOS服务器上yum/rpm搭建GitLab CE

(1).参考文献GitLab英文官方网站安装方法:https://docs.gitlab.com/install/install_methods/ (2).实验环境4核8G CentOS7.9.2009已设置阿里云yum源,并且yum -y install epel-release,关闭SELinux和防火墙(如果不关…

2026年行业内比较好的石笼网供应商口碑推荐,抗冲击抗腐蚀石笼网/双隔板石笼网/镀锌低碳钢丝石笼网,石笼网供应商找哪家 - 品牌推荐师

随着国家基建工程与生态治理项目的持续推进,石笼网作为河道护坡、边坡防护、生态修复等场景的核心材料,其技术性能与供应稳定性直接影响工程质量。据行业数据统计,2025年国内石笼网市场规模已突破120亿元,但市场集…

‌AI驱动的测试环境配置检查清单:全面指南

一、引言&#xff1a;测试环境配置的重要性与AI的赋能作用‌测试环境是软件测试的基石&#xff0c;一个配置不当的环境会导致虚假缺陷、延误发布&#xff0c;甚至业务风险。据统计&#xff0c;约30%的测试失败源于环境问题&#xff08;来源&#xff1a;业界报告&#xff09;。随…

实用指南:CAPL学习-SOME/IP交互层-值处理类函数1

实用指南:CAPL学习-SOME/IP交互层-值处理类函数1pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas",…

Maven教程(Maven简介之依赖管理工具)

依赖管理工具:能够帮助我们管理依赖,为我们提供了一个统一的下载途径,能够自动的从镜像网站或中央仓库中去下载,同时也解决了jar包与jar包之间的依赖关系

基于8086的步进电机系统数码管显示转速数值含报告(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

基于8086的步进电机系统数码管显示转速数值含报告(设计源文件万字报告讲解)&#xff08;支持资料、图片参考_相关定制&#xff09;_文章底部可以扫码 proteus仿真汇编源码基于8086步进电机&#xff0c;8086电机系统转数档位数值正转前面显示0&#xff0c;反转显示-&#xff0c;…

SAP ALV 显示 百分比 符号前置转换历程

FUNCTION conversion_exit_zfh_output . *"---------------------------------------------------------------------- *"*"本地接口&#xff1a; *" IMPORTING *" REFERENCE(INPUT) *" EXPORTING *" REFERENCE(OUTPUT) *"-…

为什么AI生成的测试用例比人工更“刁钻”?

重新定义“刁钻”测试用例 在软件测试领域&#xff0c;“刁钻”测试用例特指那些能有效暴露隐藏缺陷、覆盖边缘场景的用例&#xff0c;它们往往超出常规逻辑&#xff0c;挑战系统极限。传统人工测试依赖于测试工程师的经验和直觉&#xff0c;但受限于认知偏差和时间压力&#…

固定翼无人机俯仰姿态模糊PID控制(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

固定翼无人机俯仰姿态模糊PID控制(设计源文件万字报告讲解)&#xff08;支持资料、图片参考_相关定制&#xff09;_文章底部可以扫码 内容包含飞行动力学建模、模型特性分析、控制器设计。程序&#xff0c;仿真&#xff0c;word报告。 通过对无人机进行受力分析和力矩分析&…

‌用AI模拟“多用户并发冲突”:不是线程,是业务逻辑冲突

业务逻辑并发冲突的本质是“状态机失效”&#xff0c;而非线程安全问题‌在软件测试领域&#xff0c;传统并发测试聚焦于线程锁、内存可见性、死锁检测等系统层问题。但真实生产环境中&#xff0c;80%以上的高可用性故障&#xff0c;源于‌业务规则在多用户并发下被绕过或破坏‌…

四旋翼无人机轨迹跟踪控制仿真(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

四旋翼无人机姿态控制仿真系统(设计源文件万字报告讲解)&#xff08;支持资料、图片参考_相关定制&#xff09;_文章底部可以扫码 [商品介绍] 本商品提供完整的四旋翼无人机姿态控制仿真系统&#xff0c;包括详细的课程报告与MATLAB仿真源代码。系统基于PID控制策略&#xff0…

我用AI分析测试覆盖率报告,自动推荐“未覆盖路径”

AI已从“辅助工具”进化为“路径决策引擎”‌当前&#xff0c;基于控制流图分析、符号执行与大语言模型&#xff08;LLM&#xff09;协同的AI系统&#xff0c;能够精准识别测试覆盖率报告中的‌未覆盖路径‌&#xff0c;并自动生成高置信度的测试用例推荐。该技术已在头部互联网…

杭州拼多多代运营公司哪家性价比高?2026年实测对比参考 - 前沿公社

杭州作为中国重要的电商中心,聚集了大量专业的电商代运营机构。在拼多多平台上,选择性价比高的代运营公司对于店铺增长、流量获取、爆款打造至关重要。本文从 收费标准、服务内容、核心优势 等维度实测对比,给出近期…

‌AI自动生成测试用例优先级评分:基于历史缺陷密度的全面研究

测试优先级自动化的必要性‌在软件开发生命周期中&#xff0c;测试用例优先级评分&#xff08;Test Case Prioritization, TCP&#xff09;是确保高效回归测试的关键环节。它通过为测试用例分配权重&#xff0c;优先执行高风险或高影响案例&#xff0c;从而优化资源分配。传统方…

1.Blender官网安装

1.Blender官网安装1.官网地址 https://www.blender.org/ 2.下载 下载链接选择版本下载3.安装 在电脑找到下载的文件,双击安装安装好后桌面会生成对应的图标,双击打开就可以使用啦使用 选择语言设置

我的AI测试模型,现在能预测“哪个模块最可能被回滚”

AI赋能测试&#xff0c;破解回滚难题 在软件开发生命周期中&#xff0c;模块回滚是测试团队最头疼的问题之一——它不仅浪费开发资源&#xff0c;还可能导致项目延期和用户流失。传统方法依赖人工经验判断&#xff0c;但往往滞后且不准确。如今&#xff0c;随着AI技术的崛起&a…

天津多口味元宵馅料老牌厂家有哪些,费用多少? - 工业品牌热点

一、基础认知篇 问题1:什么是多口味元宵馅料,老牌厂家和普通生产商有啥区别? 多口味元宵馅料是指在传统黑芝麻、五仁基础上,延伸出钙奶水果、榴莲果粒、无蔗糖等多元口味的元宵核心原料,是决定元宵口感与市场竞争…