from sys import exit
from random import randint
from textwrap import dedent
class Scene(object):
def enter(self):
print("此场景尚未配置完成")
print("对它进行子类化并实现输入()")
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 Death(Scene):
quips = [
"游戏不是这么玩的!!!",
"老铁,动动脑子好不好!!!",
"算了,就这样咸鱼也不错!!!",
"还是非凡哥自己来吧,你回家吧!!!"
]
def enter(self):
print(Death.quips[randint(0,len(self.quips)-1)])
return 'try_it_again'
class PoliceStation(Scene):
def enter(self):
print(dedent("""
广州某警局里你与同事聊着昨天赌票
的事情,一脸沮丧的你吐槽着在多中一位数就能回本
了,每次都这样.这时候非凡哥进入房间,说接到任务
命令,要求你带众位兄弟前往西江码头捉拿废气货仓的
金库杀人犯,你会选择接受还是拒绝?
"""))
action = input(">")
if action == "接受":
print(dedent("""
你接受了任务,你带领众位兄弟前往西江码头
"""))
return'xi_jiang_pier'
elif action == "拒绝":
print(dedent("""
你以家里有事请假,非凡哥对你很失望认为你影响
到了他的名望,以警察局不需要胆小怕事的警员的
理由将你赶出警察局
"""))
return'death'
else :
print("大佬,我都不知道你说的是什么。")
return 'police_station'
class XijiangPier(Scene):
def enter(self):
print(dedent("""
你率领众人来到了废弃货仓前面树林地区,
你分析制定了计
划A和B两套方案。你决定执行方案A/B
"""))
action =input(">")
if action == "A" or "a":
print(dedent("""
你选择了计划A,你将分配任务给大车
和细车,命令大车带领三个警员稍后绕
过货仓在左面盯梢击杀逃犯,细车带领
人守住货仓右边以及后边。其他人呆在
暂时原地看你举起的手指数在进行行动
。你自己小心前行到货仓旁边观察情况
在观察仓库里面杀人犯数量后,对其他
人举起手指示意。
"""))
code = f"{randint(1,5)}"
guess = input("输入你举起的手指数目>")
guesses = 0
while guess != code and guesses < 3:
print(f"在不被发现情况下你共有三次举手机会,你是剩下{2-guesses}次")
guesses +=1
guess = input(">")
if guess == code:
print(dedent("""
大家看到了你举起的手指数目,遵循你
的指令留在原地"""))
return'ware_house'
else :
print("""
大家没有看清你的手指数目,准备向前
前去观看被杀人犯发现,在与杀人犯的激
烈火力对冲中,你英勇牺牲。
""")
return'death'
class WarHouse(Scene):
def enter(self):
print(dedent("""
你成功潜行到货仓门口,正在小心翼翼
的观察敌人分布,与此同时,(非凡哥乱入) 呆在后方
的众人在等待你进一步指令的同时遇到了前来支援的
非凡哥,非凡哥要求废物小四前去开枪吸引杀人犯注意
一举歼灭对面,小四抗命失败后,胆战心惊前进,在准备
开枪吸引火力时,却被敌人发现开枪击中,此时你也发现
了其他人的违令行动,不得已只能开枪火拼,在你开枪躲
闪时受伤的小四扯住你的裤腿寻求你的帮助。在刹那间你将
如何应对小四。
"""))
action = input("踢开小四/救援小四 >")
if action == "救援":
print(dedent("""
在救援小四的时候不幸中弹,你与小四
面面相对,痛苦等死
"""))
return'death'
elif action == "踢开":
print(dedent("""
恭喜你获得冷血无情勋章,你一脚将小四
踢飞出去,并捡起了他的枪,在一顿拼杀
后将匪徒全部击杀,完成任务。
"""))
return'home'
else :
print("请输入正确选项")
return'ware_house'
class Home(Scene):
def enter(self):
print(dedent("""
众人回到警局,非凡哥按功行赏,敌人全部
由他击杀,功劳全部归他
打赏给你十块钱,并鼓励你
好好工作,此时你想对他说:
吔屎啦,梁非凡/多谢非凡哥
"""))
action = input(">")
if action == "吔屎啦,梁非凡":
print("非凡哥用如来神掌将你击毙")
return 'death'
if action == "多谢非凡哥":
print("虽然你心情抑郁,但恭喜你活了下来!")
return'finished'
class Finished(Scene):
def enter(self):
print("活下来就有希望,那句话以后再讲吧。")
return'finished'
class TryItAgain():
def enter(self):
choose = input("再来一次吗:Y/N\n>>").upper()
if choose == 'Y':
return 'police_station'
elif choose == 'N':
exit(1)
else:
print('请输入Y或N')
return 'try_it_again'
class Map(object):
scenes = {
'police_station':PoliceStation(),
'ware_house':WarHouse(),
'home':Home(),
'finished':Finished(),
'xi_jiang_pier':XijiangPier(),
'death':Death(),
'try_it_again':TryItAgain()
}
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('police_station')
a_game = Engine(a_map)
a_game.play()