The program is becoming very complicated. We need to apply structured programming techniques to make it easier to follow. According to the specification this means: "Using modularised programming, clear, well documented interfaces (local variables, parameters) and return values." ```python places = ["A clearing in a forest", "An old wooden cabin", "A dark cave"] moves = [{"n": 1, "s": 2}, {"s": 0}, {"n": 0}] objects = {"spanner":0, "lockpick":0, "spade":2} location = 0 def print_objects(): for key, val in objects.items(): if val == location: print(key) def items(): for key, val in objects.items(): if val == 99: print(key) def take_object(noun): for key, val in objects.items(): if key == noun and val == location: print("Got it!") objects[noun] = 99 def drop_object(noun): for key, val in objects.items(): if key ==noun and val == 99: print("Dropped ", noun) objects[noun] = location def Main(): ans = "" global location print(places[0]) print_objects() while ans != "bye": ans = input("What now?") words = ans.split() # Check if it's a move if len(words) == 1: if ans in moves[location]: location = moves[location].get(ans) print(places[location]) print_objects() else: print("I can't move that way") else: verb = words[0] # e.g. Take or Drop noun = words[1] # e.g. hammer or spanner if verb == "take": take_object(noun) elif verb == "drop": drop_object(noun) else: print("I don't understand what you mean") Main() ``` # Exercise 1. Copy the code into an IDE and run it. Check that it works 2. Give an example of a local variable in the code. 3. Give an example of a global variable. 4. Give an example of a parameter. 5. How many functions have arguments passed to them? 6. What are the advantages of the modular approach? 7. Add a function eat\_object(noun). The function will print "I can't eat" + noun. 8. Add code to the Main method to call the eat\_object() function # Extension 1. Modify your eat\_object() function so if you are holding an apple you can eat it. Output "Yum Yum!" 2. Add your own verbs, for example chop tree or build fire ![[adgame4.py]]