예제 #1
0
    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)