我们来构建一个 **带有图形界面的“恋爱模拟”小游戏**,使用 Python 的 `tkinter` 模块实现主界面。这个游戏将包含:
- 角色对话
- 好感度系统
- 选项选择影响剧情
- 简单结局分支
这个游戏可以看作是一个轻量级的视觉小说/恋爱养成雏形。
---
### ✅ 示例:《心动校园》恋爱模拟游戏(Python + tkinter)
```python
import tkinter as tk
from tkinter import messagebox
class LoveGame:
def __init__(self, root):
self.root = root
self.root.title("💘 心动校园 - 恋爱模拟游戏")
self.root.geometry("600x400")
self.root.resizable(False, False)
# 游戏状态
self好感度 = 0
self场景索引 = 0
# 剧情数据:每一段剧情包含描述、选项列表(文本和对好感度的影响)
self.剧情 = [
{
"描述": "开学第一天,你在教室里看到一位笑容温暖的同学向你走来。",
"选项": [
("‘你好呀!’ 微笑着打招呼", 10),
("低头看书,假装没看见", -5),
("‘你挡到我光了。’ 冷冷地说", -10)
]
},
{
"描述": "放学后,TA主动邀请你一起去图书馆学习。",
"选项": [
("开心地答应", 15),
("勉强同意", 5),
("‘我没空。’ 直接拒绝", -20)
]
},
{
"描述": "考试前夜,TA发消息问你要不要一起复习。",
"选项": [
("‘当然好啊!’ 积极回应", 10),
("回了个‘嗯’", 0),
("不回复", -10)
]
},
{
"描述": "毕业典礼那天,TA站在樱花树下看着你……",
"选项": [
("跑过去抱住TA", 30),
("微笑着挥手告别", 0),
("转身离开,一句话也不说", -20)
]
}
]
# UI 组件
self.描述标签 = tk.Label(
root, text="", font=("微软雅黑", 14), wraplength=550, justify="center", pady=40
)
self.描述标签.pack()
self.好感度标签 = tk.Label(
root, text="好感度: 0", font=("Arial", 12), fg="purple"
)
self.好感度标签.pack()
self.按钮框架 = tk.Frame(root)
self.按钮框架.pack(pady=20)
self.创建选项按钮()
def 创建选项按钮(self):
"""根据当前剧情创建选项按钮"""
for widget in self.按钮框架.winfo_children():
widget.destroy() # 清除旧按钮
if self.场景索引 >= len(self.剧情):
self.显示结局()
return
当前剧情 = self.剧情[self.场景索引]
self.描述标签.config(text=当前剧情["描述"])
self.好感度标签.config(text=f"好感度: {self.好感度}")
for 选项文本, 影响值 in 当前剧情["选项"]:
btn = tk.Button(
self.按钮框架,
text=选项文本,
width=40,
height=2,
command=lambda 影响=影响值: self.选择(影响)
)
btn.pack(pady=5)
def 选择(self, 影响值):
"""处理玩家选择"""
self.好感度 += 影响值
self.场景索引 += 1
self.创建选项按钮() # 进入下一幕
def 显示结局(self):
"""根据好感度显示不同结局"""
self.描述标签.config(text="🎮 故事结束!\n\n你的最终好感度: " + str(self.好感度))
for widget in self.按钮框架.winfo_children():
widget.destroy()
if self.好感度 >= 50:
结局 = "💞【完美结局】\n你们在樱花树下告白成功,从此幸福地在一起!"
颜色 = "red"
elif self.好感度 >= 20:
结局 = "🙂【普通结局】\n你们成为了最好的朋友,但感情始终差了一步。"
颜色 = "green"
elif self.好感度 >= 0:
结局 = "☁️【平淡结局】\n毕业后各奔东西,只留下淡淡回忆。"
颜色 = "gray"
else:
结局 = "💔【悲剧结局】\nTA终于不再打扰你,因为你太冷漠了……"
颜色 = "blue"
结局标签 = tk.Label(self.按钮框架, text=结局, font=("微软雅黑", 12), fg=颜色, justify="center")
结局标签.pack(pady=20)
重玩按钮 = tk.Button(self.按钮框架, text="重新开始", command=self.重置游戏, bg="orange", fg="white", width=20, height=2)
重玩按钮.pack(pady=10)
def 重置游戏(self):
"""重置游戏状态"""
self.好感度 = 0
self.场景索引 = 0
for widget in self.按钮框架.winfo_children():
widget.destroy()
self.创建选项按钮()
# 主程序运行
if __name__ == "__main__":
root = tk.Tk()
game = LoveGame(root)
root.mainloop()
```
---
### 🎮 游戏说明:
- 使用中文变量名增强可读性(实际项目建议用英文)。
- 每个场景提供多个选择,影响“好感度”。
- 最终根据好感度触发不同结局。
- 支持“重新开始”功能。
---
### 🔧 可扩展方向:
| 功能 | 实现方式 |
|------|---------|
| 添加角色立绘 | 使用 `Canvas` 或 `PIL` 显示图片 |
| 背景音乐 | 使用 `pygame.mixer` 播放背景音 |
| 多角色路线 | 增加角色选择分支逻辑 |
| 存档系统 | 使用 `json` 保存进度 |
| 更复杂剧情树 | 使用字典或类组织剧情节点 |
---