# Author: James Tam # Version: June 1, 2022 import random ''' New learning objective: using the repetition operator to dynamically build a 2D list. Checking list bounds ''' # CONSTANTS SIZE = 4 FIELD = " " FOREST = "^" WATER = "W" BURNT = "F" ERROR = "!" ''' @ display() @ argument: 2D list of char(length 1 string), simulated game world @ return value: none @ @ Shows the current state of the world ''' def display(world): r = -1 c = -1 for r in range (0,SIZE,1): for c in range (0,SIZE,1): print(world[r][c], end="") print() print() ''' @ generateElemement @ a random number argument (precondition 1<=number<=100) @ returns a string of length one (an element to populate world ''' def generateElement(randomNumber): element = ERROR if ((randomNumber >= 1) and (randomNumber <= 50)): element = FIELD elif ((randomNumber >= 51) and (randomNumber <= 80)): element = FOREST elif ((randomNumber >= 81) and (randomNumber <= 100)): element = WATER else: element = ERROR return(element) # New 2022 def getEditLocation(): r # New 2022 def inBounds(row,column): inside = True if ((row < 0) or \ (row >= SIZE) or \ (column < 0) or \ (column >= SIZE)): inside = False return(inside) ''' @ initialize() @ no parameters @ returns a fully initialized randomly generated world ''' def initialize(): world = [] r = -1 c = -1 randomNumber = -1 newElement = ERROR for r in range (0,SIZE,1): randomNumber = random.randrange(1,101) element = generateElement(randomNumber) tempRow = [element] * SIZE #Entire row consists of that random character. world.append(tempRow) # Add in new empty row print(world[r]) return(world) # MAIN EXECUTION POINT def start(): stillRunning = True answer = "" world = initialize() print("Initial world") while(stillRunning): display(world) answer = input("Hit enter to continue or 'q' to quit: ") if ((answer == "q") or (answer == "Q")): stillRunning = False start()