random first population - herbs random spawn works
This commit is contained in:
parent
cf0a4be82f
commit
14850cd230
@ -459,155 +459,5 @@
|
|||||||
"y": 15
|
"y": 15
|
||||||
},
|
},
|
||||||
"isPickupable" : false
|
"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"
|
|
||||||
}
|
}
|
||||||
]
|
]
|
@ -5,8 +5,6 @@ from src.AI.GaTravelingForHerbs.GeneticAlgorithm import GeneticAlgorithm
|
|||||||
|
|
||||||
START_COORD = [(6, 2)]
|
START_COORD = [(6, 2)]
|
||||||
END_COORD = [(10, 7)]
|
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:
|
class Traveling:
|
||||||
def __init__(self, coords):
|
def __init__(self, coords):
|
||||||
|
@ -251,5 +251,9 @@ class Entity(pygame.sprite.Sprite):
|
|||||||
# If A* has ben called, move the entity
|
# If A* has ben called, move the entity
|
||||||
self.updateEntityCoords()
|
self.updateEntityCoords()
|
||||||
|
|
||||||
def __str__(self):
|
# def __str__(self):
|
||||||
return "Entity - ID:{}, pos:({}x, {}y)".format(self.id, self.x, self.y)
|
# return "Entity - ID:{}, pos:({}x, {}y)".format(self.id, self.x, self.y)
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
coords = (self.x, self.y)
|
||||||
|
return str(coords)
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
import json
|
import json
|
||||||
|
import random
|
||||||
from os import path
|
from os import path
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
import os
|
import os
|
||||||
from random import sample
|
from random import sample
|
||||||
|
from random import shuffle
|
||||||
|
|
||||||
import pygame
|
import pygame
|
||||||
|
|
||||||
@ -13,7 +15,7 @@ from src.AI.DecisionTrees.TestDecisionTree import testDecisionTree
|
|||||||
from src.AI.DecisionTrees.projectSpecificClasses.SurvivalClassification import SurvivalClassification
|
from src.AI.DecisionTrees.projectSpecificClasses.SurvivalClassification import SurvivalClassification
|
||||||
from src.AI.GA import geneticAlgorithm
|
from src.AI.GA import geneticAlgorithm
|
||||||
from src.AI.GaTravelingForHerbs.GeneticAlgorithm 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.entities.Player import Player
|
||||||
from src.game.EventManager import EventManager
|
from src.game.EventManager import EventManager
|
||||||
from src.game.Map import Map
|
from src.game.Map import Map
|
||||||
@ -410,6 +412,7 @@ class Game:
|
|||||||
self.screen = Screen(self, self.config["window"])
|
self.screen = Screen(self, self.config["window"])
|
||||||
print("OK")
|
print("OK")
|
||||||
|
|
||||||
|
# Initialize map
|
||||||
self.initializeMap(filesPath)
|
self.initializeMap(filesPath)
|
||||||
|
|
||||||
# Initialize the player
|
# Initialize the player
|
||||||
@ -417,25 +420,23 @@ class Game:
|
|||||||
self.map.addEntity(self.player, DONTADD=True)
|
self.map.addEntity(self.player, DONTADD=True)
|
||||||
self.eventManager = EventManager(self, self.player)
|
self.eventManager = EventManager(self, self.player)
|
||||||
|
|
||||||
firstGeneration = [Traveling(START_COORD + sample(COORDS, len(COORDS)) + END_COORD) for _ in range(100)]
|
self.travelCoords = random.sample(self.map.movableList(), 10)
|
||||||
mutationProbability = float(0.1)
|
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)
|
ga = GeneticAlgorithm(firstGeneration, mutationProbability)
|
||||||
movementList = ga.listOfTravel()
|
self.movementList = ga.listOfTravel()
|
||||||
|
|
||||||
self.entityToVisitList = []
|
self.entityToVisitList = []
|
||||||
for i in movementList:
|
for i in self.movementList:
|
||||||
self.entityToVisitList.append(self.map.getEntityOnCoord(i))
|
self.entityToVisitList.append(self.map.getEntityOnCoord(i))
|
||||||
|
|
||||||
self.entityToVisitList.remove(self.entityToVisitList[0])
|
self.entityToVisitList.remove(self.entityToVisitList[0])
|
||||||
|
|
||||||
# for i in entityToVisitList:
|
|
||||||
# self.player.gotoToTarget(i, self.map)
|
|
||||||
# print("ile")
|
|
||||||
|
|
||||||
# Start game loop
|
|
||||||
self.mainLoop()
|
self.mainLoop()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -22,9 +22,10 @@ class Map:
|
|||||||
"""
|
"""
|
||||||
# TODO: Should map be self-aware of its own loacation?
|
# TODO: Should map be self-aware of its own loacation?
|
||||||
self.screen = screen
|
self.screen = screen
|
||||||
|
|
||||||
# tekstowa macierz terenów
|
# tekstowa macierz terenów
|
||||||
self.terrain = []
|
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 = []
|
self.terrainTilesList = []
|
||||||
# grupa objektów kolizyjnych (tereny kolizyjne i entities)
|
# grupa objektów kolizyjnych (tereny kolizyjne i entities)
|
||||||
self.collidables = pygame.sprite.Group()
|
self.collidables = pygame.sprite.Group()
|
||||||
@ -242,6 +243,20 @@ class Map:
|
|||||||
return True
|
return True
|
||||||
return False
|
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):
|
def __del__(self):
|
||||||
for entity in self.entities.sprites():
|
for entity in self.entities.sprites():
|
||||||
entity.kill()
|
entity.kill()
|
||||||
|
@ -24,3 +24,7 @@ class TerrainTile(pygame.sprite.Sprite):
|
|||||||
self.rect.x = x * tileSize
|
self.rect.x = x * tileSize
|
||||||
self.rect.y = y * tileSize
|
self.rect.y = y * tileSize
|
||||||
self.cost = cost
|
self.cost = cost
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
coords = (self.x, self.y)
|
||||||
|
return str(coords)
|
Loading…
Reference in New Issue
Block a user