def populate(self): self.hero.hasEscaped = False for item in self.hero.inventory: if type(item) == Entities.Shotgun: item.ammo = True break generated = [] numberOfMonsters = self.calculateMonsterQuantity() self.monsters.clear() for i in range(numberOfMonsters): self.monsters.append( Entities.Monster(getValue('Entities', 'monsterMove', 'int'), getValue('Entities', 'monsterName', 'str'))) # Place Exit randX, randY = self.uniqueGen(generated) while self.world.grid[randX][randY].entity is not None: randX, randY = self.uniqueGen(generated) self.world.placeEntity(randX, randY, self.exit) generated.append((self.exit.x, self.exit.y)) # Place Player randX, randY = self.uniqueGen(generated) placeAble = self.iDFS((randX, randY), (self.exit.x, self.exit.y)) while (not placeAble): randX, randY = self.uniqueGen(generated) placeAble = self.iDFS((randX, randY), (self.exit.x, self.exit.y)) self.world.placeEntity(randX, randY, self.hero) generated.append((self.hero.x, self.hero.y)) # Place Monster(s) # Clear the list of monsters from previous levels for i in range(numberOfMonsters): randX, randY = self.uniqueGen(generated) placeAble = self.iDFS((randX, randY), (self.hero.x, self.hero.y)) while (not placeAble): randX, randY = self.uniqueGen(generated) placeAble = self.iDFS((randX, randY), (self.hero.x, self.hero.y)) self.world.placeEntity(randX, randY, self.monsters[i]) generated.append((self.monsters[i].x, self.monsters[i].y)) print(generated) # Place Items # Generate Non-Gem Items p, t, s, u = 0, 0, 0, 0 chance = getValue('GameState', 'chance', 'int') # Chance of item appearing on level (10%) chanceShotgun = getValue('GameState', 'chanceShotgun', 'int') # Count Instances of Item in Inventory for item in self.hero.inventory: if item.icon == 'P': p += 1 elif item.icon == 'T': t += 1 elif item.icon == 'S': s += 1 elif item.icon == 'U': u += 1 # Place Potions if p <= 2 and random.randint(1, 100) < chance: randX, randY = self.uniqueGen(generated) placeAble = type( self.world.grid[randX][randY].entity) != Entities.Wall while (not placeAble): randX, randY = self.uniqueGen(generated) placeAble = type( self.world.grid[randX][randY].entity) != Entities.Wall self.world.placeEntity( randX, randY, Entities.Potion(getValue('Entities', 'potionMoveMod', 'int'))) generated.append((randX, randY)) print(generated) # Place Torches if t <= 2 and random.randint(1, 100) < chance: randX, randY = self.uniqueGen(generated) placeAble = type( self.world.grid[randX][randY].entity) != Entities.Wall while (not placeAble): randX, randY = self.uniqueGen(generated) placeAble = type( self.world.grid[randX][randY].entity) != Entities.Wall self.world.placeEntity( randX, randY, Entities.Torch(getValue('Entities', 'torchVisMod', 'int'))) generated.append((randX, randY)) print(generated) # Place Shoes if s <= 2 and random.randint(1, 100) < chance: randX, randY = self.uniqueGen(generated) placeAble = type( self.world.grid[randX][randY].entity) != Entities.Wall while (not placeAble): randX, randY = self.uniqueGen(generated) placeAble = type( self.world.grid[randX][randY].entity) != Entities.Wall self.world.placeEntity( randX, randY, Entities.Shoes(getValue('Entities', 'shoeNoiseMod', 'int'))) generated.append((randX, randY)) print(generated) # Place Shotgun if u <= 1 and random.randint(1, 100) < chanceShotgun: randX, randY = self.uniqueGen(generated) placeAble = type( self.world.grid[randX][randY].entity) != Entities.Wall while (not placeAble): randX, randY = self.uniqueGen(generated) placeAble = type( self.world.grid[randX][randY].entity) != Entities.Wall self.world.placeEntity(randX, randY, Entities.Shotgun()) generated.append((randX, randY)) print(generated) # Place Gems for _ in range(getValue('Entities', 'fireNum', 'int')): # Places Gems randX, randY = self.uniqueGen(generated) placeAble = type( self.world.grid[randX][randY].entity) != Entities.Wall while (not placeAble): randX, randY = self.uniqueGen(generated) placeAble = type( self.world.grid[randX][randY].entity) != Entities.Wall self.world.placeEntity( randX, randY, Entities.Firecracker(getValue('Entities', 'gemWorth', 'int'))) generated.append((randX, randY)) print(generated) # Place Gems for _ in range(getValue('Entities', 'gemNum', 'int')): # Places Gems randX, randY = self.uniqueGen(generated) placeAble = type( self.world.grid[randX][randY].entity) != Entities.Wall while (not placeAble): randX, randY = self.uniqueGen(generated) placeAble = type( self.world.grid[randX][randY].entity) != Entities.Wall self.world.placeEntity( randX, randY, Entities.Gem(getValue('Entities', 'gemWorth', 'int'))) generated.append((randX, randY)) print(generated)