宁德市网站建设_网站建设公司_服务器维护_seo优化
2026/1/17 12:46:08 网站建设 项目流程

完整教程:我用 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安全这点事】获取完整代码,点赞、分享、评论交流~
项目源码整理后我也会开源,欢迎关注更新!

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询