一个简易的文字冒险游戏(有tkinter,有音效,仅限新手)

系列文章目录

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
tkinter的介绍:


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档


前言


提示:以下是本篇文章正文内容,下面案例可供参考

一、tkinter是什么?

Tkinter是Python的标准GUI(图形用户界面)库,它是基于Tk GUI工具包的轻量级接口。Tkinter使得在Python中创建图形界面变得相对简单和直观,适合于构建跨平台的桌面应用程序。

以下是Tkinter的一些基本概念和常用组件的介绍:

基本概念

  1. 窗口(Window):Tkinter应用程序的主窗口通常是通过Tk()类创建的。
  2. 小部件(Widget):Tkinter提供了多种小部件,如按钮、标签、文本框等,用于构建用户界面。
  3. 布局管理(Layout Management):Tkinter提供了三种布局管理器:packgridplace,用于管理小部件在窗口中的位置。

二、使用步骤

1.Label:用于显示文本或图像。

代码如下(示例):

from tkinter import Tk, Label
root = Tk()
label = Label(root, text="Hello, Tkinter!")
label.pack()
root.mainloop()

2.Button:用于创建按钮,可以绑定点击事件。

代码如下(示例):

from tkinter import Tk, Button
def on_click():
    print("Button clicked!")

root = Tk()
button = Button(root, text="Click Me", command=on_click)
button.pack()
root.mainloop()Entry:用于创建单行文本输入from tkinter import Tk, Entry
root = Tk()
entry = Entry(root)
entry.pack()
root.mainloop()
框。

4.

Text:用于创建多行文本输入框。

from tkinter import Tk, Text

root = Tk() text = Text(root)

text.pack()

root.mainloop()

 三.文件展示

import tkinter as tk
from tkinter import messagebox, simpledialog
import csv
import pygame as pg

pg.mixer.init()
pg.mixer.music.load("Head Empty.mp3")
pg.mixer.music.play(-1)
while True:
    class StarlightGame:
        def __init__(self, master):
            self.master = master
            self.master.title("星辰之光")

            self.name = ""
            self.achievements = []
            self.schedule = [0]
            self.a = [7]
            self.b = [7]
            self.c = [7]
            self.d = [7]
            self.e = [7]
            self.f = [7]
            self.g = [7]
            self.h = [7]
            self.i = [7]

            self.label = tk.Label(master, text="请输入你的名字:")
            self.label.pack()

            self.name_entry = tk.Entry(master)
            self.name_entry.pack()

            self.start_button = tk.Button(master, text="开始游戏", command=self.start_adventure)
            self.start_button.pack()

            self.story_text = tk.Text(master, height=10, width=50, wrap=tk.WORD)
            self.story_text.pack()

            self.achievement_text = tk.Label(master, text="", relief=tk.SUNKEN, borderwidth=2)
            self.achievement_text.pack()

            # 添加保存和加载按钮
            self.save_button = tk.Button(master, text="保存游戏", command=self.save_game)
            self.save_button.pack(pady=5)

            self.load_button = tk.Button(master, text="加载游戏", command=self.load_game)
            self.load_button.pack(pady=5)

        def all_music(self):
            # 选择音乐文件
            music_file = "Head Empty.mp3"
            pg.mixer.music.load(music_file)
            pg.mixer.music.play(-1)

        def victory_music(self):
            pg.mixer.music.stop()

            # 选择另一首音乐文件
            new_music_file = "7041.mp3"

            # 播放新的音乐
            pg.mixer.music.load(new_music_file)
            pg.mixer.music.play()

            while pg.mixer.music.get_busy():
                pg.time.Clock().tick(10)
        def end_music(self):
            # 停止当前播放的音乐
            pg.mixer.music.stop()

            # 选择另一首音乐文件
            new_music_file = "7042.mp3"

            # 播放新的音乐
            pg.mixer.music.load(new_music_file)
            pg.mixer.music.play()

        def save_game(self):
            # 获取游戏状态
            game_state = {
                'name': self.name,
                'achievements': self.achievements,
                'story_text': self.story_text.get('1.0', tk.END),
                'achievement_text': self.achievement_text.cget('text'),
                'schedule': self.schedule,
                'a': self.a,
                'b': self.b,
                'c': self.c,
                'd': self.d,
                'e': self.e,
                'f': self.f,
                'g': self.g,
                'h': self.h,
                'i': self.i
            }
            # 保存游戏状态到CSV文件
            with open('game_save.csv', 'w', newline='', encoding='utf-8') as file:
                writer = csv.writer(file)
                for key, value in game_state.items():
                    writer.writerow([key, value])

            messagebox.showinfo("保存游戏", "游戏已保存。")

        def load_game(self):
            # 从CSV文件加载游戏状态
            try:
                with open('game_save.csv', 'r', newline='', encoding='utf-8') as file:
                    reader = csv.reader(file)
                    game_state = {rows[0]: rows[1] for rows in reader}

                # 恢复游戏状态
                self.name = game_state['name']
                self.achievements = eval(game_state['achievements'])
                self.story_text.delete('1.0', tk.END)
                self.story_text.insert(tk.END, game_state['story_text'])
                self.achievement_text.config(text=game_state['achievement_text'])
                self.schedule = eval(game_state['schedule'])
                self.a = eval(game_state['a'])
                self.b = eval(game_state['b'])
                self.c = eval(game_state['c'])
                self.d = eval(game_state['d'])
                self.e = eval(game_state['e'])
                self.f = eval(game_state['f'])
                self.g = eval(game_state['g'])
                self.h = eval(game_state['h'])
                self.i = eval(game_state['i'])

                messagebox.showinfo("加载游戏", "游戏已加载。")
            except FileNotFoundError:
                messagebox.showerror("加载游戏", "没有找到保存的游戏文件。")
            except Exception as e:
                messagebox.showerror("加载游戏", f"加载游戏时出现错误:{e}")

        def start_adventure(self):

            if self.schedule[0] == 0:

                self.name = self.name_entry.get()
                self.update_story(f"欢迎你,{self.name}!\n")
                self.adventure_start()
            elif self.schedule[0] == 1:
                if self.a[0] == 0:
                    self.go_hunt_wolves()
                else:
                    self.stay_in_village()
            elif len(self.schedule) == 2:
                if self.schedule[1] == 0:
                    if self.b[0] == 0:
                        self.let_wolf_in()
                    elif self.b[0] == 1:
                        self.refuse_wolf()

                else:
                    if self.b[0] == 0:
                        self.meet_wolf()
                    else:
                        self.wander_alone()
            elif len(self.schedule) == 3:
                if self.schedule[2] == 0:
                    if self.c[0] == 0:
                        self.fight_wolf()
                    else:
                        self.escape_wolf()
                elif self.schedule[2] == 1:
                    if self.c[0] == 0:
                        self.search_for_food()
                    else:
                        self.return_to_village()
                elif self.schedule[2] == 2:
                    if self.c[0] == 0:
                        self.search_for_wolf_king()
                    elif self.c[0] == 1:
                        self.continue_alone()
            elif len(self.schedule) == 4:
                if self.schedule[3] == 0:
                    self.find_village_alliance()
                elif self.schedule[3] == 1:
                    if self.d[0] == 0:
                        self.jiannan()
                    else:
                        self.end_game()
                elif self.schedule[3] == 2:
                    self.jiannan()
            elif len(self.schedule) == 5:
                if self.schedule[4] == 0:
                    if self.e[0] == 0:
                        self.join_alliance()
                    else:
                        self.dont_join_alliance()
                if self.schedule[4] == 1:
                    if self.e[0] == 0:
                        self.dont_join_alliance()
            elif len(self.schedule) == 6:
                if self.f[0] == 0:
                    self.fight_alone()
                else:
                    self.escape_alone()
            elif len(self.schedule) == 7:
                if self.g[0] == 0:
                    self.continue_alone()
                else:
                    self.end_music()
                    self.end_game()

        def adventure_start(self):
            self.schedule = [0]
            self.a = [7]
            self.b = [7]
            self.c = [7]
            self.d = [7]
            self.e = [7]
            self.f = [7]
            self.g = [7]
            self.h = [7]
            self.i = [7]
            self.update_story("\n这是一个月圆之夜,今天是你的生日。")
            self.update_achievement("成就:无")

            choice = simpledialog.askstring("选择",
                                            f"首领找到你,问:‘{self.name},你已经成年了,是否要出去进行一番冒险。(1为同意2为拒绝)’")
            self.schedule[0] = 1
            if choice.strip() == '1':
                self.a[0] = 0
                self.go_hunt_wolves()
            else:
                self.a[0] = 1
                self.stay_in_village()

        def stay_in_village(self):

            self.schedule.append(0)
            self.update_story("\n你选择留守在村子里。首领虽无可奈何,也没强求。")
            self.update_story("这天傍晚,有一个人闯入你家,说是首领要求来的,请求进来。")

            choice = simpledialog.askstring("选择", "你要让他进来吗?(1为同意2为拒绝)")
            if choice.strip() == '1':
                self.schedule[0] = 2
                self.b[0] = 0
                self.let_wolf_in()
            else:
                self.schedule[0] = 2
                self.b[0] = 1
                self.refuse_wolf()

        def let_wolf_in(self):
            self.update_story("\n你同意了他的请求。")
            self.update_story("副首领嫌弃你的懦弱,把你打晕丢出了村子,你被路过的凶兽吃掉了。")
            self.update_achievement("————解锁成就:懦夫————")
            self.end_music()
            self.end_game()

        def refuse_wolf(self):
            self.update_story("\n你拒绝了他的请求。")
            self.update_story("到了晚上,你一个人坐在家中,忘记了去哨塔值班。")
            self.update_story(
                "一群狼人在潜伏在村子里的狼王的带领下,趁着夜色冲进了村子。村子里所有的人都被杀死了,除了你。")
            self.update_achievement("————解锁成就:幸存者————")
            self.decide_next()

        def decide_next(self):

            self.update_story("等到狼王带着狼人离开,村庄变成了废墟,你十分自责,看了看他们离开的方向。")

            choice = simpledialog.askstring("选择", "你是否要尝试去寻找狼王并复仇?(1去复仇,2去游荡)")
            if choice.strip() == '1':
                self.schedule.append(2)
                self.c[0] = 0
                self.search_for_wolf_king()

            else:
                self.schedule.append(2)
                self.c[0] = 1
                self.continue_alone()

        def search_for_wolf_king(self):
            self.update_story("\n你在追踪狼王的过程中被狼人发现,死于非命。")
            self.update_achievement("————解锁成就:大怨种————")
            self.end_music()
            self.end_game()





        def update_story(self, text):
            self.story_text.config(state=tk.NORMAL)
            self.story_text.insert(tk.END, text)
            self.story_text.config(state=tk.DISABLED)

        def update_achievement(self, achievement):
            self.achievement_text.config(text=achievement)

        def go_hunt_wolves(self):

            self.schedule.append(1)
            self.update_story("\n你选择了出发。\n你在野外前进,发现了一个人,他自我介绍说他叫莱奥,是个屠狼师。")
            join_choice = simpledialog.askstring("选择", f"莱奥请求加入你的队伍,你是否接纳他?(1为同意2为拒绝)")
            if join_choice.strip() == '1':
                self.schedule[0] = 2
                self.b[0] = 0
                self.update_story("你接纳了莱奥作为伙伴。")
                self.update_achievement("————解锁成就:伙伴————")
                self.meet_wolf()
            else:
                self.schedule[0] = 2
                self.b[0] = 1
                self.update_story("你没有接纳莱奥。")
                self.update_story("莱奥似乎有些失望,但他没有多说什么,只是祝你好运,然后离开了。")
                self.wander_alone()

        def wander_alone(self):

            self.update_story("\n你独自继续在森林中前行,没有莱奥的陪伴,你感到了一丝孤独。")

            difficulty_choice = simpledialog.askstring("选择",
                                                       "你在森林中迷路了,而且补给也快用完。你要怎么办?(1寻找食物,2返回村子)")
            if difficulty_choice.lower() in ['寻找食物', '1']:
                self.schedule.append(1)
                self.c[0] = 0
                self.search_for_food()
            elif difficulty_choice.lower() in ['返回村子', '2']:
                self.schedule.append(1)
                self.c[0] = 1
                self.return_to_village()

        def search_for_food(self):

            self.update_story("\n你开始在森林中寻找食物,希望能找到一些野果或狩猎小动物。")
            food_outcome = simpledialog.askinteger("选择", "你寻找食物的结果如何?(0或1决定你的命运)。", minvalue=0,
                                                   maxvalue=1)
            if food_outcome == 1:
                self.schedule.append(1)
                self.d[0] = 0
                self.update_story("你成功找到了食物,这让你有了继续前进的力气。")
                # 继续剧情
                self.schedule.append(1)
                self.e[0] = 0
                self.continue_adventure()
            elif food_outcome == 0:
                self.schedule.append(1)
                self.d[0] = 1
                self.update_story("你没有找到足够的食物,身体开始变得虚弱,最后你噶了")
                self.update_achievement("————解锁成就:饥荒————")
                self.end_music()
                self.end_game()

        def return_to_village(self):
            self.update_story("\n你决定返回村子,寻找更多的帮助和补给。")
            self.update_story("\n在路上发现了狼人的痕迹。")
            self.update_story("你回到了村子,并向首领报告了情况。")
            self.update_story("\n在你的帮助下村庄免受屠戮。")
            self.achievements.append("知难而退")
            self.update_achievement("————解锁成就:知难而退————")
            self.end_music()
            self.end_game()

        def continue_adventure(self):
            self.update_story("\n有了食物和补给,你决定继续你的冒险。")
            self.update_story("\n过了一段时间你决定回村庄看看。")
            self.update_story("\n村庄已经变成了废墟,你在废墟之上发现了狼人的痕迹。")
            self.update_story("\n你失魂落魄离开村庄去游荡。")
            self.continue_alone()

        def meet_wolf(self):

            # 假设与莱奥一起遇到了狼
            self.update_story("\n你和莱奥一起在森林中前行,突然遇到了一只狼。")
            fight_choice = simpledialog.askstring("选择", "你要如何应对?(1战斗,2逃跑)")
            if fight_choice.lower() in ['战斗', '1']:
                self.schedule.append(0)
                self.c[0] = 0
                self.fight_wolf()
            else:
                self.schedule.append(0)
                self.c[0] = 1
                self.escape_wolf()

        def fight_wolf(self):
            # 战斗胜利
            self.update_story("\n你勇敢地与狼战斗并胜利了!")
            self.update_story("在狼的身上,你发现了一张纸条,上面写着奇怪的符号。")
            self.update_story("\n你决定返回村子,寻找更多的帮助和补给。")
            self.achievements.append("狼腹")
            self.update_achievement("————解锁成就:狼腹————")
            # 继续剧情
            self.zhenjinng()

        def zhenjinng(self):
            self.update_story("\n村庄已经变成了废墟,你在废墟之上发现了狼人的痕迹。")
            self.update_story("\n你失魂落魄离开村庄去游荡。")
            self.discover_secret()

        def escape_wolf(self):
            # 逃跑失败,被狼攻击
            self.update_story("\n你尝试逃跑,但未能成功,最终被狼攻击,噶了。")
            self.end_music()
            self.end_game()

        def discover_secret(self):

            # 发现秘密
            self.update_story("\n你想起了狼人身上的纸条,纸条上的符号指引你前往一个神秘的地方。")
            secret_choice = simpledialog.askstring("选择", "你决定前往吗?(1为是,你已经被仇恨冲昏头脑,不能拒绝)")
            if secret_choice.lower() in ['1']:
                self.schedule.append(0)
                self.update_story("\n你决定跟随符号的指引,前往神秘之地。")
                # 假设在神秘之地找到了重要线索
                self.update_story("在那里,你找到了关于狼群的重要线索。")
                self.achievements.append("西线的尽头")
                self.update_achievement("————解锁成就:西线的尽头————")
                # 继续剧情
                self.find_village_alliance()

        def find_village_alliance(self):

            self.update_story("\n你发现了一个由附近村庄组成的联盟,他们共同抵抗狼群。")
            join_alliance_choice = simpledialog.askstring("选择", "你想要加入他们吗?(1为同意2为拒绝)")
            if join_alliance_choice.lower() in ['是', '1']:
                self.schedule.append(0)
                self.e[0] = 0
                self.join_alliance()
            else:
                self.schedule.append(0)
                self.e[0] = 1
                self.dont_join_alliance()

        def join_alliance(self):
            # 已存在的加入联盟的剧情
            self.update_story("\n你加入了村庄联盟,一起策划如何消灭狼群。")
            self.update_story("经过一番激战,你们成功地消灭了狼群。")
            self.achievements.append("村庄联盟")
            self.update_achievement("————解锁成就:村庄联盟————")
            self.victory_music()
            self.end_game()

        def dont_join_alliance(self):

            self.update_story("\n你选择不加入联盟,决定依靠自己的力量继续前进。")
            self.update_story("联盟的成员们对你的决定感到惊讶,但尊重你的选择。")

            # 假设玩家在独自前行中遇到了新的挑战
            challenge_choice = simpledialog.askstring("选择",
                                                      "你在独自前行的路上遇到了一群狼人先锋。你要怎么办?(1战斗,2逃跑)")
            if challenge_choice.lower() in ['战斗', '1']:
                self.schedule.append(0)
                self.f[0] = 0
                self.fight_alone()
            elif challenge_choice.lower() in ['逃跑', '2']:
                self.schedule.append(0)
                self.f[0] = 1
                self.escape_alone()

        def fight_alone(self):

            self.update_story("\n你勇敢地迎战狼人,虽然处境艰难,但你决心一搏。")
            # 战斗结果
            fight_outcome = simpledialog.askinteger("选择", "战斗的结果如何?(0或1决定你的命运)", minvalue=0,
                                                    maxvalue=1)
            if fight_outcome == 1:
                self.schedule.append(0)
                self.g[0] = 0
                self.update_story("你艰难地战胜了狼人,虽然受伤,但生存下来。")
                self.achievements.append("孤狼")
                self.update_achievement("————解锁成就:孤狼————")
                self.continue_alone()
            else:
                self.schedule.append(0)
                self.g[0] = 1
                self.update_story("你不幸战败,被狼人所杀。")
                self.end_music()
                self.end_game()

        def escape_alone(self):
            self.update_story("\n你选择逃跑,利用你对地形的熟悉,成功摆脱了狼人。")
            self.update_story("但你也迷失了方向,到处游荡的时候跌入了悬崖。")
            self.update_achievement("————解锁成就:失足者————")
            self.end_music()
            self.end_game()

        def continue_alone(self):
            self.schedule.append(2)
            self.update_story("\n你继续前行,虽然前路未知,但你决心找到狼王并结束这一切。")
            self.jiannan()


        def jiannan(self):
            self.update_story("\n在今后游荡的路途中,你结识了一群伙伴,并肩战斗,在战斗的过程中增长经验。")
            self.update_story("\n多年以后。")
            self.update_story("\n在某次冒险的途中你有一次发现了狼王的踪迹。")
            # 战斗结果
            fight_outcome = simpledialog.askinteger("选择",
                                                    "选择放弃心中的执念不去挑战狼王,不让伙伴们落入险境,还是去为死去的村民复仇。(1复仇0退缩)",
                                                    minvalue=0,
                                                    maxvalue=1)
            if fight_outcome == 1:
                self.update_story("\n你们艰难地战胜了狼人,你也因此失去了手臂。")
                self.update_story("\n你用剑支撑起半跪的身体,默念到:我为你们报仇了。")
                self.achievements.append("屠狼王")
                self.update_achievement("————解锁成就:屠狼王————")
                self.victory_music()
                self.end_game()
            else:
                self.update_story(
                    "\n但他始终没有勇气去面对那只曾经给他带来无尽痛苦的狼王。他害怕自己无法战胜狼王,害怕再次经历失去的痛苦。这种恐惧像一道无形的枷锁,束缚着他的心灵,让他无法迈出挑战狼王的那一步。")
                self.update_story(
                    f"\n在一个风和日丽的下午,{self.name}感到自己的生命即将走到尽头,闭上眼睛,他的心中充满了对过去的悔恨。")
                self.achievements.append("悔恨")
                self.update_achievement("————解锁成就:悔恨————")
                self.victory_music()
                self.end_game()

        def end_game(self):
            self.update_story("\n游戏结束——")
            self.update_achievement("欢迎再度游玩!")
            if True:
                self.all_music()
            self.adventure_start()


    root = tk.Tk()
    game = StarlightGame(root)

    # 启动事件循环
    root.mainloop()
音效:Head Empty ____https://m801.music.126.net/20240627183612/dcd373d5370ea4106652685ddd4f1037/jdymusic/obj/wo3DlMOGwrbDjj7DisKw/16758809448/4c5c/b212/eab3/63e51d26b89c222365ef76f39705ff97.mp3https://m801.music.126.net/20240627183612/dcd373d5370ea4106652685ddd4f1037/jdymusic/obj/wo3DlMOGwrbDjj7DisKw/16758809448/4c5c/b212/eab3/63e51d26b89c222365ef76f39705ff97.mp3

 7041.mp3---失败音效

7042.mp3-----胜利音效

(from P V Z)


总结

提示:这里对文章进行总结:

例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值