鱼C论坛

 找回密码
 立即注册
查看: 886|回复: 3

[已解决]游戏程序读写文件问题

[复制链接]
发表于 2021-12-26 16:14:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
闲来无事,敲了点代码,结果发现在读取文件这一块弄出问题了,求解决!
  • 先上报错代码界面:【电脑上上传不了图片,那就用云盘来试试吧】https://www.aliyundrive.com/s/jrGPh1e5Ux6
  • 这是代码:
    """文本来源:打泥泥,仅供学习使用。"""
    from sys import exit
    from random import randint
    from textwrap import dedent
    from sys import argv
    from os.path import exists
    
    import time
    plz = '> '
    import time
    
    script, filename, filename1 = argv
    txt = open(filename)
    
    class Scene(object):
    
        def enter(self):
            print("This scene is not yet configured.")
            print("Subclass it and implement enter()")
            exit(1)
    
    
    class Engine(object):
    
        def __init__(self, scene_map):
            self.scene_map = scene_map
    
        def play(self):
            current_scene = self.scene_map.opening_scene()
            last_scene = self.scene_map.next_scene('finished')
            while current_scene != last_scene:
                next_scene_name = current_scene.enter()
                current_scene = self.scene_map.next_scene(next_scene_name)
            current_scene.enter()
    
    class Background(Scene):
    
        def enter(self):
            def printer(text, delay=0.00002):
                """打字机效果"""
    
                for ch in text:
                    print(ch, end='', flush=True)
                    time.sleep(delay)
    
            printer(dedent("""
                        宇宙中有各式各样的文明,有身体由冰晶构成,生活在冰冻星球的冰人…也
                        有蓄意毁灭冰冻星球的人类,人类科技极度发达,在成功攻克永生难题之后
                        的一段时间,人们无需对生存担忧,拥有无限的时间,享受着各样的娱乐,
                        逐渐变得乏味,社会成了一潭死水,那时的人们会为了一点新鲜感不惜付
                        出生命。地球人口在那短短几十年间锐减近半,就在这时,一位综艺导演成
                        为了地球联邦总统。他懂得如何娱乐大众,同时他也足够残暴。他开始了
                        一场以宇宙为舞台的真人秀,一毁灭其他文明的方式娱乐大众,当一个个
                        低等文明在人类眼前碎裂消失时,几十亿人类为之疯狂。人类从宇宙深处
                        驶来,身后是一片焦土,无一幸免。此时,人类那被改造成巨炮的母星已
                        经靠近了这颗星球,这是他们的下一个目标。总统坐在最高的建筑之上,
                        脚下是如蚂蚁般密密麻麻的人群。总统感到地面开始震动,那是全球几十
                        亿人类同时在为这场节目欢呼惊叫(请输入1以继续...)"""))
    
    
            action = input(plz)
    
            if action == "1":
                print(dedent("""
                            验证成功,您的电脑可以正常工作,即将跳转...
                            """))
                return 'earth'
            else:
                print("WRONG!")
                return 'background'
    
    
    class Death(Scene):
    
        quips = [
                "Bad End...."
                "Even you live,but your plant will be destroyed ....."
                "Dead End..."
        ]
        def enter(self):
            print(Death.quips[randint(0, len(self.quips)-1)])
            exit(1)
    
    class Earth(Scene):
    
        def enter(self):
            print(dedent("""
                        总统对冰冻人说:挑战还是毁灭自己选一个吧(选项:挑战/毁灭):
                        """))
    
            action = input(plz)
    
            if action == '挑战':
                print(dedent("""
                            总统笑了笑,同意了你的要求,并说:让我想想你们的挑战将会是
                            什么......
                            """))
                return 'contain1'
            elif action == '毁灭':
                print("即便是你们准备好了迎战,但是总统只是挥了挥手,地球巨炮启动了,冰冻星球不复存在")
                return 'death'
    
            else:
                print("ERROR, 请重新输入:")
                return 'earth'
    class School(Scene):
    
        def enter(self):
            print(dedent("""
                        在那里你看到了自己的同类,你遇到了速度更快的对手,他们也都是爱跑
                        步的人,之后几年,在专业的训练下,你的速度和耐力大有提升,你能跑进
                        这所学校的前列。你顺理成章的进入了最好的队伍,校长带队来到了海边
                        让你们沿着海岸线跑五百公里,众人很快进入状态,你到达终点时才发现
                        自己是第一名,看来有人没发挥好,侥幸让你得了第一,你躺在地上,
                        身体一动不动,身体临近极限后的疲劳让你想永远这么躺着,你看到远处来人了
                        当你看清来人的身份,竟然奇迹般爬了起来,因为他是首领,首领再给你们
                        鼓励之后,你从首领的笑容中读到了隐藏极深的颓丧与失望(“用户输入:
                        抱歉/沉默”)
                        """))
    
            action = input(plz)
    
            if action == '抱歉':
                print(dedent("""在首领还没走开之前,你说了声抱歉,首领并未惊讶你的道歉,
                            而是摇头说"孩子你误会了,你不必感到愧疚,事实上你们都很优秀"
                            刚刚的话确实不是客套,确实是对你们真诚的寄托,“继续跑下去吧,
                            未来充满光明。”此后继续跑步,但是你的提升与训练量不成正比的减小了。
                            于是你在一个假期回到了家。
                            """))
    
                return 'sunstreet'
    
            elif action == '沉默':
                print("")
                return 'sunstreet'
    
            else:
                print("ERROR")
                return 'school'
    
    class Bar(Scene):
    
        def enter(self):
            print(dedent("""
                        王叔对你们说:练习跑步没有意义,人类只是为了折磨我们,而为了看着玩儿
                        所要求的,于是在某天,小美拿了一张图纸,对你说:这是飞行器,要跟我一起去
                        教训那些人类吗?(去/不去)
                        """))
    
            action = input(plz)
    
            if action == '去':
                print(dedent(""""
                            你第一次发现小美有机械方面的天赋,过了五年,你们造出了飞行器,
                            你们在接触地球时,甩开了地球的反击,于是你们降落到了铁皮外,
                            打开了一扇门,进入门后,有人类过来:你们身上有炸弹,不能再前进了。
                            """))
                return 'earth0'
    
    
    class Earth0(Scene):
    
    
        def enter(self):
    
            print(txt.read())
    
            action = input(plz)
    
            if action == '答应':
                print("你在地球上活得很好,但最后你见证了母星的毁灭。")
                return 0
            elif action == '攻击':
                print(dedent("""你和小美一起冲了上去,被炸死了。"""))
                return 'death'
            else:
                print("WRONG")
                return 'earth0'
    
    
    class SunStreet(Scene):
    
        def enter(self):
            print(dedent("""当你走到亲人眼前时,天快亮了,除了重逢的激动,他们好像还有对
                            其他事物的担忧,一番询问才知道,小美在知道你回来的消息后,出
                            门去接你了,可现在,你已经到了,小美没有回来。第一缕阳光照了
                            进来,人们都躲了回去,冰人要时刻躲避阳光,此时你(去/不去)
                            找小美。"""))
    
            action = input(plz)
    
            if action == '去':
                print(dedent("""
                            你压下心中的恐惧,跑了出去,你呼喊着阿美的名字,全力奔跑,太阳
                            快你一步摆脱地平线的遮挡,将光和热照射在你的身上,也照射在
                            这片土地的每个角落,你能感到代表死亡的温度,你感到身体越来越
                            热,长辈们说过,这是濒死前最后的感觉,不知跑了多久,你终于找到了
                            小美。你把他报了回去,回到房屋后因为太累瘫倒在了屋子里面,人们都
                            以为会看到被溶解的后背,但是人们却发现你的后背完好无损,经
                            检查,医生说你发生了病变,这种病会使你拥有抵御阳光的能力,
                            这个消息很快传开,首领见到了你,说你是冰人的希望,他也就像是
                            一个普通的老人一样嘘寒问暖。
                            """))
                return 'contain2'
    
            elif action == '不去':
                print(dedent("""
                            你等待着,期待小美只是去了其他地方,但到最后也没有出现,等人们
                            找到他时,他已经死了,小美因你而死,你心里时常感到愧疚,长时间
                            精神负担,让你无法奔跑,你被迫离开了学校回到了小镇,往后的人生你
                            一直活得混混洋洋,一直到被毁灭的那一天。
                            """))
                return 'death'
    
            else:
                print("ERRROR")
    
                return 'sunstreet'
    
    
    class IceForce(Scene):
    
        def enter(self):
            print(dedent("""很快,一段时间过去了,十年,二十年,七十年,你们一起货到了
                        冰冻星球被毁灭的那一天,你们倚靠在了一起,光线洒下,从容地迎接了
                        死亡。"""))
            return 'death'
    
    
    
    class Workplace(Scene):
    
        def enter(self):
            print(dedent("""七尺之躯已许国,难再许卿,你想到,你只好等着小美离开,你到首
                        领家里,阴着脸,对首领说不想干了,首领安抚:“跑下去吧,你会成为英雄
                        的。”
                        他这种像是在哄孩子的回答让你彻底爆发,此时在你眼中,他不再是首领
                        ,只是个招人厌的老头。你将压抑已久的话说了出来:你从一开始就错了,
                        海岸线有二十万公里长,相当于绕着这颗星球跑五圈,想通过普通的肉体
                        训练完成这个挑战,简直痴人说梦。
                        你消沉了两天,没人来打搅你,但跑步已经成为了习惯,你继续跑了下去
                        ,时间转眼过了二十年,你也麻木的跑了二十年,小镇只剩你一个人,所有人
                        都去了远方工作,起初几年你和小美还有联系,后来他说自己工作越来越
                        忙,联系也就断了。你为自己放了几天的假,去远方找小美,他好像从来
                        就没有变过,但不可否认你们都已经长大了。你想小美已经结了婚,但没想到
                        他竟然孤身一人还是,这里有很多高大的建筑,但这还只是雏形。小美
                        鼓励你继续做你热爱的事,几十年过去了,小美给你了一张照片,是建筑完成了,
                        你走进了这栋房子,里面摆着一排排容器,每个容器里面有一块细小晶体,
                        那是冰人的胚胎,首领让你在这个房间住上一段时间。然后首领启动了发动机
                        ,冰球水都融化了,海岸线包围了这栋房子。他的脚下,便是这个星球唯一的
                        一块土地......
                        """))
    
    
            action = input(plz)
    
            if action == '0':
                return 0
            elif action == '1':
                print("谢谢您,请在后面写出您的意见(这是第一行。")
                target = open(filename1, 'w')
                target = truncate()
                line1 = input("line1:")
                line2 = input("line2:")
                line3 = input("line3:")
                line = '{}\n{}\n{}\n'.format(line1, line2, line3)
                target.write(line)
                target.close()
            else:
                print("ERROR,即将退出......")
                return 0
    
    
    class Contain1(Scene):
    
        def enter(self):
            print(dedent("""
                        当人类被观测到的时候就有人断定人类科技水平毁灭冰人文明易如反掌,
                        首领要保证文明存续下去,准备好了顺从......
                        你出生的时候,地球已经在那里了,长辈们都不愿意提及关于那颗星球的
                        的故事,他们只说那是二十年前出现的,你要继续问,长辈们只会让你别
                        问那么多,好好练跑步,为冰人争口气在将来的时候,从你出生的时候,
                        就知道周围最常常提及的事就是跑步,你们适合跑步,压缩了一切社会时
                        间来进行跑步,你们也有奔跑的传统,社会也因此停摆,你知道这与地球
                        有关,你单纯爱好跑步,你的朋友小美追不上你,他不让你等了,自己跑。
                        你的选择是(继续跑/陪小美一起):
                        """))
    
            action = input(plz)
    
            if action == '继续跑':
                print(dedent("""
                            你继续向前跑,告诉小美会在前面等他,你的速度越来越快,逐渐
                            发现自己是跑的最快的人然后你被选进了特殊学校。
                            """))
                return 'school'
    
            elif action == '陪小美一起':
                print(dedent("""你没有继续前进,而是留下来和小美一起跑,你也许能跑得更快,
                            但你只想留在小美身边,天亮回家,天黑一起跑步,你和小美要去找
                            原因,于是在酒吧找到了王叔,
                            """))
                return 'bar'
    
            else:
                print("ERROR")
                return 'contain1'
    
    class Contain2(Scene):
    
        def enter(self):
            print(dedent("""
                        转眼过去三十年,你熟悉了在阳光下跑步的感觉,全民跑步的方案被放弃,
                        太阳落山之后,你跑过了家里的村庄,哪里很多人都去了远方工作。回家之后,
                        你得知小美也要走了,于是你说:(一起走/沉默)
                        """))
    
            action = input(plz)
    
            if action == '一起走':
                print(dedent("""你说:我和你一起走,你向小美解释了原因,毕竟努力也是无用的,还不如
                            好好享受这最后一段时光,你和小美逃走了,但是你没想到这个决定
                            的严重性,首领在你失踪后的第三天发布了最高级别的通缉令,不惜一切代价
                            甚至派军队要将你抓回,你知道已经没有退路了,你们来到了冰冻星球
                            未被开发的大片区域,冰冻森林。
                            """))
    
                return 'iceforce'
    
            elif action == '沉默':
                print(dedent("""
                            afd
                            """))
    
                return 'workplace'
    
            else:
                print("ERROR")
    
                return 'contain2'
    
    
    class Map(object):
    
        scenes = {
            'background':Background(),
            'death':Death(),
            'earth':Earth(),
            'school':School(),
            'bar':Bar(),
            'sunstreet':SunStreet(),
    
            'iceforce':IceForce(),
            'workplace':Workplace(),
            'contain1':Contain1(),
            'contain2':Contain2(),
            'earth0':Earth0(),
        }
    
        def __init__(self, start_scene):
            self.start_scene = start_scene
    
        def next_scene(self, scene_name):
            val = Map.scenes.get(scene_name)
            return val
    
        def opening_scene(self):
            return self.next_scene(self.start_scene)
    
    
    a_map = Map('background')
    a_game = Engine(a_map)
    a_game.play()
    希望有大佬能帮忙解决问题!!!
最佳答案
2021-12-27 20:47:27
本帖最后由 z5560636 于 2021-12-27 20:49 编辑
"""文本来源:打泥泥,仅供学习使用。"""
from sys import exit
from random import randint
from textwrap import dedent
from sys import argv
from os.path import exists
import os

import time
plz = '> '
import time

script, filename, filename1 = argv
txt = open(filename,encoding='utf-8')

class Scene(object):

    def enter(self):
        def printer(text, delay=0.3):
            """打字机效果"""

            for ch in text:
                print(ch, end='', flush=True)
                time.sleep(delay)

        printer(dedent("""
                    孩子,你要好好学习啊,希望这样的悲剧不要再次重演,祖国的未来,就交付到你们手上了!!!!"""))


class Engine(object):

    def __init__(self, scene_map):
        self.scene_map = scene_map

    def play(self):
        current_scene = self.scene_map.opening_scene()
        last_scene = self.scene_map.next_scene('finished')
        while current_scene != last_scene:
            next_scene_name = current_scene.enter()
            current_scene = self.scene_map.next_scene(next_scene_name)
        current_scene.enter()

class Background(Scene):

    def enter(self):
        def printer(text, delay=0.00002):
            """打字机效果"""

            for ch in text:
                print(ch, end='', flush=True)
                time.sleep(delay)

        printer(dedent("""
                    宇宙中有各式各样的文明,有身体由冰晶构成,生活在冰冻星球的冰人…也
                    有蓄意毁灭冰冻星球的人类,人类科技极度发达,在成功攻克永生难题之后
                    的一段时间,人们无需对生存担忧,拥有无限的时间,享受着各样的娱乐,
                    逐渐变得乏味,社会成了一潭死水,那时的人们会为了一点新鲜感不惜付
                    出生命。地球人口在那短短几十年间锐减近半,就在这时,一位综艺导演成
                    为了地球联邦总统。他懂得如何娱乐大众,同时他也足够残暴。他开始了
                    一场以宇宙为舞台的真人秀,一毁灭其他文明的方式娱乐大众,当一个个
                    低等文明在人类眼前碎裂消失时,几十亿人类为之疯狂。人类从宇宙深处
                    驶来,身后是一片焦土,无一幸免。此时,人类那被改造成巨炮的母星已
                    经靠近了这颗星球,这是他们的下一个目标。总统坐在最高的建筑之上,
                    脚下是如蚂蚁般密密麻麻的人群。总统感到地面开始震动,那是全球几十
                    亿人类同时在为这场节目欢呼惊叫(请输入1以继续...)"""))


        action = input(plz)

        if action == "1":
            print(dedent("""
                        验证成功,您的电脑可以正常工作,即将跳转...
                        """))
            return 'earth'
        else:
            print("WRONG!")
            return 'background'


class Death(Scene):

    quips = [
            "Bad End...."
            "Even you live,but your plant will be destroyed ....."
            "Dead End..."
    ]
    def enter(self):
        print(Death.quips[randint(0, len(self.quips)-1)])
        exit(1)

class Earth(Scene):

    def enter(self):
        print(dedent("""
                    总统对冰冻人说:挑战还是毁灭自己选一个吧(选项:挑战/毁灭):
                    """))

        action = input(plz)

        if action == '挑战':
            print(dedent("""
                        总统笑了笑,同意了你的要求,并说:让我想想你们的挑战将会是
                        什么......
                        """))
            return 'contain1'
        elif action == '毁灭':
            print("即便是你们准备好了迎战,但是总统只是挥了挥手,地球巨炮启动了,冰冻星球不复存在")
            return 'death'

        else:
            print("ERROR, 请重新输入:")
            return 'earth'
class School(Scene):

    def enter(self):
        print(dedent("""
                    在那里你看到了自己的同类,你遇到了速度更快的对手,他们也都是爱跑
                    步的人,之后几年,在专业的训练下,你的速度和耐力大有提升,你能跑进
                    这所学校的前列。你顺理成章的进入了最好的队伍,校长带队来到了海边
                    让你们沿着海岸线跑五百公里,众人很快进入状态,你到达终点时才发现
                    自己是第一名,看来有人没发挥好,侥幸让你得了第一,你躺在地上,
                    身体一动不动,身体临近极限后的疲劳让你想永远这么躺着,你看到远处来人了
                    当你看清来人的身份,竟然奇迹般爬了起来,因为他是首领,首领再给你们
                    鼓励之后,你从首领的笑容中读到了隐藏极深的颓丧与失望(“用户输入:
                    抱歉/沉默”)
                    """))

        action = input(plz)

        if action == '抱歉':
            print(dedent("""在首领还没走开之前,你说了声抱歉,首领并未惊讶你的道歉,
                        而是摇头说"孩子你误会了,你不必感到愧疚,事实上你们都很优秀"
                        刚刚的话确实不是客套,确实是对你们真诚的寄托,“继续跑下去吧,
                        未来充满光明。”此后继续跑步,但是你的提升与训练量不成正比的减小了。
                        于是你在一个假期回到了家。
                        """))

            return 'sunstreet'

        elif action == '沉默':
            print("")
            return 'sunstreet'

        else:
            print("ERROR")
            return 'school'

class Bar(Scene):

    def enter(self):
        print(dedent("""
                    王叔对你们说:练习跑步没有意义,人类只是为了折磨我们,而为了看着玩儿
                    所要求的,于是在某天,小美拿了一张图纸,对你说:这是飞行器,要跟我一起去
                    教训那些人类吗?(去/不去)
                    """))

        action = input(plz)

        if action == '去':
            print(dedent(""""
                        你第一次发现小美有机械方面的天赋,过了五年,你们造出了飞行器,
                        你们在接触地球时,甩开了地球的反击,于是你们降落到了铁皮外,
                        打开了一扇门,进入门后,有人类过来:你们身上有炸弹,不能再前进了。
                        """))
            return 'earth0'


class Earth0(Scene):


    def enter(self):

        print(txt.read())

        action = input(plz)

        if action == '答应':
            print("你在地球上活得很好,但最后你见证了母星的毁灭。")
            return 'finished'
        elif action == '攻击':
            print(dedent("""你和小美一起冲了上去,被炸死了。"""))
            return 'death'
        else:
            print("WRONG")
            return 'earth0'


class SunStreet(Scene):

    def enter(self):
        print(dedent("""当你走到亲人眼前时,天快亮了,除了重逢的激动,他们好像还有对
                        其他事物的担忧,一番询问才知道,小美在知道你回来的消息后,出
                        门去接你了,可现在,你已经到了,小美没有回来。第一缕阳光照了
                        进来,人们都躲了回去,冰人要时刻躲避阳光,此时你(去/不去)
                        找小美。"""))

        action = input(plz)

        if action == '去':
            print(dedent("""
                        你压下心中的恐惧,跑了出去,你呼喊着阿美的名字,全力奔跑,太阳
                        快你一步摆脱地平线的遮挡,将光和热照射在你的身上,也照射在
                        这片土地的每个角落,你能感到代表死亡的温度,你感到身体越来越
                        热,长辈们说过,这是濒死前最后的感觉,不知跑了多久,你终于找到了
                        小美。你把他报了回去,回到房屋后因为太累瘫倒在了屋子里面,人们都
                        以为会看到被溶解的后背,但是人们却发现你的后背完好无损,经
                        检查,医生说你发生了病变,这种病会使你拥有抵御阳光的能力,
                        这个消息很快传开,首领见到了你,说你是冰人的希望,他也就像是
                        一个普通的老人一样嘘寒问暖。
                        """))
            return 'contain2'

        elif action == '不去':
            print(dedent("""
                        你等待着,期待小美只是去了其他地方,但到最后也没有出现,等人们
                        找到他时,他已经死了,小美因你而死,你心里时常感到愧疚,长时间
                        精神负担,让你无法奔跑,你被迫离开了学校回到了小镇,往后的人生你
                        一直活得混混洋洋,一直到被毁灭的那一天。
                        """))
            return 'death'

        else:
            print("ERRROR")

            return 'sunstreet'


class IceForce(Scene):

    def enter(self):
        print(dedent("""很快,一段时间过去了,十年,二十年,七十年,你们一起货到了
                    冰冻星球被毁灭的那一天,你们倚靠在了一起,光线洒下,从容地迎接了
                    死亡。"""))
        return 'death'



class Workplace(Scene):

    def enter(self):
        print(dedent("""七尺之躯已许国,难再许卿,你想到,你只好等着小美离开,你到首
                    领家里,阴着脸,对首领说不想干了,首领安抚:“跑下去吧,你会成为英雄
                    的。”
                    他这种像是在哄孩子的回答让你彻底爆发,此时在你眼中,他不再是首领
                    ,只是个招人厌的老头。你将压抑已久的话说了出来:你从一开始就错了,
                    海岸线有二十万公里长,相当于绕着这颗星球跑五圈,想通过普通的肉体
                    训练完成这个挑战,简直痴人说梦。
                    你消沉了两天,没人来打搅你,但跑步已经成为了习惯,你继续跑了下去
                    ,时间转眼过了二十年,你也麻木的跑了二十年,小镇只剩你一个人,所有人
                    都去了远方工作,起初几年你和小美还有联系,后来他说自己工作越来越
                    忙,联系也就断了。你为自己放了几天的假,去远方找小美,他好像从来
                    就没有变过,但不可否认你们都已经长大了。你想小美已经结了婚,但没想到
                    他竟然孤身一人还是,这里有很多高大的建筑,但这还只是雏形。小美
                    鼓励你继续做你热爱的事,几十年过去了,小美给你了一张照片,是建筑完成了,
                    你走进了这栋房子,里面摆着一排排容器,每个容器里面有一块细小晶体,
                    那是冰人的胚胎,首领让你在这个房间住上一段时间。然后首领启动了发动机
                    ,冰球水都融化了,海岸线包围了这栋房子。他的脚下,便是这个星球唯一的
                    一块土地......
                    """))


        action = input(plz)

        if action == '0':
            return 0
        elif action == '1':
            print("谢谢您,请在后面写出您的意见(这是第一行。")
            target = open(filename1, 'w')
            # target = truncate()   # 这个是什么函数?
            line1 = input("line1:")
            line2 = input("line2:")
            line3 = input("line3:")
            line = '{}\n{}\n{}\n'.format(line1, line2, line3)
            target.write(line)
            target.close()
            return 'finished'
        else:
            print("ERROR,即将退出......")
            return 0


class Contain1(Scene):

    def enter(self):
        print(dedent("""
                    当人类被观测到的时候就有人断定人类科技水平毁灭冰人文明易如反掌,
                    首领要保证文明存续下去,准备好了顺从......
                    你出生的时候,地球已经在那里了,长辈们都不愿意提及关于那颗星球的
                    的故事,他们只说那是二十年前出现的,你要继续问,长辈们只会让你别
                    问那么多,好好练跑步,为冰人争口气在将来的时候,从你出生的时候,
                    就知道周围最常常提及的事就是跑步,你们适合跑步,压缩了一切社会时
                    间来进行跑步,你们也有奔跑的传统,社会也因此停摆,你知道这与地球
                    有关,你单纯爱好跑步,你的朋友小美追不上你,他不让你等了,自己跑。
                    你的选择是(继续跑/陪小美一起):
                    """))

        action = input(plz)

        if action == '继续跑':
            print(dedent("""
                        你继续向前跑,告诉小美会在前面等他,你的速度越来越快,逐渐
                        发现自己是跑的最快的人然后你被选进了特殊学校。
                        """))
            return 'school'

        elif action == '陪小美一起':
            print(dedent("""你没有继续前进,而是留下来和小美一起跑,你也许能跑得更快,
                        但你只想留在小美身边,天亮回家,天黑一起跑步,你和小美要去找
                        原因,于是在酒吧找到了王叔,
                        """))
            return 'bar'

        else:
            print("ERROR")
            return 'contain1'

class Contain2(Scene):

    def enter(self):
        print(dedent("""
                    转眼过去三十年,你熟悉了在阳光下跑步的感觉,全民跑步的方案被放弃,
                    太阳落山之后,你跑过了家里的村庄,哪里很多人都去了远方工作。回家之后,
                    你得知小美也要走了,于是你说:(一起走/沉默)
                    """))

        action = input(plz)

        if action == '一起走':
            print(dedent("""你说:我和你一起走,你向小美解释了原因,毕竟努力也是无用的,还不如
                        好好享受这最后一段时光,你和小美逃走了,但是你没想到这个决定
                        的严重性,首领在你失踪后的第三天发布了最高级别的通缉令,不惜一切代价
                        甚至派军队要将你抓回,你知道已经没有退路了,你们来到了冰冻星球
                        未被开发的大片区域,冰冻森林。
                        """))

            return 'iceforce'

        elif action == '沉默':
            print(dedent("""
                        ..........
                        """))          #  afd 又是什么?

            return 'workplace'

        else:
            print("ERROR")

            return 'contain2'


class Map(object):

    scenes = {
        'background':Background(),
        'death':Death(),
        'earth':Earth(),
        'school':School(),
        'bar':Bar(),
        'sunstreet':SunStreet(),

        'iceforce':IceForce(),
        'workplace':Workplace(),
        'contain1':Contain1(),
        'contain2':Contain2(),
        'earth0':Earth0(),
        'finished': Scene(),
    }

    def __init__(self, start_scene):
        self.start_scene = start_scene

    def next_scene(self, scene_name):
        val = Map.scenes.get(scene_name)
        return val

    def opening_scene(self):
        return self.next_scene(self.start_scene)


a_map = Map('background')
a_game = Engine(a_map)
a_game.play()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-12-27 15:56:20 | 显示全部楼层
你把你用的测试数据也写上吧,要是晚上没人帮你改,我就帮你弄。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-27 16:13:27 | 显示全部楼层
z5560636 发表于 2021-12-27 15:56
你把你用的测试数据也写上吧,要是晚上没人帮你改,我就帮你弄。

先要在相同路径创建文件:ex45a.txt,test.txt是要给出的建议生成的文件
ex45a.txt是剧情内容:人类说:你太低估我们了,你那原始的炸药只会炸死你自己
除此之外,什么都做不到,你们刚才闯进来的精彩表现,不过是
逢场作戏,你们可以在地球作为明星,也可以等我开枪打死你们,
或者你们自己引爆炸弹。小美眼神里充满了愤怒,给你使了个眼色,
准备出手攻击,你的选择是:(答应/攻击)
python ex45.py ex45a.txt test.txt
1
挑战
继续跑
抱歉

沉默
1

最后那个输入1的时候应该不会有提示,直接输入1就行了,这是其中一个,现在是下一个;
python ex45.py ex45a.txt test.txt
1
挑战
陪小美一起

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-27 20:47:27 | 显示全部楼层    本楼为最佳答案   
本帖最后由 z5560636 于 2021-12-27 20:49 编辑
"""文本来源:打泥泥,仅供学习使用。"""
from sys import exit
from random import randint
from textwrap import dedent
from sys import argv
from os.path import exists
import os

import time
plz = '> '
import time

script, filename, filename1 = argv
txt = open(filename,encoding='utf-8')

class Scene(object):

    def enter(self):
        def printer(text, delay=0.3):
            """打字机效果"""

            for ch in text:
                print(ch, end='', flush=True)
                time.sleep(delay)

        printer(dedent("""
                    孩子,你要好好学习啊,希望这样的悲剧不要再次重演,祖国的未来,就交付到你们手上了!!!!"""))


class Engine(object):

    def __init__(self, scene_map):
        self.scene_map = scene_map

    def play(self):
        current_scene = self.scene_map.opening_scene()
        last_scene = self.scene_map.next_scene('finished')
        while current_scene != last_scene:
            next_scene_name = current_scene.enter()
            current_scene = self.scene_map.next_scene(next_scene_name)
        current_scene.enter()

class Background(Scene):

    def enter(self):
        def printer(text, delay=0.00002):
            """打字机效果"""

            for ch in text:
                print(ch, end='', flush=True)
                time.sleep(delay)

        printer(dedent("""
                    宇宙中有各式各样的文明,有身体由冰晶构成,生活在冰冻星球的冰人…也
                    有蓄意毁灭冰冻星球的人类,人类科技极度发达,在成功攻克永生难题之后
                    的一段时间,人们无需对生存担忧,拥有无限的时间,享受着各样的娱乐,
                    逐渐变得乏味,社会成了一潭死水,那时的人们会为了一点新鲜感不惜付
                    出生命。地球人口在那短短几十年间锐减近半,就在这时,一位综艺导演成
                    为了地球联邦总统。他懂得如何娱乐大众,同时他也足够残暴。他开始了
                    一场以宇宙为舞台的真人秀,一毁灭其他文明的方式娱乐大众,当一个个
                    低等文明在人类眼前碎裂消失时,几十亿人类为之疯狂。人类从宇宙深处
                    驶来,身后是一片焦土,无一幸免。此时,人类那被改造成巨炮的母星已
                    经靠近了这颗星球,这是他们的下一个目标。总统坐在最高的建筑之上,
                    脚下是如蚂蚁般密密麻麻的人群。总统感到地面开始震动,那是全球几十
                    亿人类同时在为这场节目欢呼惊叫(请输入1以继续...)"""))


        action = input(plz)

        if action == "1":
            print(dedent("""
                        验证成功,您的电脑可以正常工作,即将跳转...
                        """))
            return 'earth'
        else:
            print("WRONG!")
            return 'background'


class Death(Scene):

    quips = [
            "Bad End...."
            "Even you live,but your plant will be destroyed ....."
            "Dead End..."
    ]
    def enter(self):
        print(Death.quips[randint(0, len(self.quips)-1)])
        exit(1)

class Earth(Scene):

    def enter(self):
        print(dedent("""
                    总统对冰冻人说:挑战还是毁灭自己选一个吧(选项:挑战/毁灭):
                    """))

        action = input(plz)

        if action == '挑战':
            print(dedent("""
                        总统笑了笑,同意了你的要求,并说:让我想想你们的挑战将会是
                        什么......
                        """))
            return 'contain1'
        elif action == '毁灭':
            print("即便是你们准备好了迎战,但是总统只是挥了挥手,地球巨炮启动了,冰冻星球不复存在")
            return 'death'

        else:
            print("ERROR, 请重新输入:")
            return 'earth'
class School(Scene):

    def enter(self):
        print(dedent("""
                    在那里你看到了自己的同类,你遇到了速度更快的对手,他们也都是爱跑
                    步的人,之后几年,在专业的训练下,你的速度和耐力大有提升,你能跑进
                    这所学校的前列。你顺理成章的进入了最好的队伍,校长带队来到了海边
                    让你们沿着海岸线跑五百公里,众人很快进入状态,你到达终点时才发现
                    自己是第一名,看来有人没发挥好,侥幸让你得了第一,你躺在地上,
                    身体一动不动,身体临近极限后的疲劳让你想永远这么躺着,你看到远处来人了
                    当你看清来人的身份,竟然奇迹般爬了起来,因为他是首领,首领再给你们
                    鼓励之后,你从首领的笑容中读到了隐藏极深的颓丧与失望(“用户输入:
                    抱歉/沉默”)
                    """))

        action = input(plz)

        if action == '抱歉':
            print(dedent("""在首领还没走开之前,你说了声抱歉,首领并未惊讶你的道歉,
                        而是摇头说"孩子你误会了,你不必感到愧疚,事实上你们都很优秀"
                        刚刚的话确实不是客套,确实是对你们真诚的寄托,“继续跑下去吧,
                        未来充满光明。”此后继续跑步,但是你的提升与训练量不成正比的减小了。
                        于是你在一个假期回到了家。
                        """))

            return 'sunstreet'

        elif action == '沉默':
            print("")
            return 'sunstreet'

        else:
            print("ERROR")
            return 'school'

class Bar(Scene):

    def enter(self):
        print(dedent("""
                    王叔对你们说:练习跑步没有意义,人类只是为了折磨我们,而为了看着玩儿
                    所要求的,于是在某天,小美拿了一张图纸,对你说:这是飞行器,要跟我一起去
                    教训那些人类吗?(去/不去)
                    """))

        action = input(plz)

        if action == '去':
            print(dedent(""""
                        你第一次发现小美有机械方面的天赋,过了五年,你们造出了飞行器,
                        你们在接触地球时,甩开了地球的反击,于是你们降落到了铁皮外,
                        打开了一扇门,进入门后,有人类过来:你们身上有炸弹,不能再前进了。
                        """))
            return 'earth0'


class Earth0(Scene):


    def enter(self):

        print(txt.read())

        action = input(plz)

        if action == '答应':
            print("你在地球上活得很好,但最后你见证了母星的毁灭。")
            return 'finished'
        elif action == '攻击':
            print(dedent("""你和小美一起冲了上去,被炸死了。"""))
            return 'death'
        else:
            print("WRONG")
            return 'earth0'


class SunStreet(Scene):

    def enter(self):
        print(dedent("""当你走到亲人眼前时,天快亮了,除了重逢的激动,他们好像还有对
                        其他事物的担忧,一番询问才知道,小美在知道你回来的消息后,出
                        门去接你了,可现在,你已经到了,小美没有回来。第一缕阳光照了
                        进来,人们都躲了回去,冰人要时刻躲避阳光,此时你(去/不去)
                        找小美。"""))

        action = input(plz)

        if action == '去':
            print(dedent("""
                        你压下心中的恐惧,跑了出去,你呼喊着阿美的名字,全力奔跑,太阳
                        快你一步摆脱地平线的遮挡,将光和热照射在你的身上,也照射在
                        这片土地的每个角落,你能感到代表死亡的温度,你感到身体越来越
                        热,长辈们说过,这是濒死前最后的感觉,不知跑了多久,你终于找到了
                        小美。你把他报了回去,回到房屋后因为太累瘫倒在了屋子里面,人们都
                        以为会看到被溶解的后背,但是人们却发现你的后背完好无损,经
                        检查,医生说你发生了病变,这种病会使你拥有抵御阳光的能力,
                        这个消息很快传开,首领见到了你,说你是冰人的希望,他也就像是
                        一个普通的老人一样嘘寒问暖。
                        """))
            return 'contain2'

        elif action == '不去':
            print(dedent("""
                        你等待着,期待小美只是去了其他地方,但到最后也没有出现,等人们
                        找到他时,他已经死了,小美因你而死,你心里时常感到愧疚,长时间
                        精神负担,让你无法奔跑,你被迫离开了学校回到了小镇,往后的人生你
                        一直活得混混洋洋,一直到被毁灭的那一天。
                        """))
            return 'death'

        else:
            print("ERRROR")

            return 'sunstreet'


class IceForce(Scene):

    def enter(self):
        print(dedent("""很快,一段时间过去了,十年,二十年,七十年,你们一起货到了
                    冰冻星球被毁灭的那一天,你们倚靠在了一起,光线洒下,从容地迎接了
                    死亡。"""))
        return 'death'



class Workplace(Scene):

    def enter(self):
        print(dedent("""七尺之躯已许国,难再许卿,你想到,你只好等着小美离开,你到首
                    领家里,阴着脸,对首领说不想干了,首领安抚:“跑下去吧,你会成为英雄
                    的。”
                    他这种像是在哄孩子的回答让你彻底爆发,此时在你眼中,他不再是首领
                    ,只是个招人厌的老头。你将压抑已久的话说了出来:你从一开始就错了,
                    海岸线有二十万公里长,相当于绕着这颗星球跑五圈,想通过普通的肉体
                    训练完成这个挑战,简直痴人说梦。
                    你消沉了两天,没人来打搅你,但跑步已经成为了习惯,你继续跑了下去
                    ,时间转眼过了二十年,你也麻木的跑了二十年,小镇只剩你一个人,所有人
                    都去了远方工作,起初几年你和小美还有联系,后来他说自己工作越来越
                    忙,联系也就断了。你为自己放了几天的假,去远方找小美,他好像从来
                    就没有变过,但不可否认你们都已经长大了。你想小美已经结了婚,但没想到
                    他竟然孤身一人还是,这里有很多高大的建筑,但这还只是雏形。小美
                    鼓励你继续做你热爱的事,几十年过去了,小美给你了一张照片,是建筑完成了,
                    你走进了这栋房子,里面摆着一排排容器,每个容器里面有一块细小晶体,
                    那是冰人的胚胎,首领让你在这个房间住上一段时间。然后首领启动了发动机
                    ,冰球水都融化了,海岸线包围了这栋房子。他的脚下,便是这个星球唯一的
                    一块土地......
                    """))


        action = input(plz)

        if action == '0':
            return 0
        elif action == '1':
            print("谢谢您,请在后面写出您的意见(这是第一行。")
            target = open(filename1, 'w')
            # target = truncate()   # 这个是什么函数?
            line1 = input("line1:")
            line2 = input("line2:")
            line3 = input("line3:")
            line = '{}\n{}\n{}\n'.format(line1, line2, line3)
            target.write(line)
            target.close()
            return 'finished'
        else:
            print("ERROR,即将退出......")
            return 0


class Contain1(Scene):

    def enter(self):
        print(dedent("""
                    当人类被观测到的时候就有人断定人类科技水平毁灭冰人文明易如反掌,
                    首领要保证文明存续下去,准备好了顺从......
                    你出生的时候,地球已经在那里了,长辈们都不愿意提及关于那颗星球的
                    的故事,他们只说那是二十年前出现的,你要继续问,长辈们只会让你别
                    问那么多,好好练跑步,为冰人争口气在将来的时候,从你出生的时候,
                    就知道周围最常常提及的事就是跑步,你们适合跑步,压缩了一切社会时
                    间来进行跑步,你们也有奔跑的传统,社会也因此停摆,你知道这与地球
                    有关,你单纯爱好跑步,你的朋友小美追不上你,他不让你等了,自己跑。
                    你的选择是(继续跑/陪小美一起):
                    """))

        action = input(plz)

        if action == '继续跑':
            print(dedent("""
                        你继续向前跑,告诉小美会在前面等他,你的速度越来越快,逐渐
                        发现自己是跑的最快的人然后你被选进了特殊学校。
                        """))
            return 'school'

        elif action == '陪小美一起':
            print(dedent("""你没有继续前进,而是留下来和小美一起跑,你也许能跑得更快,
                        但你只想留在小美身边,天亮回家,天黑一起跑步,你和小美要去找
                        原因,于是在酒吧找到了王叔,
                        """))
            return 'bar'

        else:
            print("ERROR")
            return 'contain1'

class Contain2(Scene):

    def enter(self):
        print(dedent("""
                    转眼过去三十年,你熟悉了在阳光下跑步的感觉,全民跑步的方案被放弃,
                    太阳落山之后,你跑过了家里的村庄,哪里很多人都去了远方工作。回家之后,
                    你得知小美也要走了,于是你说:(一起走/沉默)
                    """))

        action = input(plz)

        if action == '一起走':
            print(dedent("""你说:我和你一起走,你向小美解释了原因,毕竟努力也是无用的,还不如
                        好好享受这最后一段时光,你和小美逃走了,但是你没想到这个决定
                        的严重性,首领在你失踪后的第三天发布了最高级别的通缉令,不惜一切代价
                        甚至派军队要将你抓回,你知道已经没有退路了,你们来到了冰冻星球
                        未被开发的大片区域,冰冻森林。
                        """))

            return 'iceforce'

        elif action == '沉默':
            print(dedent("""
                        ..........
                        """))          #  afd 又是什么?

            return 'workplace'

        else:
            print("ERROR")

            return 'contain2'


class Map(object):

    scenes = {
        'background':Background(),
        'death':Death(),
        'earth':Earth(),
        'school':School(),
        'bar':Bar(),
        'sunstreet':SunStreet(),

        'iceforce':IceForce(),
        'workplace':Workplace(),
        'contain1':Contain1(),
        'contain2':Contain2(),
        'earth0':Earth0(),
        'finished': Scene(),
    }

    def __init__(self, start_scene):
        self.start_scene = start_scene

    def next_scene(self, scene_name):
        val = Map.scenes.get(scene_name)
        return val

    def opening_scene(self):
        return self.next_scene(self.start_scene)


a_map = Map('background')
a_game = Engine(a_map)
a_game.play()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 12:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表