diff --git a/__pycache__/agent.cpython-310.pyc b/__pycache__/agent.cpython-310.pyc index cb98914..a04bc5b 100644 Binary files a/__pycache__/agent.cpython-310.pyc and b/__pycache__/agent.cpython-310.pyc differ diff --git a/__pycache__/astar.cpython-310.pyc b/__pycache__/astar.cpython-310.pyc index f96716a..7110827 100644 Binary files a/__pycache__/astar.cpython-310.pyc and b/__pycache__/astar.cpython-310.pyc differ diff --git a/__pycache__/bfs.cpython-310.pyc b/__pycache__/bfs.cpython-310.pyc index b4cdcb1..6060d9a 100644 Binary files a/__pycache__/bfs.cpython-310.pyc and b/__pycache__/bfs.cpython-310.pyc differ diff --git a/__pycache__/mobs.cpython-310.pyc b/__pycache__/mobs.cpython-310.pyc index efa8782..fe46d72 100644 Binary files a/__pycache__/mobs.cpython-310.pyc and b/__pycache__/mobs.cpython-310.pyc differ diff --git a/__pycache__/nn.cpython-310.pyc b/__pycache__/nn.cpython-310.pyc index c334d29..ae981ea 100644 Binary files a/__pycache__/nn.cpython-310.pyc and b/__pycache__/nn.cpython-310.pyc differ diff --git a/agent.py b/agent.py index 37414d0..93cc93d 100644 --- a/agent.py +++ b/agent.py @@ -9,7 +9,7 @@ class Agent(pygame.sprite.Sprite): self.game = game self.groups = self.game.all_sprites pygame.sprite.Sprite.__init__(self, self.groups) - # direction =['right','down','left','up'] 0 1 2 3 kierunek w ktory po kliknieciu do przodu pojdzie + self.AGENT_IMAGES =['gandalf-prawo','gandalf-dol','gandalf-lewo','gandalf-gora'] self.x = x * TILE_SIZE self.y = y * TILE_SIZE @@ -19,7 +19,6 @@ class Agent(pygame.sprite.Sprite): self.x_change = 0 self.y_change = 0 - #self.AGENT_IMG = pygame.image.load("./zdjecia/"+self.AGENT_IMAGES[self.direction]+".png") self.AGENT_IMG_RIGHT = pygame.image.load("./pozostale_zdjecia/gandalf-prawo.png") self.AGENT_RIGHT = pygame.transform.scale(self.AGENT_IMG_RIGHT,(64,64)) self.AGENT_IMG_DOWN = pygame.image.load("./pozostale_zdjecia/gandalf-dol.png") @@ -41,12 +40,14 @@ class Agent(pygame.sprite.Sprite): self.level = 1 - self.current_health = 500 - self.max_health = 1000 - self.health_bar_length = 300 + self.current_health = 200 + self.max_health = 200 + self.health_bar_length = 200 self.health_ratio = self.max_health/self.health_bar_length self._layer = AGENT_LAYER - + self.damage = 50*self.level + + self.artifact = True def update(self): @@ -54,7 +55,6 @@ class Agent(pygame.sprite.Sprite): self.movement() self.collide_mob() self.collide_flower() - #self.end_game() gra sie konczy gdy wie gdzie sa wszyscy self.disp_level() self.rect.x += self.x_change @@ -102,9 +102,6 @@ class Agent(pygame.sprite.Sprite): if self.direction==3 and self.rect.y > 0: self.y_change -= TILE_SIZE - def end_game(self): - if (-1 in self.game.state)==False: - pygame.quit() def collide_flower(self): hits_flower = pygame.sprite.spritecollide(self, self.game.flowers, False) @@ -133,14 +130,8 @@ class Agent(pygame.sprite.Sprite): hits_archer_ork = pygame.sprite.spritecollide(self, self.game.archer_orks, False) hits_infantry_ork = pygame.sprite.spritecollide(self, self.game.infantry_orks, False) - #hits_infantry_ork2 = pygame.sprite.spritecollide(self, self.game.infantry_orks2, False) hits_sauron = pygame.sprite.spritecollide(self, self.game.sauronL, False) - #hits_unknown_mob = pygame.sprite.spritecollide(self, self.game.unknown_mobs, False) #unknown mob - #if hits_unknown_mob: - # self.game.unknown_mob.kill() - # self.game.archer_orks = pygame.sprite.LayeredUpdates() - # self.game.archer_ork = Archer_ork(self,3,2) - + @@ -186,23 +177,7 @@ class Agent(pygame.sprite.Sprite): self.level=self.level+1 pygame.quit() - ''' - if hits_infantry_ork2: - if self.game.infantry_ork2.level > self.level or self.game.infantry_ork2.damage > self.current_health: - self.game.state[4]=self.game.infantry_ork2.x - self.game.state[5]=self.game.infantry_ork2.y - print(self.game.state) - self.kill() - self.game.new() - else: - self.game.state[4]=self.game.infantry_ork2.x - self.game.state[5]=self.game.infantry_ork2.y - print(self.game.state) - self.game.infantry_ork2.kill() - self.get_damage(self.game.infantry_ork2.damage) - self.level=self.level+1 - ''' - + def get_damage(self,amount): @@ -210,9 +185,7 @@ class Agent(pygame.sprite.Sprite): self.current_health -= amount if self.current_health <= 0: self.current_health = 0 - - #zmienic potem na smierc oraz później trzeba będzie tutaj ująć wszystkie statystyki - #i ze statystyk obliczyć ile dmg dostanie agent + def get_health(self, amount): if self.current_health < self.max_health: @@ -228,7 +201,6 @@ class Agent(pygame.sprite.Sprite): def disp_level(self): font = pygame.font.SysFont(None, 40) lvlDisplay = font.render(str(self.level)+" "+str(self.direction), 1, WHITE) - #lvlDisplay = font.render(str(self.level), 1, WHITE) pygame.draw.rect(self.game.SCREEN, BLACK, (370, 780, 40, 40)) self.game.SCREEN.blit(lvlDisplay, (370,780)) diff --git a/astar.py b/astar.py index 8892695..5e95810 100644 --- a/astar.py +++ b/astar.py @@ -28,10 +28,13 @@ class Astar(): if current in came_from: path = self.print_path(came_from, came_from[current],path) path.append(self.g.bfs.get_cell_number(current[0]*TILE_SIZE,current[1]*TILE_SIZE)) - print("Budowanie ścieżki: ",path) + #print("Budowanie ścieżki: ",path) return path - def a_star(self,start, goal,path): + def a_star(self, goal): + path = [] + start = (self.g.agent.rect.x//TILE_SIZE, self.g.agent.rect.y//TILE_SIZE) + print(start,goal) open_set = [] heapq.heappush(open_set, (0, start)) # Priority queue with the start position came_from = {} @@ -40,7 +43,7 @@ class Astar(): while open_set: _, current = heapq.heappop(open_set) - + if current == goal: # Goal reached, print the path path = self.print_path(came_from, goal,path) diff --git a/bfs.py b/bfs.py index 160cdc5..e78f03a 100644 --- a/bfs.py +++ b/bfs.py @@ -10,10 +10,10 @@ class Bfs(): def heuristic(a,b): return abs(a[0]-b[0])+abs(a[1]-b[1]) def bfs(self,goal_cell): - print("x: ", self.game.agent.x, "y: ", self.game.agent.y) + print("x: ", self.game.agent.rect.x, "y: ", self.game.agent.rect.y) visited = set() q = queue.Queue() - start_position = self.get_cell_number(self.game.agent.x,self.game.agent.y) + start_position = self.get_cell_number(self.game.agent.rect.x,self.game.agent.rect.y) q.put(start_position) parent = {} diff --git a/main.py b/main.py index 61bc9a7..d3c5f7c 100644 --- a/main.py +++ b/main.py @@ -83,10 +83,8 @@ class Game: pygame.quit() if event.type == pygame.KEYDOWN: if event.key == pygame.K_SPACE: - self.start_pos = (self.agent.x//TILE_SIZE, self.agent.y//TILE_SIZE) self.goal_pos = (self.flower.x//TILE_SIZE, self.flower.y//TILE_SIZE) - self.path = [] - self.move_agent(self.astar.a_star(self.start_pos, self.goal_pos,self.path)) + self.move_agent(self.astar.a_star(self.goal_pos)) @@ -96,35 +94,63 @@ class Game: x = self.sauron.x y = self.sauron.y - mob_image = self.sauron.SAURON_IMG + goal = x//TILE_SIZE,y//TILE_SIZE + mob_image = self.sauron.image_path + prediction = self.prediction_road(x,y,mob_image) + prediction = "SAURON" while True: #do poprawienia poprawne rozpoznawanie póki co nie będzie działać dobrze, program się będzie zawieszać - prediction = self.prediction_road(x,y,mob_image) - if prediction == "SAURON": - x = self.infantry_ork.x - y = self.infantry_ork.y - mob_image = self.infantry_ork.INFANTRY_ORK_IMG - prediction = self.prediction_road(x,y,mob_image) - if prediction == "ORK_INFANTRY": - self.move_agent(self.bfs.bfs(self.bfs.get_cell_number(x,y))) + if prediction == "SAURON" and self.agent.level < 3: x = self.archer_ork.x y = self.archer_ork.y - mob_image = self.archer_ork.ARCHER_ORK_IMG + goal = x//TILE_SIZE,y//TILE_SIZE + mob_image = self.archer_ork.image_path prediction = self.prediction_road(x,y,mob_image) - if prediction == "ORK_ARCHER": - self.move_agent(self.bfs.bfs(self.bfs.get_cell_number(x,y))) + prediction = "ORK_ARCHER" + elif prediction == "SAURON" and self.agent.level >= 3: + self.obstacles[1][10] = False + self.move_agent(self.astar.a_star(goal)) + + elif prediction == "ORK_INFANTRY": + self.obstacles[10][4] = False + self.move_agent(self.astar.a_star(goal)) + if self.agent.current_health < self.agent.max_health: + goal = (self.flower.x//TILE_SIZE, self.flower.y//TILE_SIZE) + self.move_agent(self.astar.a_star(goal)) x = self.sauron.x y = self.sauron.y - mob_image = self.sauron.SAURON_IMG + goal = x//TILE_SIZE,y//TILE_SIZE + mob_image = self.sauron.image_path + prediction = self.prediction_road(x,y,mob_image) + prediction = "SAURON" + elif prediction == "ORK_ARCHER": + self.obstacles[10][10] = False + self.move_agent(self.astar.a_star(goal)) + if self.agent.current_health < self.agent.max_health: + goal = (self.flower.x//TILE_SIZE, self.flower.y//TILE_SIZE) + self.move_agent(self.astar.a_star(goal)) + x = self.infantry_ork.x + y = self.infantry_ork.y + goal = x//TILE_SIZE,y//TILE_SIZE + mob_image = self.infantry_ork.image_path + prediction = self.prediction_road(x,y,mob_image) + prediction = "ORK_INFANTRY" + def prediction_road(self,x,y,mob_image): - mob_goal = (self.bfs.get_cell_number(x,y)) - if self.bfs.get_up_cell(mob_goal) == None: - goal = self.bfs.get_down_cell(mob_goal) + mob_goal_cell = (self.bfs.get_cell_number(x,y)) + if self.bfs.get_up_cell(mob_goal_cell) == None: + goal_cell = self.bfs.get_down_cell(mob_goal_cell) + x,y = self.bfs.get_coordinates(goal_cell) + goal = x//TILE_SIZE,y//TILE_SIZE + self.move_agent(self.astar.a_star(goal)) + prediction = self.nn.predict(mob_image) else: - goal = self.bfs.get_up_cell(mob_goal) - self.move_agent(self.bfs.bfs(goal)) + goal_cell = self.bfs.get_up_cell(mob_goal_cell) + x,y = self.bfs.get_coordinates(goal_cell) + goal = x//TILE_SIZE,y//TILE_SIZE + self.move_agent(self.astar.a_star(goal)) prediction = self.nn.predict(mob_image) return prediction @@ -133,7 +159,7 @@ class Game: for cell_to_move in path: x, y = self.bfs.get_coordinates(cell_to_move) print("Ruch do kratki : ", cell_to_move, " z x: ", x, ", y: ", y, ", agent.x: ", self.agent.rect.x, ", agent.y: ", self.agent.rect.y) - if(self.bfs.get_cell_number(self.agent.x,self.agent.y)!=cell_to_move): + if(self.bfs.get_cell_number(self.agent.rect.x,self.agent.rect.y)!=cell_to_move): if x > self.agent.rect.x: self.agent.direction = 0 elif y > self.agent.rect.y: @@ -143,16 +169,16 @@ class Game: elif y < self.agent.rect.y: self.agent.direction = 3 if self.agent.direction==0: - print("DIRECTION: "+self.agent.AGENT_IMAGES[self.agent.direction]) + #print("DIRECTION: "+self.agent.AGENT_IMAGES[self.agent.direction]) self.agent.x_change += TILE_SIZE elif self.agent.direction==1: - print("DIRECTION: "+self.agent.AGENT_IMAGES[self.agent.direction]) + #print("DIRECTION: "+self.agent.AGENT_IMAGES[self.agent.direction]) self.agent.y_change += TILE_SIZE elif self.agent.direction==2: - print("DIRECTION: "+self.agent.AGENT_IMAGES[self.agent.direction]) + #print("DIRECTION: "+self.agent.AGENT_IMAGES[self.agent.direction]) self.agent.x_change -= TILE_SIZE elif self.agent.direction==3: - print("DIRECTION: "+self.agent.AGENT_IMAGES[self.agent.direction]) + #print("DIRECTION: "+self.agent.AGENT_IMAGES[self.agent.direction]) self.agent.y_change -= TILE_SIZE self.agent.rotate() diff --git a/mobs.py b/mobs.py index f6ef837..334b71b 100644 --- a/mobs.py +++ b/mobs.py @@ -14,7 +14,8 @@ class Archer_ork(pygame.sprite.Sprite): self.width = TILE_SIZE self.height = TILE_SIZE - self.ARCHER_ORK_IMG = pygame.image.load("./pozostale_zdjecia/ork_lucznik.png") + self.image_path = "./pozostale_zdjecia/ork_lucznik.png" + self.ARCHER_ORK_IMG = pygame.image.load(self.image_path) self.ARCHER_ORK = pygame.transform.scale(self.ARCHER_ORK_IMG,(64,64)) self.image = pygame.Surface([self.width, self.height]) @@ -27,6 +28,7 @@ class Archer_ork(pygame.sprite.Sprite): self.level = 1 self.damage = 50*self.level + self.health = 50 class Infantry_ork(pygame.sprite.Sprite): @@ -41,7 +43,8 @@ class Infantry_ork(pygame.sprite.Sprite): self.width = TILE_SIZE self.height = TILE_SIZE - self.INFANTRY_ORK_IMG = pygame.image.load("./pozostale_zdjecia/ork-piechota.png") + self.image_path = "./pozostale_zdjecia/ork-piechota.png" + self.INFANTRY_ORK_IMG = pygame.image.load(self.image_path) self.INFANTRY_ORK = pygame.transform.scale(self.INFANTRY_ORK_IMG,(64,64)) self.image = pygame.Surface([self.width, self.height]) @@ -54,37 +57,9 @@ class Infantry_ork(pygame.sprite.Sprite): self.level = 2 self.damage = 50*self.level - -''' - -class Infantry_ork2(pygame.sprite.Sprite): + self.health = 100 - def __init__(self, game, x, y): - self.game = game - self.groups = self.game.all_sprites, self.game.infantry_orks2 - pygame.sprite.Sprite.__init__(self, self.groups) - - self.x = x * TILE_SIZE - self.y = y * TILE_SIZE - self.width = TILE_SIZE - self.height = TILE_SIZE - - self.INFANTRY_ORK2_IMG = pygame.image.load("./zdjecia/ork-piechota2.png") - self.INFANTRY_ORK2 = pygame.transform.scale(self.INFANTRY_ORK2_IMG,(64,64)) - - self.image = pygame.Surface([self.width, self.height]) - self.image.blit(self.INFANTRY_ORK2, (0,0)) - self.image.set_colorkey((0, 0, 0)) - - self.rect = self.image.get_rect() - self.rect.x = self.x - self.rect.y = self.y - - self.level = 3 - self.damage = 50*self.level - -''' class Sauron(pygame.sprite.Sprite): @@ -98,7 +73,8 @@ class Sauron(pygame.sprite.Sprite): self.width = TILE_SIZE self.height = TILE_SIZE - self.SAURON_IMG = pygame.image.load("./pozostale_zdjecia/sauron.png") + self.image_path = "./pozostale_zdjecia/sauron.png" + self.SAURON_IMG = pygame.image.load(self.image_path) self.SAURON = pygame.transform.scale(self.SAURON_IMG,(64,64)) self.image = pygame.Surface([self.width, self.height]) @@ -109,6 +85,6 @@ class Sauron(pygame.sprite.Sprite): self.rect.x = self.x self.rect.y = self.y - self.level = 4 + self.level = 3 self.damage = 50*self.level - \ No newline at end of file + self.health = 150 \ No newline at end of file diff --git a/nn.py b/nn.py index 7edd8a1..b27deb6 100644 --- a/nn.py +++ b/nn.py @@ -12,7 +12,7 @@ import pathlib class NeuralN: # @staticmethod - def predict(self,image): + def predict(self,image_path): data_dir = pathlib.Path('zdjecia') saved_model_path = pathlib.Path('trained_model.h5') class_names_path = pathlib.Path("class_names.pkl")