From 062d2f00fe756d962b0dbb2b4edadde1534cee2a Mon Sep 17 00:00:00 2001 From: Weranda Date: Mon, 12 Jun 2023 13:03:27 +0200 Subject: [PATCH] =?UTF-8?q?astar=20na=20nast=C4=99pnikach?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/settings.json | 6 + __pycache__/astar.cpython-310.pyc | Bin 0 -> 1968 bytes __pycache__/bfs.cpython-310.pyc | Bin 3332 -> 3310 bytes __pycache__/config.cpython-310.pyc | Bin 383 -> 395 bytes __pycache__/main.cpython-310.pyc | Bin 3071 -> 5577 bytes __pycache__/map_add_ons.cpython-310.pyc | Bin 2871 -> 2852 bytes __pycache__/node.cpython-310.pyc | Bin 0 -> 1249 bytes astar.py | 64 ++++++++++ bfs.py | 26 ++--- config.py | 5 +- main.py | 148 +++++------------------- map_add_ons.py | 2 - 12 files changed, 117 insertions(+), 134 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 __pycache__/astar.cpython-310.pyc create mode 100644 __pycache__/node.cpython-310.pyc create mode 100644 astar.py diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..331511a --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,6 @@ +{ + "python.analysis.extraPaths": [ + "./path_alghoritms", + "./path_algorithms" + ] +} \ No newline at end of file diff --git a/__pycache__/astar.cpython-310.pyc b/__pycache__/astar.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f96716a4282e3e6f09a0dcd4715b1414bd133d22 GIT binary patch literal 1968 zcmZuyPj4JG6t_K|*_p{^o0dgM%D<>cs8gwtfFe*7p%&UykAD|a_&yzo!2(N6v_x$|k`RCvBmWzuaf%eDi zpTz*AzfhTP4k(YIt9vjABIt?r2>yZye#*K`upJV)ufUH))X)c=6vg?* zKzR&ZJ%S-4T`CA{qk_F4U8fG!<-!#n=&oo8A7)PkB80gi79f1nxKC7-$P`0eG?cM_ z30<{e&{UI{3?bX!P=e3ER@RAl#9sXiO;T_I8K-mEPLf-DExT4WbZA16%Pg((vQQB- zTxFwy;lt!G`<+Nc@AYQ7(fdwiQuQ8v_UT8T^u8{#r!qgzdf!Y&*J(7ruTJuILx*vlp|S5=-af~pYa z`|RXao!jNwwd=sdE|dEOlp&ciP4>xC^8J&kQ>UmMOmrC&#v~mam&t%lxu6>QD&fQ- z2UNaa(E}p43P#D1YuCW@eC@;eHTVMCcj~SFAm{;;TbiA5&1V#2Xrw8hgJCOj zWdqVQ!S41~&*Gi!?lXy3VS=&`ca)AYWxQlO&I$pZ7Ak*SsvHSnLN!U#OsP^T6I}A7 z>lax*-0PR}CZ4TfR>fC)Zo_v}3kJ?Yx<+?tNZC)Ep0sO#uREv6jf;jdW^F0Z0YNiO zkBMB=I!-Qj*7gan?sy+Dz_|@1s{ed#KF#j|gjpAZ**w3WI;~Lj) zhM;KE=_;nyb5&FPu}jPW$G~)BL2>Dc2C# zwLv*4#CjAMcP~rEN5;o#JW+dc2>>z;tCnMnxLgKPeWjtj$+T3Jl5c@ETC8u-#fJ8^ zmXMdk_{Dp$T|Iz-(DB|sQziTPntDX>HwX{$G5jY z{>3JYJ{09Z&+k%ERcs1-`u&pELHKnl=w1ZX)4_115f>i&;6k3 j+m*;MURoA|d???$@czFr#^0=y`5gbE6cQL>(L3xvYp<{Z literal 0 HcmV?d00001 diff --git a/__pycache__/bfs.cpython-310.pyc b/__pycache__/bfs.cpython-310.pyc index 079bba1793237383775240f0add2fd6e475f7f87..b4cdcb1208ffb8f86585c5a741ea1a88b90f4c3d 100644 GIT binary patch delta 404 zcmZpXdMC-3&&$ij00iq#x21d*n8+t%tOVqxFr+Z%Fob|;rX0p7Mt6o3<`k9|h7^`& zrYNQqreFq5)|Vh{nvAy?wfr`wIx{k|PF~44gOO{q6Vo?F#;D1bETN1%llxgFF|tfn zV>M&c+8oQ8#K@>I`2d?cqyA(L_AXv^paCnHi#UK(k;dft>?*99K&H#&6YLqh#wc>O z9O_(JKoM_{QnSf<9AO&fASOsvkqL<4gcBg|6lnvAAP~cB@*9p&ZX*yAtk`1mc@A;5 zNQhJ>=W<5%$%0%~j0ux{xN6xz4k}Wce4a~^%@oA6ocxYUm$7KF40n^bAxOXqM92XN zO;(7rl_qcHwqmTB{DC`MQxzmB2_nF1L4GL$IU4MkA{`J5tlwsG0goah^W;f98bIzFvgHebP0OiL|T>t<8 delta 464 zcmYjNO-lk%6rDTHOwXCIuZ?I?izpq<$Vx3GFe2QP5N3fOqK(u-FI+(Od=TEzUjn<2=s2-=4a+yXJDKg8g2<&dq4wb@yN*U}vUa zLPf|?6f3aS&c&RV5=@6F)df>J6LSs|GJ+w0l00pI1%b!>B7lN-a0^;9F8%;m7?!f& z!b|B!X6fuo0ljh*g3VRA1YqEkl7dP6Rj#~#`;&%)Gdpm@2CHYYT&Waz?En|p04(8i z*S2fs{}6_mPYv3YWzxj3#MZT0qBO-Lm~^_8OuO~Qvi|8#YmS(+1GGL5*^na=!@Tnz z{3xq&C}L7Q9wleoXM>@%>{)ut*bTkb{wj5dd0q6$=0W delta 95 zcmeBX{?Ejl&&$ij00hhD1*dGA$ScceFi~4tB$Y9hS&AWwErm6TJ%ufbBZWPRb7GP| pBiF=DCY&68p}z4!{^7wBpK45&WQ-CM0_taB;9z6{LkP{m2mmL&64?L% diff --git a/__pycache__/main.cpython-310.pyc b/__pycache__/main.cpython-310.pyc index 50fc8eb1da4f424b917d4d6a36f8222d72d53431..030511ec6add2ec5341a959981696924e4113b7d 100644 GIT binary patch literal 5577 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 H*+VW?gbH97;J)b}O_4PM- zr)Aq20>|n?CHT!gaVF?bC)fRHmN_Pmvn<=Ox`Yyzt=oJNBBvjTJ14)~r1K|#+%?vT z>&RQQL|@29^hfKM91(9UAdog?Ub~@>&fb(?Y9)OP?$5Ou&CScA@$2yNdaQ5O#48#b zf;DQd2rtP`^o6UY=Y`EM^1K1ql^6psX@=%#l3LW!a_X`)OMacWMz`e;iLct3BNEVn z9_z4hHnJen0!>Bs5ve=%fzBY_J41kWJ*RNEt92wWeZu#F(0 z*!e!YjSs4LUeWWX^l`PZ-c|~I`YF4h*o9N}1z;zGlq&u~G!dA`^mFn};TesJFp@ax zH8`p2Or2?IXi^oL>=)X5DW_8Ti6kiZr;cDEXb1@ax5QJjlDaKlrY1^G*sS@@h=1p` z_){?#r-Z-HTg`Husx?{%jLY9sGqfl*vs|=S&QRxK`|Qj)`OtLR+;48NI8kX;pNiPv zaEmhsexu=4S)(CbjZeYyd>)~63K!ui)|>1AQ{ozc1uy#l)6pET*7?hV+%z@*IW!;m zJ8TvvS1BPfo1VRL1Is1%cLP6Sd=i4Umg1|ByCc2y*L}FeBY=q1X-Df4Q2mnZ zq_2K70~xcE?viKP5m>4~_zb9@>16RM*h?sn>ubv#7ALL+vOdpFWYD&;v9}*aa>}~W zE@D^`%;(i@Ft)eJnIA;kUM=Jz^8DRh-tw#4uHF-;jBI#vbmiQ86xrIaN zjg|6}x4!ati93qA*$5*(j^im6S6I6mfm;}2!2N?bu~=TXzsm7V@>zrn2>6pyFRw4v zr!!>9Kc zC^mNdu(^))@e4DR@`q`qH;$~iX?Zg8VS5_quOOh~dWBWZCm5E_!$k~1P-4R+P$-j_ znmJ?^OvB7rmKt*hdXgopt!6FU;Ol$`vErEPKe96sC9IqG|gD2;5 hMeyqZg#v-NNDV~jO}@gV&IVEjWHNFaGfPTH0RXCQA)WvL delta 177 zcmZ1?wq1-jpO=@50SJ^=R-|-n*3VvN3W^{=hEH#KyFFCo3Nlqt0YoE*VCf$xqp% z#dLx4mOxz00wg#Xc$kYoA`|CJZqDa;#mE>sIf^TS-vB5S48%ohAi`ksK`wPRkTM|i L9hWh)w1gA@4-F^i diff --git a/__pycache__/node.cpython-310.pyc b/__pycache__/node.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f6fa81cb57299b72de4d68ca84b7cc3807a7fc55 GIT binary patch literal 1249 zcmZuwQE$^Q5Vn&v&DwR0X}~6dG_kz|X?s8*5FoS(#Iy%Gv@#)uNLCiRUAiEX1ls%G-}o1cke{ejn+eJ~40RWP z6Ha6D7H1=-9^E9|zRn(hC@B2VhLcgpsiUNXJHI%oC8zF`Y{q01&l+j1wzZu2DDDzb|;!)st zwpM#G@Hb_!+S&3Gh}zolP&FTg$i9~W)N#R4gZYqrlIAVea#w#3g= zWU!7BrcurSXge4VMZ#S}UPIOD$%yCaE#NvX&W?sW$OJpDtvOg#^8hwop||N0jACA* z&YzXcNZiOXa(WB<1NN~OF z+E`r));H4)#s(=L#VAiR_F)vng+<~cBo>}rK){l&06tvekH$+W2f!gvm#yh$z6!s> g4%4I?^<=Z$Sz+gg<*{>~74Dzoa}~xN&zUp+0(EHvGynhq literal 0 HcmV?d00001 diff --git a/astar.py b/astar.py new file mode 100644 index 0000000..8892695 --- /dev/null +++ b/astar.py @@ -0,0 +1,64 @@ +from config import * +import heapq + +class Astar(): + + def __init__(self,game): + + self.g = game + + # Define the movement directions (up, down, left, right) + self.directions = [(-1, 0), (1, 0), (0, -1), (0, 1)] + + def heuristic(self,a, b): + # Calculate the Manhattan distance between two points + return abs(b[0] - a[0]) + abs(b[1] - a[1]) + + def get_successors(self,position): + # Get the neighboring cells that can be traversed + successors = [] + for direction in self.directions: + neighbor = (position[0] + direction[0], position[1] + direction[1]) + if 0 <= neighbor[0] < TILE_SIZE and 0 <= neighbor[1] < TILE_SIZE and self.g.obstacles[neighbor[0]][neighbor[1]] == False: + successors.append(neighbor) + return successors + + def print_path(self,came_from, current,path): + # Recursively print the path from the start to the current position + 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) + return path + + def a_star(self,start, goal,path): + open_set = [] + heapq.heappush(open_set, (0, start)) # Priority queue with the start position + came_from = {} + g_scores = {start: 0} # Cost from start to each position + f_scores = {start: self.heuristic(start, goal)} # Total estimated cost from start to goal through each position + + while open_set: + _, current = heapq.heappop(open_set) + + if current == goal: + # Goal reached, print the path + path = self.print_path(came_from, goal,path) + return path + + for successor in self.get_successors(current): + # Calculate the cost to move from the current position to the successor + cost = self.g.cell_costs[successor[0]][successor[1]] + tentative_g_score = g_scores[current] + cost + + if successor not in g_scores or tentative_g_score < g_scores[successor]: + # Update the cost and priority if it's a better path + came_from[successor] = current + g_scores[successor] = tentative_g_score + f_scores[successor] = tentative_g_score + self.heuristic(successor, goal) + heapq.heappush(open_set, (f_scores[successor], successor)) + # No path found + print("No path found.") + + + diff --git a/bfs.py b/bfs.py index 6a8f198..160cdc5 100644 --- a/bfs.py +++ b/bfs.py @@ -41,7 +41,7 @@ class Bfs(): def get_cell_number(self,x, y): #zamienia koordynaty na numer kratki cell_number = None - cell_number =(x // TILE_SIZE) + (NUM_ROWS * (( y// TILE_SIZE))) + cell_number =(x // TILE_SIZE) + (ROWS * (( y// TILE_SIZE))) return cell_number def get_possible_moves(self,cell_number): @@ -66,28 +66,28 @@ class Bfs(): def get_up_cell(self,cell_number): - cell_row_number = cell_number // NUM_ROWS + cell_row_number = cell_number // ROWS if (cell_row_number - 1 < 0): return None else: - return (cell_number - NUM_ROWS) + return (cell_number - ROWS) def get_right_cell(self,cell_number): - cell_column_number = cell_number % NUM_ROWS - if (cell_column_number + 1 >= NUM_ROWS): + cell_column_number = cell_number % ROWS + if (cell_column_number + 1 >= ROWS): return None else: return (cell_number + 1) def get_down_cell(self,cell_number): - cell_row_number = cell_number // NUM_ROWS - if (cell_row_number + 1 >= NUM_ROWS): + cell_row_number = cell_number // ROWS + if (cell_row_number + 1 >= ROWS): return None else: - return (cell_number + NUM_ROWS) + return (cell_number + ROWS) def get_left_cell(self,cell_number): - cell_column_number = cell_number % NUM_ROWS + cell_column_number = cell_number % ROWS if (cell_column_number - 1 < 0): return None else: @@ -103,17 +103,17 @@ class Bfs(): if(from_cell - 1 == to_cell): return True - if(from_cell - NUM_ROWS == to_cell): + if(from_cell - ROWS == to_cell): return True - if(from_cell + NUM_ROWS == to_cell): + if(from_cell + ROWS == to_cell): return True return False def get_coordinates(self,cell_to_move): #zamienia numer kratki na koordynaty - cell_row_number = cell_to_move // NUM_ROWS - cell_column_number = cell_to_move % NUM_ROWS + cell_row_number = cell_to_move // ROWS + cell_column_number = cell_to_move % ROWS y = cell_row_number * TILE_SIZE x = cell_column_number * TILE_SIZE diff --git a/config.py b/config.py index ccfd4da..8454bb0 100644 --- a/config.py +++ b/config.py @@ -3,7 +3,8 @@ WIDTH, HEIGHT = 832, 832 TILE_SIZE = 64 BLACK = ((0,0,0)) WHITE = ((255,255,255)) -NUM_ROWS = WIDTH//TILE_SIZE AGENT_LAYER = 2 FLOWER_LAYER = 1 -GRASS_LAYER = 3 \ No newline at end of file +GRASS_LAYER = 3 +ROWS = HEIGHT // TILE_SIZE +COLS = WIDTH // TILE_SIZE \ No newline at end of file diff --git a/main.py b/main.py index 21d2aaf..61bc9a7 100644 --- a/main.py +++ b/main.py @@ -1,11 +1,13 @@ + import pygame from config import * from agent import * from map_add_ons import * from mobs import * from bfs import * -from heapq import * from nn import * +from astar import * + class Game: @@ -15,7 +17,7 @@ class Game: self.SCREEN = pygame.display.set_mode((WIDTH, HEIGHT)) self.running = True self.clock = pygame.time.Clock() - + self.BACKGROUND_IMG= pygame.image.load("./pozostale_zdjecia/podloze.jpg") self.BACKGROUND = pygame.transform.scale(self.BACKGROUND_IMG,(64,64)) @@ -26,6 +28,12 @@ class Game: self.bfs = Bfs(self) self.nn = NeuralN() + self.astar = Astar(self) + + self.cell_costs = [[1 for _ in range(TILE_SIZE)] for _ in range(TILE_SIZE)] + self.obstacles = [[False for _ in range(TILE_SIZE)] for _ in range(TILE_SIZE)] + + def new(self): # tworzy się nowa sesja grania @@ -42,23 +50,25 @@ class Game: self.agent = Agent(self,1,1) self.archer_ork = Archer_ork(self,10,10) + self.obstacles[10][10] = True self.bfs.enemy_cells.append(self.bfs.get_cell_number(self.archer_ork.x,self.archer_ork.y)) self.infantry_ork = Infantry_ork(self,10,4) + self.obstacles[10][4] = True self.bfs.enemy_cells.append(self.bfs.get_cell_number(self.infantry_ork.x,self.infantry_ork.y)) self.sauron = Sauron(self, 1, 10) + self.obstacles[1][10] = True self.bfs.enemy_cells.append(self.bfs.get_cell_number(self.sauron.x,self.sauron.y)) self.flower = Health_flower(self, 8,2) - - self.grass = Grass(self,0,2) - self.grass = Grass(self,1,2) - self.grass = Grass(self,0,3) - self.grass = Grass(self,1,3) - self.grass = Grass(self,0,4) - self.grass = Grass(self,1,4) - cost_cell_1000=[13,26,27,40] + + for y in range (2,5): + for x in range (2): + self.grass = Grass(self,x,y) + self.cell_costs[x][y] = 5 + for y in range(5): self.rock = Rocks(self,3,y) + self.obstacles[3][y] = True self.bfs.wall_cells.append(self.bfs.get_cell_number(self.rock.x,self.rock.y)) @@ -71,6 +81,15 @@ class Game: if event.type == pygame.QUIT: self.running = False 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)) + + + if event.type == pygame.MOUSEBUTTONDOWN: mouse_presses = pygame.mouse.get_pressed() if mouse_presses[0]: @@ -78,7 +97,7 @@ class Game: x = self.sauron.x y = self.sauron.y mob_image = self.sauron.SAURON_IMG - while True: #do poprawienia poprawne rozpoznawanie póki co nie będzie działać dobrze + 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 @@ -162,114 +181,9 @@ class Game: self.update() self.map() - grass_cells = [] - -cols, rows = 13,12 -def get_circle(x,y): - return (x * TILE_SIZE + TILE_SIZE//2, y* TILE_SIZE + TILE_SIZE//2), TILE_SIZE//4 -def get_rect(x,y): - return x*TILE_SIZE +1, y* TILE_SIZE +1, TILE_SIZE -2, TILE_SIZE -2 -''' -def get_next_nodes(x,y): - check_next_node = lambda x, y:True if 0<= x < cols and 0<=y < rows else False - ways =[-1,0],[0,-1],[1,0],[0,1] - return [(grid[y + dy][x + dx], (x + dx, y + dy)) for dx, dy in ways if check_next_node(x + dx, y + dy)] -''' -def get_neighbours(x, y): - check_neighbour = lambda x, y: True if 0 <= x < cols and 0 <= y < rows else False - ways = [-1, 0], [0, -1], [1, 0], [0, 1] - return [(grid[y + dy][x + dx], (x + dx, y + dy)) for dx, dy in ways if check_neighbour(x + dx, y + dy)] -def heuristic(a, b): - return abs(a[0] - b[0]) + abs(a[1] - b[1]) -def dijkstra(start, goal, graph): - queue = [] - heappush(queue, (0, start)) - cost_visited = {start: 0} - visited = {start: None} - - while queue: - cur_cost, cur_node = heappop(queue) - if cur_node == goal: - break - - neighbours = graph[cur_node] - for neighbour in neighbours: - neigh_cost, neigh_node = neighbour - new_cost = cost_visited[cur_node] + neigh_cost - - if neigh_node not in cost_visited or new_cost < cost_visited[neigh_node]: - priority = new_cost + heuristic(neigh_node, goal) - heappush(queue, (priority, neigh_node)) - cost_visited[neigh_node] = new_cost - visited[neigh_node] = cur_node - return visited -grid =['2229222222222', - '2229222222222', - '9929222222222', - '9929222222222', - '9929222222222', - '2222222222222', - '2222222222222', - '2222222222222', - '2222222222222', - '2222222222222', - '2222222222222', - '2222222222222' - ] -grid = [[int(char) for char in string ] for string in grid] - - -graph ={} -for y, row in enumerate(grid): - for x, col in enumerate(row): - graph[(x, y)] = graph.get((x, y), []) + get_neighbours(x, y) -#print("graph 2 0",graph[(2,0)]) - -start = (1,1) -goal =(0,5) -queue =[] -heappush(queue, (0,start)) -cost_visited = {start:0} -visited = {start: None} -goall=1 -while goall==1: - if queue: - visited=dijkstra(start,goal,graph) - goall=0 - -path=[] -path_head, path_segment = goal, goal -while path_segment: - # print("path_segment: ",path_segment) - - path_segment =visited[path_segment] - path.append(path_segment) -#print("path_head",path_head) -path.pop(len(path)-1) -path.reverse() -path_true=[] -bfss =Bfs(Game) - - -for i in path: - z=str(i) - #print("Z:",z) - x=z[1] - y=z[4] - x=int(x)*64 - y=int(y)*64 - a=bfss.get_cell_number(x,y) - path_true.append(a) -#print("path:",path) -#print("path_true:",path_true) -#bfss.move_agent(path_true) - - - - - g = Game() g.new() + while g.running: g.main() diff --git a/map_add_ons.py b/map_add_ons.py index c53cdde..1ccf826 100644 --- a/map_add_ons.py +++ b/map_add_ons.py @@ -50,8 +50,6 @@ class Grass(pygame.sprite.Sprite): self.rect.x = self.x self.rect.y = self.y - self.cost = 10 - self._layer = GRASS_LAYER class Health_flower(pygame.sprite.Sprite):