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()
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)
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)
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
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)
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)
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
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
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]