def event_3(self, current_player, *arg): while True: clear_screen() input("你看见一个死灵法师正在练习黑魔法...") input("他看起来没有什么防备...") print("\n你会怎么做?") choice = input("1. 展开偷袭\n2. 正面进攻\n\n请选择一个选项并按回车确认: ") if choice == '1': if self.check_int(current_player, necromancer): input("死灵法师早就觉察到你的到来并设下陷阱,然而你也早就看穿了这一点。") input("你假装被陷阱所困,待死灵法师松懈之时,将他杀死。") input("你只受了一点擦伤。") self.calc_dmg(current_player, 10, 20) break else: input("死灵法师早就觉察到你的到来并设下陷阱。一场恶战之后,你勉强战胜了他,但...") self.calc_dmg(current_player, 17, 30) break elif choice == '2': if self.check_hp(current_player, necromancer): input("你从正面进攻死灵法师。但它忽然召唤出一群僵尸。") input("费了一番力气,你战胜了死灵法师和他的爪牙,但...") self.calc_dmg(current_player, 10, 18) break else: input("你从正面进攻死灵法师。但它忽然召唤出一群僵尸。") input("你寡不敌众,被打得落荒而逃。") self.calc_dmg(current_player, 20, 40) break else: input("请输入一个有效的数字!") continue
def event_5(self, current_player, *arg): while True: clear_screen() input("你进入了一个布满火炬的房间,地上躺满了僵尸...") input("你身后的铁门忽然关闭,你只有前方一个出口了...") print("\n你会怎么做?") choice = input( "1. 用火烧掉这群僵尸的尸体\n2. 用暴力毁坏僵尸们的尸体\n3. 踩着僵尸的尸体过去\n\n请选择一个选项并按回车确认: " ) if choice == '1': if self.check_dex(current_player, zombie): input("在点燃尸体的过程中,一只未死的僵尸抓住了你的脚。") input("你的反应极快,躲过了僵尸的攻击并杀了了它。不过受了一些擦伤。") input("你烧掉了房间里所有的僵尸。") self.calc_dmg(current_player, 12, 15) break else: input("在点燃尸体的过程中,一只未死的僵尸抓住了你的脚。") input("你杀死了僵尸,但是还是被咬了一口。") self.calc_dmg(current_player, 15, 30) break elif choice == '2': input("你的攻击惊动了其他房间的僵尸,它们向你袭来!") if self.check_hp(current_player, zombie): input("你的体力充足,杀死了所有的僵尸,但...") self.calc_dmg(current_player, 10, 15) break else: input("你奋勇战斗,但是体力不支,被僵尸打得落荒而逃。") self.calc_dmg(current_player, 25, 40) break elif choice == '3': input("你踩着僵尸的尸体走向房间的出口...") input("一只僵尸突然跃起将你按到在地。") if self.check_str(current_player, zombie): input("你的力气很大,在僵尸咬到你之前挣脱了它, 但受了一些擦伤。") input("你杀死了这只僵尸并走到了出口。") self.calc_dmg(current_player, 15, 20) break else: input("你无法挣脱僵尸,被它咬了几口。") input("你杀死了这只僵尸并走到了出口。") self.calc_dmg(current_player, 25, 35) break else: input("请输入一个有效的数字!") continue
def event_1(self, current_player, *arg): while True: clear_screen() input("一只无脑的僵尸出现在你面前...") input("僵尸: '人类...脑子...'") print("\n你会怎么做?") choice = input( "1. 冲上去攻击它!\n2. 从它身旁绕过去\n3. 问: 1+1等于几?\n\n请选择一个选项并按回车确认: ") if choice == '1': if self.check_str(current_player, zombie) and self.check_hp( current_player, zombie): input("你打败了僵尸!只受了一些擦伤。") self.calc_dmg(current_player, 10, 15) break else: input("你不敌僵尸的攻势,被他击倒在地后,慌忙逃窜.") self.calc_dmg(current_player, 20, 30) break elif choice == '2': if self.check_dex(current_player, zombie): input("你试图从僵尸身边饶过去,但僵尸的反应比你想象得快!") input("还好你身手敏捷,只受了些擦伤。") self.calc_dmg(current_player, 8, 12) break else: input("僵尸比你想象中来得灵活,你被扑倒在地。") input("在被咬了一口之后,你挣脱了出来,落荒而逃。") self.calc_dmg(current_player, 15, 35) break elif choice == '3': if self.check_int(current_player, zombie) and random.choice( [True, True, False]): input("僵尸: 啊啊,等于几...1+1等于几...啊啊啊啊啊!") input("僵尸的脑浆耗尽,倒在地上一动也不动了。") break else: input("僵尸: 当然是等于2!我讨厌别人把我当傻瓜!") input("你被僵尸的攻击擦过,慌忙逃了出去。") self.calc_dmg(current_player, 10, 20) break else: input("请输入一个有效的数字!") continue
def event_2(self, current_player, *arg): while True: clear_screen() input("一个面目猥琐的胖子出现在你的面前...") input("胖子: 什么人!来这里干什么!") print("\n你会怎么做?") choice = input( "1. 撒腿就逃\n2. 假装是新来的同伴\n3. 抄家伙开始攻击\n\n请选择一个选项并按回车确认: ") if choice == '1': if self.check_hp(current_player, fatty): input("胖子穷追不舍,但你体力充足,成功甩开了他!但...") self.calc_dmg(current_player, 10, 15) break else: input("胖子意外的灵活,你摆脱不了他。一场恶战之后,你勉强战胜了他,但...") self.calc_dmg(current_player, 20, 30) break elif choice == '2': if self.check_int(current_player, fatty) and random.choice( [True, True, False]): input("胖子: 原来是新来的那谁谁。。进去吧,老大在里边呢。") break else: input("胖子: 我不信,你肯定是冒牌的!") input("你与胖子展开了一场恶战,你战胜了他,但...") self.calc_dmg(current_player, 20, 30) break elif choice == '3': if self.check_dex(current_player, fatty): input("你与胖子展开了一场战斗。你没想到胖子竟然如此灵活,但你更胜一筹。") input("你战胜了胖子。但受了一些擦伤。") self.calc_dmg(current_player, 10, 13) break else: input("你没想到这个胖子竟然如此灵活,一场恶战之后,你战胜了胖子,但...") self.calc_dmg(current_player, 15, 25) break else: input("请输入一个有效的数字!") continue
def event_4(self, current_player, current_map, *arg): while True: clear_screen() input("你进入了一个被遗弃的刑房。房间中央有个被血迹侵蚀的铁处女。") input("其中好像有什么东西在发光...") print("\n你会怎么做?") choice = input("1. 打开铁处女\n2. 离开\n\n请选择一个选项并按回车确认: ") if choice == '1': if random.choice([True, True, False]) == True: if self.existing_events: clear_screen() input("你打开铁处女,里面是一张地图,上面标记了一个钥匙的位置。") input("钥匙的位置是: {}".format( random.choice(self.existing_events))) input("你刚看完,地图便自己化为了灰烬。") input("看来你需要自己记下这个房间的位置。") break else: clear_screen() input("铁处女里面除了血迹和腐烂的尸体,什么都没有了...") break else: clear_screen() input("你打开铁处女,迎面扑来一股腐臭的气息。这是一个陷阱。") self.calc_dmg(current_player, 10, 20) break elif choice == '2': if current_player.key != 3: input("你觉得这是一个陷阱,所以你对铁处女弃之不顾。") input("但你总感觉里面有什么重要的东西...也许关系到你的逃生之路也说不定...") else: input("你已经拥有了所有的钥匙,所以你选择离开这个不详的房间。") break else: input("请输入一个有效的数字!") continue
def game_loop(): clear_screen() input("欢迎来到地下城!") while True: clear_screen() player_name = input("请输入你的名字: ") if player_name == '': input("**请输入一个有效的名称**") continue elif len(player_name) > 10: input("**名称过长,请重新输入**") continue else: break while True: clear_screen() print("\n1. 圣堂骑士(力量)\n2. 神秘学者(智力)\n3. 盗贼头领(敏捷)") player_job = input("\n请选择你的职业(输入数字并按回车确认): ") if player_job == "1": current_player = Player(player_name, warrior_stats) break elif player_job == "2": current_player = Player(player_name, mage_stats) break elif player_job == "3": current_player = Player(player_name, thief_stats) break else: input("**请输入数字并按回车来选择你的职业。**") continue input("\n你好,{},你的职业是{},让我们开始冒险吧!".format(player_name, current_player.job_name)) playing = True current_map = Map() current_events = Events(current_map) #游戏正式开始 while playing: clear_screen() current_map.draw_map() valid_moves = current_map.get_moves() print("\n** 逃出这个地牢吧!**") print("\n冒险者: {}. 职业: {}\n".format(current_player.name, current_player.job_name)) print("*" * 30) print(" HP: {}/{} 恢复剂: {} 钥匙: {}".format(current_player.hp, current_player.max_hp, current_player.potion, current_player.key)) print("*" * 30) print("\n当前房间: {}".format(current_map.player_location)) print("可移动方向: {}".format(','.join(valid_moves))) print("\n输入 'QUIT' 退出游戏") print("输入 'HEAL' 会消耗1个恢复剂并回复HP") print("输入 'UP' 'DOWN' 'LEFT' 'RIGHT' 来进行移动, 可小写") move = input(">>> ") move = move.upper() if move == 'QUIT': print("\n ** 再见! ** \n") break elif move == 'HEAL': heal = random.randint(20, 35) if current_player.potion <= 0: input("**恢复剂不足!**") elif current_player.hp == current_player.max_hp: input("**你不需要治疗!**") elif current_player.hp < current_player.max_hp: post_heal_hp = current_player.hp + heal current_player.potion -= 1 if post_heal_hp > current_player.max_hp: current_player.hp = current_player.max_hp input("你恢复了{}点HP!".format(heal - (post_heal_hp - current_player.max_hp))) else: current_player.hp = post_heal_hp input("你恢复了{}点HP!".format(heal)) elif move in valid_moves: current_map.player_location = current_map.move_player(move) if current_map.player_location == current_map.door: clear_screen() input("\n你找到了地下城的出口,厚重的石门上有三个钥匙孔。") if current_player.key == 3: input("你使用三把钥匙解开了石门的锁。") input("你推开石门,走出了这个阴暗的地牢。") input("恭喜通关!O(∩_∩)O") playing = False else: input("你使劲推门,但它纹丝不动,看来你需要凑齐三把钥匙才行。") elif current_map.player_location == current_map.key_1: clear_screen() input("\n你找到了一把钥匙!") current_player.key += 1 current_events.existing_events.remove(current_map.key_1) current_map.key_1 = '' elif current_map.player_location == current_map.key_2: clear_screen() input("\n你找到了一把钥匙!") current_player.key += 1 current_events.existing_events.remove(current_map.key_2) current_map.key_2 = '' elif current_map.player_location == current_map.key_3: clear_screen() input("\n你找到了一把钥匙!") current_player.key += 1 current_events.existing_events.remove(current_map.key_3) current_map.key_3 = '' # 触发随机事件 elif random.choice([True, False]) != False: random.choice(current_events.event_list)(current_player, current_map) if current_player.hp <= 0: input("你死了。") playing = False else: input("\n **无效的指令!**\n") else: while True: clear_screen() if input("再玩一次? [Y/n] ").lower() != "n": game_loop() else: sys.exit()