笨办法学pythonex45--习题笔记

本文介绍了一个基于Python的游戏剧情编程实例,通过定义不同的场景类,如警局、废弃货仓、家等,实现了游戏剧情的分支选择和角色互动。玩家在不同场景下做出的选择将影响后续剧情发展。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值