This is the code and notes from my live Twitch programming and drawing classes.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

180 lines
4.1 KiB

### @export "fake"
import fake_input
input, input = fake_input.create(['dodge!'])
### @export "imports"
from sys import exit
from random import randint
from ex47_dialogue import DIALOGUE
### @export "scene_class"
class Scene(object):
def enter(self):
print("This scene is not yet configured.")
print("Subclass it and implement enter().")
exit(1)
### @export "engine_class"
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)
# be sure to print out the last scene
current_scene.enter()
### @export "death_scene"
class Death(Scene):
quips = [
"You died. You kinda suck at this.",
"Your Mom would be proud...if she were smarter.",
"Such a luser.",
"I have a small puppy that's better at this.",
"You're worse than your Dad's jokes."
]
def enter(self):
print(Death.quips[randint(0, len(self.quips)-1)])
exit(1)
### @export "central_corridor"
class CentralCorridor(Scene):
def enter(self):
print(DIALOGUE["CentralCorridor_enter"])
action = input("> ")
if action == "shoot!":
print(DIALOGUE["CentralCorridor_shoot"])
return 'death'
elif action == "dodge!":
print(DIALOGUE["CentralCorridor_dodge"])
return 'death'
elif action == "tell a joke":
print(DIALOGUE["CentralCorridor_joke"])
return 'laser_weapon_armory'
else:
print("DOES NOT COMPUTE!")
return 'central_corridor'
### @export "game_scenes"
class LaserWeaponArmory(Scene):
def enter(self):
print(DIALOGUE["LaserWeaponArmory_enter"])
code = f"{randint(1,9)}{randint(1,9)}{randint(1,9)}"
guess = input("[keypad]> ")
guesses = 0
while guess != code and guesses < 10:
print("BZZZZEDDD!")
guesses += 1
guess = input("[keypad]> ")
if guess == code:
print(DIALOGUE["LaserWeaponArmory_guess"])
return 'the_bridge'
else:
print(DIALOGUE["LaserWeaponArmory_fail"])
return 'death'
class TheBridge(Scene):
def enter(self):
print(DIALOGUE["TheBridge_enter"])
action = input("> ")
if action == "throw the bomb":
print(DIALOGUE["TheBridge_throw_bomb"])
return 'death'
elif action == "slowly place the bomb":
print(DIALOGUE["TheBridge_place_bomb"])
return 'escape_pod'
else:
print("DOES NOT COMPUTE!")
return "the_bridge"
class EscapePod(Scene):
def enter(self):
print(DIALOGUE["EscapePod_enter"])
good_pod = randint(1,5)
guess = input("[pod #]> ")
if int(guess) != good_pod:
print(DIALOGUE["EscapePod_death"]
.format(guess=guess))
return 'death'
else:
print(DIALOGUE["EscapePod_escape"]
.format(guess=guess))
return 'finished'
class Finished(Scene):
def enter(self):
print("You won! Good job.")
return 'finished'
### @export "map_class"
class Map(object):
scenes = {
'central_corridor': CentralCorridor(),
'laser_weapon_armory': LaserWeaponArmory(),
'the_bridge': TheBridge(),
'escape_pod': EscapePod(),
'death': Death(),
'finished': Finished(),
}
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)
### @export "final_run"
a_map = Map('central_corridor')
a_game = Engine(a_map)
a_game.play()