前言
在本教程中,我突发奇想,想做一个复古的修仙游戏,考虑到以前的情怀决定做个古老的躺平修仙游戏
个人主页→数据挖掘博主ZTLJQ的主页
个人推荐python学习系列:
☄️爬虫JS逆向系列专栏 - 爬虫逆向教学
☄️python系列专栏 - 从零开始学python
完整的所有代码和游戏截图在最底部展示,以下是代码讲解
首先,我们需要导入tkinter
库和messagebox
模块,以及random
库,用于创建游戏界面、显示消息框和生成随机数。
import tkinter as tk
from tkinter import messagebox
import random
接下来,我们创建一个CultivationGame
的类,用于管理游戏的界面和逻辑。
class CultivationGame:
def __init__(self, master):
self.master = master
self.master.title("修仙游戏")
self.master.geometry("800x600")
self.master.config(bg="#FFEBCD")
在CultivationGame
类的构造函数__init__
中,我们首先传入了一个master
参数,表示游戏窗口的父容器。然后,我们设置了游戏窗口的标题为"修仙游戏",大小为800x600像素,背景颜色为淡橙色。
接下来,我们定义了游戏的故事文本和选项按钮。故事文本是一个字典列表,每个字典包含一个故事段落和对应的选项。选项按钮是一个空列表,我们将在后续的代码中动态地添加和更新选项按钮。
self.story_texts = [
{"text": "你正在修炼炼气期,集中精神吸收天地灵气。", "options": ["继续修炼", "休息片刻"]},
{"text": "你遇到了一只妖兽,你决定与其战斗。", "options": ["使用火系法术攻击", "使用水系法术攻击", "逃跑"]},
{"text": "你闯入了一座迷宫,需要找到出口。", "options": ["向左转", "向右转", "向前走", "向后退"]},
{"text": "你遇到了一位仙人,他愿意传授你一项神通。", "options": ["学习飞行术", "学习隐身术", "拒绝学习"]},
{"text": "你遇到了一个难题,需要解决才能继续修炼。", "options": ["解开谜题", "寻找线索", "请求帮助"]},
{"text": "你得到了一本古老的法术书,里面记载着强大的法术。", "options": ["学习新的法术", "继续修炼已掌握的法术"]},
{"text": "你决定前往一座神秘的禁地,探索其中的宝藏。", "options": ["进入禁地", "寻找其他修仙者组队"]},
{"text": "你听说有一座仙山,据说山上有着无尽的灵气。", "options": ["攀登仙山", "寻找其他修仙法"]},
]
self.story_label = tk.Label(master, text="欢迎来到修仙游戏!", font=("Arial", 16), bg="#FFEBCD")
self.story_label.pack(pady=10)
self.option_buttons = []
for i in range(4):
button = tk.Button(master, text="", font=("Arial", 12), bg="#FFDAB9", relief="groove", width=30, height=2,
command=lambda i=i: self.select_option(i))
button.pack(pady=5)
self.option_buttons.append(button)
self.quit_button = tk.Button(master, text="退出游戏", font=("Arial", 12), bg="#FFDAB9", relief="groove", width=30, height=2,
command=self.quit_game)
self.quit_button.pack(pady=10)
self.current_step = 0
然后,我们定义了next_step
方法,用于显示下一步的故事文本和更新选项按钮。
def next_step(self):
if self.current_step >= len(self.story_texts):
messagebox.showinfo("游戏结束", "恭喜你完成修仙之旅!")
self.quit_game()
else:
story_text = self.story_texts[self.current_step]["text"]
options = self.story_texts[self.current_step]["options"]
messagebox.showinfo("故事", story_text)
self.update_options(options)
self.current_step += 1
在next_step
方法中,我们首先检查当前步骤是否超过了故事文本的数量。如果超过了,说明游戏已经结束了,我们会显示一个消息框来告诉玩家。
接着,我们从故事文本列表中获取当前步骤的故事文本和选项。然后,我们使用messagebox
模块显示故事文本的消息框,并调用update_options
方法来更新选项按钮。
最后,我们将当前步骤加1,表示进入下一步。
def update_options(self, options):
for i in range(len(self.option_buttons)):
if i < len(options):
self.option_buttons[i].configure(text=options[i], state=tk.NORMAL)
else:
self.option_buttons[i].configure(text="", state=tk.DISABLED)
接下来,我们定义了update_options
方法,用于更新选项按钮。
在update_options
方法中,我们使用一个循环来遍历选项按钮列表。如果当前按钮的索引小于选项数量,说明有对应的选项,我们将按钮的文本设置为选项文本,并将按钮设置为可用状态。如果当前按钮的索引超过了选项数量,说明没有对应的选项,我们将按钮的文本设置为空,并将按钮设置为不可用状态。
def select_option(self, option_index):
selected_option = self.story_texts[self.current_step - 1]["options"][option_index]
messagebox.showinfo("选择", f"你选择了:{selected_option}")
self.next_step()
然后,我们定义了select_option
方法,用于处理玩家选择的选项。
在select_option
方法中,我们首先根据选项的索引获取选项的文本。然后,我们使用messagebox
模块显示一个消息框,告诉玩家选择的选项。接着,我们调用next_step
方法进入下一步。
def quit_game(self):
self.master.destroy()
接下来,我们定义了quit_game
方法,用于退出游戏。
在quit_game
方法中,我们使用destroy
方法关闭游戏窗口,从而退出游戏。
最后,我们定义了main
函数作为游戏的入口点。
在main
函数中,我们首先创建一个tkinter
的根窗口对象root
,然后创建一个CultivationGame
对象game
,并将根窗口对象作为参数传入。接着,我们调用next_step
方法来开始游戏的第一步。最后,我们调用mainloop
方法来进入游戏循环,等待玩家的操作。
def main():
root = tk.Tk()
game = CultivationGame(root)
game.next_step()
root.mainloop()
if __name__ == '__main__':
main()
以下是游戏的全部代码
import tkinter as tk
from tkinter import messagebox
import random
class CultivationGame:
def __init__(self, master):
self.master = master
self.master.title("修仙游戏")
self.master.geometry("800x600")
self.master.config(bg="#FFEBCD")
self.story_texts = [
{"text": "你正在修炼炼气期,集中精神吸收天地灵气。", "options": ["继续修炼", "休息片刻"]},
{"text": "你遇到了一只妖兽,你决定与其战斗。", "options": ["使用火系法术攻击", "使用水系法术攻击", "逃跑"]},
{"text": "你闯入了一座迷宫,需要找到出口。", "options": ["向左转", "向右转", "向前走", "向后退"]},
{"text": "你遇到了一位仙人,他愿意传授你一项神通。", "options": ["学习飞行术", "学习隐身术", "拒绝学习"]},
{"text": "你遇到了一个难题,需要解决才能继续修炼。", "options": ["解开谜题", "寻找线索", "请求帮助"]},
{"text": "你得到了一本古老的法术书,里面记载着强大的法术。", "options": ["学习新的法术", "继续修炼已掌握的法术"]},
{"text": "你决定前往一座神秘的禁地,探索其中的宝藏。", "options": ["进入禁地", "寻找其他修仙者组队"]},
{"text": "你听说有一座仙山,据说山上有着无尽的灵气。", "options": ["攀登仙山", "寻找其他修仙法"]},
]
self.story_label = tk.Label(master, text="欢迎来到修仙游戏!", font=("Arial", 16), bg="#FFEBCD")
self.story_label.pack(pady=10)
self.option_buttons = []
for i in range(4):
button = tk.Button(master, text="", font=("Arial", 12), bg="#FFDAB9", relief="groove", width=30, height=2,
command=lambda i=i: self.select_option(i))
button.pack(pady=5)
self.option_buttons.append(button)
self.quit_button = tk.Button(master, text="退出游戏", font=("Arial", 12), bg="#FFDAB9", relief="groove", width=30, height=2,
command=self.quit_game)
self.quit_button.pack(pady=10)
self.current_step = 0
def next_step(self):
if self.current_step >= len(self.story_texts):
messagebox.showinfo("游戏结束", "恭喜你完成修仙之旅!")
self.quit_game()
else:
story_text = self.story_texts[self.current_step]["text"]
options = self.story_texts[self.current_step]["options"]
messagebox.showinfo("故事", story_text)
self.update_options(options)
self.current_step += 1
def update_options(self, options):
for i in range(len(self.option_buttons)):
if i < len(options):
self.option_buttons[i].configure(text=options[i], state=tk.NORMAL)
else:
self.option_buttons[i].configure(text="", state=tk.DISABLED)
def select_option(self, option_index):
selected_option = self.story_texts[self.current_step - 1]["options"][option_index]
messagebox.showinfo("选择", f"你选择了:{selected_option}")
self.next_step()
def quit_game(self):
self.master.destroy()
def main():
root = tk.Tk()
game = CultivationGame(root)
game.next_step()
root.mainloop()
if __name__ == '__main__':
main()
以下是游戏截图