diff --git a/data/mapdata/mapEntities.json b/data/mapdata/mapEntities.json index 3657b5b..f49f321 100644 --- a/data/mapdata/mapEntities.json +++ b/data/mapdata/mapEntities.json @@ -459,155 +459,5 @@ "y": 15 }, "isPickupable" : false - }, - { - "name" : "herb1", - "position" : { - "x": 12, - "y": 2 - }, - "isPickupable": true, - "effect" : { - "hp" : 0, - "stamina" : 0, - "thirst" : 0, - "hunger" : 0 - }, - "type" : "herb" - }, - { - "name" : "herb2", - "position" : { - "x": 16, - "y": 2 - }, - "isPickupable": true, - "effect" : { - "hp" : 0, - "stamina" : 0, - "thirst" : 0, - "hunger" : 0 - }, - "type" : "herb" - }, - { - "name" : "herb3", - "position" : { - "x": 17, - "y": 5 - }, - "isPickupable": true, - "effect" : { - "hp" : 0, - "stamina" : 0, - "thirst" : 0, - "hunger" : 0 - }, - "type" : "herb" - }, - { - "name" : "herb4", - "position" : { - "x": 14, - "y": 7 - }, - "isPickupable": true, - "effect" : { - "hp" : 0, - "stamina" : 0, - "thirst" : 0, - "hunger" : 0 - }, - "type" : "herb" - }, - { - "name" : "herb5", - "position" : { - "x": 17, - "y": 17 - }, - "isPickupable": true, - "effect" : { - "hp" : 0, - "stamina" : 0, - "thirst" : 0, - "hunger" : 0 - }, - "type" : "herb" - }, - { - "name" : "herb6", - "position" : { - "x": 13, - "y": 17 - }, - "isPickupable": true, - "effect" : { - "hp" : 0, - "stamina" : 0, - "thirst" : 0, - "hunger" : 0 - }, - "type" : "herb" - }, - { - "name" : "herb7", - "position" : { - "x": 5, - "y": 15 - }, - "isPickupable": true, - "effect" : { - "hp" : 0, - "stamina" : 0, - "thirst" : 0, - "hunger" : 0 - }, - "type" : "herb" - }, - { - "name" : "herb8", - "position" : { - "x": 2, - "y": 9 - }, - "isPickupable": true, - "effect" : { - "hp" : 0, - "stamina" : 0, - "thirst" : 0, - "hunger" : 0 - }, - "type" : "herb" - }, - { - "name" : "herb9", - "position" : { - "x": 8, - "y": 5 - }, - "isPickupable": true, - "effect" : { - "hp" : 0, - "stamina" : 0, - "thirst" : 0, - "hunger" : 0 - }, - "type" : "herb" - }, - { - "name" : "herb10", - "position" : { - "x": 11, - "y": 10 - }, - "isPickupable": true, - "effect" : { - "hp" : 0, - "stamina" : 0, - "thirst" : 0, - "hunger" : 0 - }, - "type" : "herb" } ] \ No newline at end of file diff --git a/src/AI/GaTravelingForHerbs/Traveling.py b/src/AI/GaTravelingForHerbs/Traveling.py index d65b46d..5d66d6f 100644 --- a/src/AI/GaTravelingForHerbs/Traveling.py +++ b/src/AI/GaTravelingForHerbs/Traveling.py @@ -5,8 +5,6 @@ from src.AI.GaTravelingForHerbs.GeneticAlgorithm import GeneticAlgorithm START_COORD = [(6, 2)] END_COORD = [(10, 7)] -COORDS = [(12, 2), (16, 2), (17, 5), (14, 7), (17, 17), (13, 17), (5, 15), (2, 9), (8, 5), (11, 10)] - class Traveling: def __init__(self, coords): diff --git a/src/entities/Entity.py b/src/entities/Entity.py index 10514bc..e9aa166 100644 --- a/src/entities/Entity.py +++ b/src/entities/Entity.py @@ -251,5 +251,9 @@ class Entity(pygame.sprite.Sprite): # If A* has ben called, move the entity self.updateEntityCoords() - def __str__(self): - return "Entity - ID:{}, pos:({}x, {}y)".format(self.id, self.x, self.y) + # def __str__(self): + # return "Entity - ID:{}, pos:({}x, {}y)".format(self.id, self.x, self.y) + + def __repr__(self): + coords = (self.x, self.y) + return str(coords) diff --git a/src/game/Game.py b/src/game/Game.py index e5e51cc..5238747 100644 --- a/src/game/Game.py +++ b/src/game/Game.py @@ -1,8 +1,10 @@ import json +import random from os import path from pathlib import Path import os from random import sample +from random import shuffle import pygame @@ -13,7 +15,7 @@ from src.AI.DecisionTrees.TestDecisionTree import testDecisionTree from src.AI.DecisionTrees.projectSpecificClasses.SurvivalClassification import SurvivalClassification from src.AI.GA import geneticAlgorithm from src.AI.GaTravelingForHerbs.GeneticAlgorithm import GeneticAlgorithm -from src.AI.GaTravelingForHerbs.Traveling import Traveling, START_COORD, COORDS, END_COORD +from src.AI.GaTravelingForHerbs.Traveling import Traveling, START_COORD, END_COORD from src.entities.Player import Player from src.game.EventManager import EventManager from src.game.Map import Map @@ -410,6 +412,7 @@ class Game: self.screen = Screen(self, self.config["window"]) print("OK") + # Initialize map self.initializeMap(filesPath) # Initialize the player @@ -417,25 +420,23 @@ class Game: self.map.addEntity(self.player, DONTADD=True) self.eventManager = EventManager(self, self.player) - firstGeneration = [Traveling(START_COORD + sample(COORDS, len(COORDS)) + END_COORD) for _ in range(100)] - mutationProbability = float(0.1) + self.travelCoords = random.sample(self.map.movableList(), 10) + import ast + self.travelCoords = ast.literal_eval(str(self.travelCoords)) + self.map.insertHerbs(self.travelCoords) + + # Initialize genetic algorithm + firstGeneration = [Traveling(START_COORD + sample(self.travelCoords, len(self.travelCoords)) + END_COORD) for _ + in range(100)] + mutationProbability = float(0.1) ga = GeneticAlgorithm(firstGeneration, mutationProbability) - movementList = ga.listOfTravel() + self.movementList = ga.listOfTravel() self.entityToVisitList = [] - for i in movementList: + for i in self.movementList: self.entityToVisitList.append(self.map.getEntityOnCoord(i)) self.entityToVisitList.remove(self.entityToVisitList[0]) - # for i in entityToVisitList: - # self.player.gotoToTarget(i, self.map) - # print("ile") - - # Start game loop self.mainLoop() - - - - diff --git a/src/game/Map.py b/src/game/Map.py index 07b95c0..37c605f 100644 --- a/src/game/Map.py +++ b/src/game/Map.py @@ -22,9 +22,10 @@ class Map: """ # TODO: Should map be self-aware of its own loacation? self.screen = screen + # tekstowa macierz terenów self.terrain = [] - # tereny bez kolizji + # tereny nie kolizyjne, potrzebne też do metody movableList, która zwraca tereny na których nie ma żadnych entity self.terrainTilesList = [] # grupa objektów kolizyjnych (tereny kolizyjne i entities) self.collidables = pygame.sprite.Group() @@ -242,6 +243,20 @@ class Map: return True return False + def insertHerbs(self, coordsList): + nr = 1 + for i in range(10): + entity = Pickupable("herb" + str(nr) + ".png", self.tileSize, coordsList[i], Statistics(0, 0, 0, 0), "herb") + self.entitiesRawData.append(entity) + self.addEntity(entity) + nr += 1 + + def movableList(self): + terrainList = self.terrainTilesList + for i in self.entitiesRawData: + terrainList.remove(self.getTileOnCoord((i.x, i.y))) + return terrainList + def __del__(self): for entity in self.entities.sprites(): entity.kill() diff --git a/src/game/TerrainTile.py b/src/game/TerrainTile.py index 771ed12..0180220 100644 --- a/src/game/TerrainTile.py +++ b/src/game/TerrainTile.py @@ -24,3 +24,7 @@ class TerrainTile(pygame.sprite.Sprite): self.rect.x = x * tileSize self.rect.y = y * tileSize self.cost = cost + + def __repr__(self): + coords = (self.x, self.y) + return str(coords) \ No newline at end of file