def make_example_game(args): g_rng.set_seed(20201008) M = GameMaker() # Define rooms roomS = M.new_room(name="start", desc="\n") roomI = M.new_room(name="if", desc="\n") roomV = M.new_room(name="variable", desc="\n") roomF = M.new_room(name="for", desc="\n") # Define connections connectSI = M.connect(roomS.east, roomI.west) connectSV = M.connect(roomS.south, roomV.north) connectFS = M.connect(roomF.east, roomS.west) # Set player M.set_player(roomS) #Create objects i_rand=random.choice(string.ascii_letters) f_rand=random.choice(string.ascii_letters) v_rand=random.choice(string.ascii_letters) objectI = M.new(type='o', name=i_rand, desc="if") objectF = M.new(type='o', name=f_rand, desc="for") objectV = M.new(type='o', name=v_rand, desc="variable") #Add objects to rooms roomI.add(objectI) roomF.add(objectF) roomV.add(objectV) #Print object names for testing (will not be in game) print(objectI.name) print(objectF.name) print(objectV.name) #Create quests with assigned rewards q1 = M.record_quest() #Create quest for including completed if statement q1.reward = 1 #Reward for completing if statement (sparse=1, dense=5, balanced=1) q2 = M.record_quest() #Create quest for including complete for loop q2.reward = 1 #Reward for completing for loop (same distribution as if) q3 = M.record_quest() #Create quest for including print statement q3.reward = 1 #Reward for completing print statement (sparse=0, dense=1, balanced=1) q4 = M.record_quest() #Create quest for including new variable assignment q4.reward = 1 #Reward for completing variable assignment (same distribution as print) #Create game and associated files game_file = M.compile("./carr_dang_shortRL/compiled_game/games.ulx") return game_file
def make_example_game(args): """ This game takes place in a typical house and consists in three puzzles: 1) Escape the room; 2) Find the missing ingredient; 3) Finish preparing the dinner. Here's the map of the house. Bathroom + | + Bedroom +--+ Kitchen +----+ Backyard + + | | + + Living Room Garden """ # Make the generation process reproducible. g_rng.set_seed(2018) M = GameMaker() # Start by building the layout of the world. bedroom = M.new_room("bedroom") kitchen = M.new_room("kitchen") livingroom = M.new_room("living room") bathroom = M.new_room("bathroom") backyard = M.new_room("backyard") garden = M.new_room("garden") # Connect rooms together. bedroom_kitchen = M.connect(bedroom.east, kitchen.west) kitchen_bathroom = M.connect(kitchen.north, bathroom.south) kitchen_livingroom = M.connect(kitchen.south, livingroom.north) kitchen_backyard = M.connect(kitchen.east, backyard.west) backyard_garden = M.connect(backyard.south, garden.north) # Add doors. bedroom_kitchen.door = M.new(type='d', name='wooden door') kitchen_backyard.door = M.new(type='d', name='screen door') kitchen_backyard.door.add_property("closed") # Design the bedroom. drawer = M.new(type='c', name='chest drawer') trunk = M.new(type='c', name='antique trunk') bed = M.new(type='s', name='king-size bed') bedroom.add(drawer, trunk, bed) # - The bedroom's door is locked bedroom_kitchen.door.add_property("locked") # - and the key is in the drawer. bedroom_key = M.new(type='k', name='old key') drawer.add(bedroom_key) drawer.add_property("closed") M.add_fact("match", bedroom_key, bedroom_kitchen.door) # - Describe the room. bedroom.desc = "" # Design the kitchen. counter = M.new(type='s', name='counter') stove = M.new(type='s', name='stove') kitchen_island = M.new(type='s', name='kitchen island') refrigerator = M.new(type='c', name='refrigerator') kitchen.add(counter, stove, kitchen_island, refrigerator) # - Add note on the kitchen island. objective = "The dinner is almost ready! It's only missing a grilled carrot." note = M.new(type='o', name='note', desc=objective) kitchen_island.add(note) # - Add some food in the refrigerator. apple = M.new(type='f', name='apple') milk = M.new(type='f', name='milk') refrigerator.add(apple, milk) # Design the bathroom. toilet = M.new(type='c', name='toilet') sink = M.new(type='s', name='sink') bath = M.new(type='c', name='bath') bathroom.add(toilet, sink, bath) toothbrush = M.new(type='o', name='toothbrush') sink.add(toothbrush) soap_bar = M.new(type='o', name='soap bar') bath.add(soap_bar) # Design the living room. couch = M.new(type='s', name='couch') low_table = M.new(type='s', name='low table') tv = M.new(type='s', name='tv') livingroom.add(couch, low_table, tv) remote = M.new(type='o', name='remote') low_table.add(remote) bag_of_chips = M.new(type='f', name='half of a bag of chips') couch.add(bag_of_chips) # Design backyard. bbq = M.new(type='s', name='bbq') patio_table = M.new(type='s', name='patio table') chairs = M.new(type='s', name='set of chairs') backyard.add(bbq, patio_table, chairs) # Design garden. shovel = M.new(type='o', name='shovel') tomato = M.new(type='f', name='tomato plant') carrot = M.new(type='f', name='carrot') lettuce = M.new(type='f', name='lettuce') garden.add(shovel, tomato, carrot, lettuce) # Close all containers for container in M.findall(type='c'): container.add_property("closed") # Set uncooked property for to all food items. # NOT IMPLEMENTED YET # for food in M.findall(type='f'): # food.add_property("edible") # food.add_property("raw") # The player starts in the bedroom. M.set_player(bedroom) # To define a quest we are going to record it by playing the game. # print("******* Recording a quest. Hit 'Ctrl + C' when done. *******") # M.record_quest() commands = [ "open chest drawer", "take old key from chest drawer", "unlock wooden door with old key", "open wooden door", "go east" ] if args.type in ["short", "medium", "long", "last", "human"]: commands.append("open screen door") if args.type in ["medium", "long", "last", "human"]: commands.extend(["go east", "go south", "take carrot"]) if args.type in ["long", "last", "human"]: commands.extend([ "go north", "go west", "put carrot on stove", # "cook carrot" # Not supported yet. ]) quest = M.set_quest_from_commands(commands) # TODO: Provide better API to specify failing conditions. quest.set_failing_conditions([Proposition("eaten", [carrot.var])]) if args.type == "human": # Use a very high-level description of the objective. quest.desc = "" elif args.type == "last": # Use a very high-level description of the objective. quest.desc = objective print(quest.desc) game_file = M.compile(args.filename) print("*** Game created: {}".format(game_file)) return game_file