Exemple #1
0
 def __init__(self, mapFile, enemies=[Enemy(10, 10, 1), Enemy(11, 10, 1)]):
     self.player = Player()
     self.enemies = enemies
     self.prevLoc = (self.player.getX(), self.player.getY())
     self.map = [[]]
     self.items = [Weapon(WeaponType.SWORD, 3, 3)]
     with open(mapFile, "r") as mapTxt:
         for line in mapTxt.readlines():
             self.map.append(self.split(line.rstrip()))
         self.updatePlayer()
Exemple #2
0
    def __init__(self):

        pyxel.init(256, 256, fps=60)
        pyxel.mouse(True)
        pyxel.load("./assets.pyxres")
        self.entities = [Enemy(0, 6 * 8)]
        for _ in range(15):
            self.entities.append(Enemy(0, 0))
        self.inventory = Inventory(1, 28, 30, 3, pyxel.COLOR_WHITE)
        pyxel.run(update=self.update, draw=self.draw)
Exemple #3
0
    def generate_level(self, num):  # генерация уровня игры (карты)
        closed_cells = [self.player.position]
        enter = (0, 0)

        if num != 1:
            enter = self.rooms[num - 1].enter_from_exit()

        enemies_options = self.generate_enemies(num)
        for i in range(len(enemies_options)):  # генерация врагов
            x, y = random.randint(2, 9), random.randint(2, 8)
            while (x, y) in closed_cells:
                x, y = random.randint(2, 9), random.randint(2, 8)
            self.enemies.append(Enemy((x, y), *enemies_options[i]))
            closed_cells.append((x, y))

        for i in range(random.randint(6, 7)):  # генерация коробок
            x, y = random.randint(2, 8), random.randint(2, 7)
            while (x, y) in closed_cells:
                x, y = random.randint(2, 8), random.randint(2, 7)
            self.objects.append(Box((x, y)))
            closed_cells.append((x, y))

        a, b = (0, 2)
        for i in range(random.randint(a, b)):  # генерация зельев для здоровья
            x, y = random.randint(1, 9), random.randint(2, 8)
            while (x, y) in closed_cells:
                x, y = random.randint(1, 9), random.randint(2, 8)
            self.objects.append(Chest((x, y), 'potion', 'green'))
            closed_cells.append((x, y))
        exit_ = random.choice([(random.randint(2, 8), 11),
                               (9, random.randint(2, 9))])

        if num > 6:  # генерация зельев для повышения силы или количества ходов
            if not random.randint(0, 2):
                x, y = random.randint(1, 9), random.randint(2, 8)
                while (x, y) in closed_cells:
                    x, y = random.randint(1, 9), random.randint(2, 8)
                self.objects.append(
                    Chest((x, y), 'potion', random.choice(['red', 'blue'])))
                closed_cells.append((x, y))

        if not random.randint(0, 2) and len(self.unused_keys) < 6:
            # генерация двери, если неиспользованных ключей меньше 6
            door_color = random.choice(['red', 'blue', 'green'])

            x, y = random.randint(1, 9), random.randint(1, 8)
            while (x, y) in closed_cells:
                x, y = random.randint(2, 9), random.randint(2, 8)
            self.objects.append(Chest((x, y), 'key', door_color))
            self.unused_keys.append(door_color)

        if not random.randint(0, 2) and self.unused_keys:
            # добавится ли дверь в текущую комнату
            self.objects.append(
                Door((exit_[1], exit_[0]),
                     self.unused_keys.pop(
                         random.randint(0,
                                        len(self.unused_keys) - 1))))

        self.rooms[num] = Room(exit_, self.enemies, self.objects, num, enter)
Exemple #4
0
    def __init__(self, x, y, maxhp=20):
        Enemy.__init__(self, maxhp)
        self.width = 28
        self.height = 28
        self.color = "#CC0000"
        self.rect = pygame.Rect(x, y, self.width, self.height)
        try:
            self.image = pygame.image.load("img/ember/ember.png")
            self.image = pygame.transform.scale(self.image,
                                                (self.width, self.height))
        except pygame.error:
            self.image = pygame.Surface((self.height, self.width))
            self.image.fill(pygame.color.Color(self.color))

        self.direction = -1
        self.vx = 0
        self.vy = 0

        self.onGround = False
Exemple #5
0
    def place_enemies(self, room, entities, max_enemies_per_room, enemy_max_hp, enemy_power, enemy_char, enemy_name, color):
        # chooses random number of enemies up to max
        num_enemies = randint(0, max_enemies_per_room)

        for i in range(num_enemies):
            # picks random spot within room
            enemy_x = randint(room.x1+1, room.x2-1)
            enemy_y = randint(room.y1+1, room.y2-1)

            # checks to make sure new enemy wont be overlapping with any other entities
            if not any([entity for entity in entities if entity.x == enemy_x and entity.y == enemy_y]):
                # makes enemies with given characteristics
                enemy = Enemy(enemy_x, enemy_y, enemy_char, color, enemy_max_hp, 0, enemy_power, enemy_name)
                entities.append(enemy)
Exemple #6
0
    def place_enemies_in_open_map(self, map_width, map_height, entities, min_enemies, max_enemies, enemy_max_hp, enemy_power, enemy_char, enemy_name, enemy_color):
        num_enemies = randint(min_enemies, max_enemies)

        for i in range(num_enemies):
            enemy_x = randint(1, map_width-1)
            enemy_y = randint(1, map_height-1)

            while self.is_blocked(enemy_x, enemy_y):
                enemy_x = randint(1, map_width-1)
                enemy_y = randint(1, map_height-1)

            if not any([entity for entity in entities if entity.x == enemy_x and entity.y == enemy_y]):
                enemy = Enemy(enemy_x, enemy_y, enemy_char, enemy_color, enemy_max_hp, 0, enemy_power, enemy_name)
                entities.append(enemy)
Exemple #7
0
    def update(self):
        if self.player is None:
            print("Can't start game without player!")
            return

        if self.counter % (self.seconds_per_spawn * 60) == 0:
            enemy_sprite = pygame.transform.scale(
                pygame.image.load("thwomp.png"), (40, 40))
            time_scale = int(self.counter / (self.seconds_per_spawn * 60))

            x, y = randint(-5 - time_scale,
                           5 + time_scale), randint(-5 - time_scale,
                                                    5 + time_scale)
            enemy = Enemy(enemy_sprite, self, [x, y])
            enemy.spriterect.x = width / 2
            enemy.spriterect.y = height / 2
            enemy.add()

        for entity in self.entity_list:
            entity.update()

        self.counter += 1
        self.score = self.counter
Exemple #8
0
 def __init__(self, prev):
     super().__init__(prev)
     self.enemy = Enemy()
     self.option = 0
     self.skills = [('Attack', self.attack), ('Run Away', self.escape)]
def instanceLoader(entityType, entityName):

    if entityType == "item":

        # check if item exists
        if itemCheck(entityName, "ITEMFOUND"):

            # open file where item is located
            with open(itemCheck(entityName, "ITEMLOCATION"), "r") as file:
                reader = csv.reader(file, delimiter=',')

                # search each row to find item
                for row in reader:
                    if row[0] == entityName:
                        # create, initialize, and return the item found
                        item = Item(entityName, row[1], row[2], row[3], row[4],
                                    row[5], row[6])
                        return item
        else:
            print("{} does not exist".format(entityName))
            sys.exit(2)

    # ensure csv file exists
    if os.path.isfile("entity_data/" + entityType + ".csv" == False):
        print(
            "{} data does not exist. Please restart and create a new {} data file."
            .format(entityType.capitalize(), entityType.capitalize()))
        sys.exit(3)

    with open("entity_data/" + entityType + ".csv", "r") as file:
        reader = csv.reader(file, delimiter=',')
        # search every first value until name is found
        for name in reader:
            if entityName == name[0]:
                # create a new entity with values found in csv file
                if entityType == "player":
                    # intialize a player with default values
                    # Class: Human, Weight: 100lbs Strength: 10, Endurance: 20, Agility: 20
                    player = Player(entityName, "Human", 100, 10, 20, 20)

                    # open up class types file and search for player's class
                    with open("entity_data/class_types.csv",
                              "r") as classTypeFile:
                        classReader = csv.reader(classTypeFile, delimiter=',')

                        for row in classReader:
                            # if class type (row[0]) is equal to player's class type (name[1])
                            if row[0] == name[1]:
                                player.classType = row[0]
                                # add items to players inventory
                                for item in row:
                                    if item != name[1] and itemCheck(
                                            item, "ITEMFOUND"):
                                        player.addItem(item)

                    # find item and apply it's stats to player
                    for item in range(player.inventorySize()):
                        print("Item: {}".format(player.getItem(item)))

                        # make sure item stored in inventory still exists
                        if itemCheck(player.getItem(item),
                                     "ITEMFOUND") == False:
                            return False

                        itemDirectory = itemCheck(player.getItem(item),
                                                  "ITEMLOCATION")

                        # open file where item is stored
                        with open(itemDirectory, "r") as itemFile:
                            itemReader = csv.reader(itemFile, delimiter=',')

                            # search for item name in the first string of every row
                            for row in itemReader:

                                if row[0] == player.getItem(item):
                                    # apply the rest of items stats that can be applied to player (weight, strength, endurance etc...)
                                    player.applyStats(row[3], row[4], row[5],
                                                      row[6])
                                    break
                            break

                    # return initialized player
                    return player

                elif entityType == "enemy":
                    with open("entity_data/enemy.csv") as file:
                        reader = csv.reader(file, delimiter=',')

                        for row in reader:
                            if row[0] == entityName:
                                # intialize an enemy with values found in row
                                enemy = Enemy(entityName, row[1], row[2])

                    # return initialized enemy
                    return enemy

                else:
                    print("Entity type does not exist.")
    return False
Exemple #10
0
    def load(self, user_name):  # загрузка игры с базы
        cur = self.con.cursor()
        self.user_name = user_name

        player = cur.execute(f"""SELECT room_num, 
            hit_points, max_hit_points, 
            damage, max_damage, 
            action_points, max_action_points,
            posX, posY, experience, max_experience FROM users 
            WHERE user_name = '{user_name}'""").fetchone()
        # все харастеристикик игрока

        self.unused_keys = list(
            map(
                lambda i: i[0],
                cur.execute(f"""SELECT type
            FROM inventory 
            WHERE user = '******' AND used = 'False'""")))

        self.player = Player((player[-4], player[-3]), *player[1:-4],
                             *player[-2:])  # игрок

        self.player.inventory = list(
            map(
                lambda i: i[0],
                cur.execute(f"""SELECT
            type FROM inventory 
            WHERE user = '******' AND used = 'True'""")))
        self.current_room = player[0]

        rooms = cur.execute(f"""SELECT id, number, enter_posX, 
                    enter_posY, exit_posX, exit_posY FROM rooms
                    WHERE user = '******'""").fetchall()

        self.rooms = {}
        for room_id, number, *positions in rooms:  # все комнаты подземелья
            enemies = cur.execute(f"""SELECT color, hit_points, 
                        max_hit_points,
                        action_points, max_action_points, 
                        damage, max_damage, posX, posY FROM entities
                        WHERE room_id = {room_id}""").fetchall()

            list_of_enemies = []
            list_of_objects = []
            # все враги на карте
            for color, hit, m_hit, act, m_act, dam, m_dam, x, y in enemies:
                list_of_enemies.append(
                    Enemy((x, y), color, hit, m_hit, dam, m_dam, act, m_act))

            objects = cur.execute(f"""SELECT type, posX, posY, inside, 
                color, stage FROM objects
                WHERE room_id = {room_id}""").fetchall()

            for type_, x, y, inside, color, stage in objects:
                # все объекты на карте
                if type_ == 1:  # коробки
                    list_of_objects.append(Box((x, y)))
                elif type_ == 2:  # сундуки
                    list_of_objects.append(
                        Chest((x, y), *reversed(inside.split('_'))))
                    if stage:
                        list_of_objects[-1].touch()
                else:  # двери
                    list_of_objects.append(Door((x, y), color))

            self.rooms[number] = Room(positions[-2:], list_of_enemies,
                                      list_of_objects, number, positions[:2])

        self.enemies = self.rooms[self.current_room].enemies
        self.entities = [self.player, *self.enemies]
        self.objects = self.rooms[self.current_room].objects
        self.load_room(player[0])
def update(elapse):
    if random.random() < 0.00001 * Game.mode.rate:
        enemy = Enemy('ghost', 30, 10, 10)
        SceneM().call(Combat, enemy)
            SceneM().call(Gameover)

        def onback():
            SceneM().call(YouWin)

        SceneM().call(Combat, self.enemy, onback=onback)


def update(elapse):
    if random.random() < 0.00001 * Game.mode.rate:
        enemy = Enemy('ghost', 30, 10, 10)
        SceneM().call(Combat, enemy)


game.update = update
game.map = GameMap(0)
game.role = Role(name='4', mpos=Vector2(11), health=100)

weapon_trigger = WeaponTrigger()
boss_trigger = EnemyTrigger(Enemy('boss', 100, 30, 20), ((34, 4), (35, 4)))

game.map.triggers = {
    (7, 8): weapon_trigger,
    (11, 18): weapon_trigger,
    (18, 12): weapon_trigger,
    (34, 4): boss_trigger,
    (35, 4): boss_trigger
}

game.maps = [game.map]