我用 Pygame + DeepSeek 做了一个中文 AI RPG 游戏!

在学习大模型的过程中,我尝试用 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安全这点事】获取完整代码,点赞、分享、评论交流~
项目源码整理后我也会开源,欢迎关注更新!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI安全这点事

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值