From d8ad5b7fb05f86cd8ac683a85b3285ac475ed54b Mon Sep 17 00:00:00 2001 From: wojciech goralewski Date: Wed, 14 Jun 2023 20:05:06 +0200 Subject: [PATCH] random map generation --- __pycache__/agent.cpython-39.pyc | Bin 5874 -> 5457 bytes __pycache__/astar.cpython-39.pyc | Bin 0 -> 1941 bytes __pycache__/bfs.cpython-39.pyc | Bin 4605 -> 3298 bytes __pycache__/config.cpython-39.pyc | Bin 357 -> 351 bytes __pycache__/genetic.cpython-39.pyc | Bin 0 -> 1203 bytes __pycache__/map_add_ons.cpython-39.pyc | Bin 2865 -> 2868 bytes __pycache__/mobs.cpython-39.pyc | Bin 3040 -> 2459 bytes __pycache__/nn.cpython-39.pyc | Bin 0 -> 2583 bytes genetic.py | 52 +++++++++++++++++++ main.py | 68 +++++++++++++++++-------- 10 files changed, 98 insertions(+), 22 deletions(-) create mode 100644 __pycache__/astar.cpython-39.pyc create mode 100644 __pycache__/genetic.cpython-39.pyc create mode 100644 __pycache__/nn.cpython-39.pyc create mode 100644 genetic.py diff --git a/__pycache__/agent.cpython-39.pyc b/__pycache__/agent.cpython-39.pyc index 554b1b52d49dc7f191c21f9477dce29efa2f59ad..b5850691c78d2fb0aa79d8074e8be2a2ae82d3cf 100644 GIT binary patch delta 2191 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 literal 0 HcmV?d00001 diff --git a/__pycache__/bfs.cpython-39.pyc b/__pycache__/bfs.cpython-39.pyc index 4cb36bfc62955fb0084bf71375409304871ed514..7e95420aa7ce27c5e5330cf6eac96e5a380903f9 100644 GIT binary patch literal 3298 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 Hkb@Bb8H5pe9OB z;ly9y(sJPOFZdn4a>`%e#LR9{3&JaZGoBfL9?y8gdc8_ud?6p@eV34*xHvu>SggU! z9|K4tX+nZh(tt`9umO?IXBs$)&q?4G=t&+_q#O8cB0X98KxAdkf+b0Nr0Fk!hjbTf zfKAWRN0xRheP-zkOWT${UVH_|;vPT*^RK~RwFWc40-y*SPXZ<(i4P=jq$4>nB0y9_u#v>W*ffT*+RCE_1P#M1R*O$SuvkWz184^UtJGY!CrcU=rz4Ta zQ)S&u$0K9CY%&Ok%JQ9YY^^DsA2kESqIpy7rjg42$(ltZnS!~dURrwTN+z#V%WmXB!i9V+btED??hjN{C=I2 ztFPKRyxr@(8kF6>lTGYd)OBc-IHEca;rT59LVf&LjaF$5v?@+m{n1KUV?Lc;K72uU z{=*mHQ~WcqR=6%+)e0yxcvqJQcDRtvjLn=rgKp7oliDRLk?3`T7G7}I(h1Z+C5hNQ zl#}9iC0qwOdwQUZC_}_VM5&f{!JK;l<$b0Xk8=GdvfFg6FT@DCC4{XCF-+w+LA@r# z&Nxg;kG=t18Y^_{a4fRM4D<0AO(l$AU)re7HazCpwdljF1QDSlNWJL~@&G%W& z8F}SU^hmOAX3+pzJh^~XlF@4NEB0tXO(54Ch>Mwk1P61G=Hw5o7L)rp-twxTXszRX l!5BO_ohw362dFR*u7jyaXYvIubvBSWK;~aALuN@4DFD`|K{x;a delta 231 zcmdlYwo!~Xk(ZZ?0SM|A1*arz*-Hk%A&yj5@e*N)a2tVZLBQG z`NbuZeOQedl_oc^Ds!+gRq?qOB^FPf%cZ*c9IH7avj|X^5c_5pEuf~!iL8>0Hj^K- zM+<5Lxt2g&%mgGjn2WSG`*Wx=GD`tfH*&sU44s_C6(OhxlnaI{Vk**`e3?s~4WzY5 MZxXj5v$Tj50MG$9k^lez diff --git a/__pycache__/mobs.cpython-39.pyc b/__pycache__/mobs.cpython-39.pyc index 62dd1005ff1a825eb9cf308c15d0a4924d9a110a..0e80dd93fe6949ffc3031d3308e8dccbd200314b 100644 GIT binary patch literal 2459 zcmd^APjlNu6yMc9%ZltciPI)cTA*|QGc;j1G7KbiOz@DpjGZ3PbY@4@%C=ltGAkKy z#y5K53vjlN{sw#%_P~XczXB)TlM>qn4zxXXXZEM}d;9PC`S*6+QpqCFe*f(kZf_9s zCzAE10Xc!5d<(z{ry+6htAzA|oDr^a?K$C^Px?w<{aJN1@afzDpRx4m;45$weCE<; zaM~ud;sSOh%^H>TLl4dMrT{sCo>T#R;!sW;g;TCPCyvThSguLyRCqmKuvk3vFx2aY zHueY5lRp3^bV3-JkUr^y1*mis@TjTQ*Zan_Fu^f(rcg3bQnLz-6({PIWu+$YjSOv$ zJC$HvdAbQ}N;BjY;9Jve;1#aSaOa&=n^u8uK)1U}HmeMFdAbX@!}GI{-{9Je!ntVQ zoZ-oPU>Bk9K@6mCWtPQt7}@6ru>CB)TWGTbP9PJ7=HdMZn1$q~s0Mrhp)^!KI+;GE?B|{OU zegb5f_(U3A5s!xO9gee^Mm|d#?QFI*84IEyWlRsR>6z#v;f$WXxi05c5%pw$0f0BR9-Pvh%WF*5G|OS*QRg{sb$?R5Sic z)nzxLjvJ+7{D#&S+zMCqW&W$a9@fw6bu6#@!@&1?aq41y3Cz1N5KsyW{0Br4Ee=pS z%+&-JEs>>QExCy(;mk6^CPD=P6(zP2miiOBNN*tAMA$>v2XHEl=2xf9i`IA7H6m`| z*a42&>to^&{kIYBAiRa}Ho`jycM;x2xQBpZ&LPtlhJ^l?5&7=Aj8-xiA1t^2#~~lV z0LF4HVC1hPV59AhL>#?=Ps0n+Jy<;r?bFAtN6q6T%gcW$7B7!nvA=@#f?^B#s`J;^ zs+EUx literal 3040 zcmd^>TW{h<6vt<5V~n{ZA>^Lkwik(&lC5}bt5wj7rgV2ng{i8wB3WLK0kh`Pv1v=h zTla%NpPFye=XvcDU!hMu$85mt<^d&-u{3|5b7nj<9)9OwJDb%BTnB#{?C&fg|DqGW z6mZU<1q_4{Mtx%9UGiyzoD(K9@yX-{b*kYjKI4mYgY%SPp(+Ubv*kCyualSovWVr z=5)|&T}!hwcxj#hxt2IZ8|7MF+L1NG=&S@%JQPaH?z$pv`@R(nxEHzsIE(WQgxcc$ z;Q;P~Q8ZGWj}od8jTV|^c|9+*ERkwdUsNokYE}gOL(q{({O+-^E!4K_wc4RbcwM{Y z3dQf+%*>VR&wi-Xt&93|tNQX>q(W}@f@Yt0MIvx)-!=8+2$3{~ylFe|@N3@-MJ8}V z%jx@Y0PaX=E%3POghGil;k&=NzEGKs>s>2C30%L)F%9@O3ZivQ_!n^d?{nvyOQUN2 zRKNJK^1NZaEE|nV{qmgKCr0(M+kYLL4n}+nMkb*Jk3a}jX`bdKo$6qzQV#3_-J}^Q z0})+P>DBfU(9@gasli6zta@$?KSOQ$VU$|feu#^=w#rzPP-r4m_Z!Rm#ZlFbIIL9Xqw#a(1 z^9wi>Rl;*98z`G72n^4oEP&%X=Lw5P0rnkYUnbtik1&3W z@)63%D4(Ewit-r>!udWlxDkx6OYTmbjU~JMtJS$Nb$CSOW3X@^H&mj3Cn~e?l}it= zt{>fwW$899u@rpBWp0Jb(!Idkio;jJ3LPUeyV7|dG@l|l$mbeGb$11jb=W+CdB4RK zFpr^PqJJkgRl^?ge(&KySy)0DL`QHNjZxA3ph_m^54^Y+hPqMyxqeZ5k3V%Dy$^UM zVzDN88}na(9pb)*X@9|~-w}s?QH%Z^gzEHrO|KREmx$6B3uZ(n$HB4sy{NH5`)>ZN V@D#t>0{o8As3sMT3de=x{{gFvV~GF& diff --git a/__pycache__/nn.cpython-39.pyc b/__pycache__/nn.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7f22e6492f09976b0e8e32ad47cb112a29bf632f GIT binary patch literal 2583 zcmZuzOOG745pMQ-dS-TJAGWmC!=tq=X&hu=CCDWZWCg3l7HqEttzpB&1`SS=JKMAU z63LOYlO7XO4Efp5vF_vpL-ME*h_f&f14*?}j5zc&U$lO*=^|4REkL)5h(04C+$vnL)i{6L%=uHHQ8f=rwkRsCMqBWWp42$T$%| zxCuF8Tv5R;do*L2j7btH`SZ<$#a-xP0|sU&tHEMK&1VL-s0BLg+S_3>PLiES3IEvE zf#^cthAs|(BaI4Cbcz=JnQjAL|+7LIgE=NKW_pSqP- zf-JA3KW$Bes;yQFS31)$fOXKxuu z|2~EBUnqN5-`bn@OOv)}K-;uKyL9EmU9^6}>7C;QWox>sbd*|$TvPL+E!XA7^d;J- zt90$e1o~yVPB-XF^ksVC#FiV?g;PWCc7JvE;xBiri~7VS-Gn<{QFm6GW&0FO0?_A{ z?(`LUNn3eodYN9PS56SUIzjZ+6Y#clt1GAABONR{AbGWHl|k8|*G{ZO7kIByKpXIN z=+<)-Ujr1cYZM2{LqO8h60iRP$+cU6o%r8*ER`MAdg*F=HmYl<#ze(>MaTLLppe|E zI;F~lUfHW&qa8(Q>DQ-kRM*QMtovo3UcY24`qHm%0Da@sguRvOX4wbsYU!7&^v0%9 z4Nr|tW3dJiSW~u@YmksPcd$37Qx?T!-j|%j8KYsEQhI7}k+ zW5&X)>eW^WtNLXaO5?8^d)5MsR%u(B$LM2#@)6W5C_<{Rtb}Dlt2Re()hMi;{WxLb zbAz|x@HajB$Gvwr`R(rgy(}9QM|JD=gk|h$!SAT@_zJo)-&$7BsNjsoksRGl@`xnj z&gi-Dd~KIJW^|yP7$iBNjMgR}&)2t=GXw3+a(^`W&%ags@7vhd&d1s0>~ElGXr6rm zlX|C&vw_-haQ`t$VoGG3XQ3#PSYlVq#)8S(7K~9G#Ol=uMLcIX7!w&CEa?~LCVkzC zw}+O#y18EgIYhV}XT?m0;(!$FtPgu!JtNo_fIhZ4OJ+l}_6kBNSXl=olJR40&DmX$ zJNr8fL&Pt@gl$4e`jNVGpXX_qd*@usNgrrT-$lUvf3@;=rCb5xJ+p6%w(Jhe7T96 zauR|WYQ$*FStN6QRJYHS0QcZ}?x;Z}K5ji^0?+Kez*lw)!UfwVl1*}epCsE{aWcvC;s|@-c1pksYd=dX`3bZ%4y>tMI zQsCZl0Z&*$#w^hfOEYxfB>z1OJ?P>y7z`BX-$m1RI%oy?r~~UaEgzXLe&4wM&(CSBw=4{`U*~*P&nedqyFjV$3Zb&Z zH@R95yZjnVwLMAlF}5Due_!Vi4j@lO&i9l23BL{k{H7XIK{d(V(ceO&rnZ_QxT=`y c&R 168: + print("GENETIC: Podana populacja przekracza limit miejsc na mapie") + pygame.quit() + + for i in range(155): + MAP_TILES_LIST.append(i) + random.shuffle(MAP_TILES_LIST) + if 14 in MAP_TILES_LIST: + MAP_TILES_LIST.remove(14) + if 131 in MAP_TILES_LIST: + MAP_TILES_LIST.remove(131) + + for i in range(population_size): + tile = MAP_TILES_LIST.pop() + type = random.choice(TYPES) + object = (tile,type) + population.append(object) + + if type == 'A': + TYPES.remove('A') + if type == 'I': + TYPES.remove('I') + + print(population) + return population + + def get_cell_x_y_cord(x,y): + cell_x = x // TILE_SIZE + cell_y = y // TILE_SIZE + return cell_x, cell_y + diff --git a/main.py b/main.py index d3c5f7c..6a7903e 100644 --- a/main.py +++ b/main.py @@ -7,6 +7,7 @@ from mobs import * from bfs import * from nn import * from astar import * +from genetic import * class Game: @@ -29,6 +30,7 @@ class Game: self.bfs = Bfs(self) self.nn = NeuralN() self.astar = Astar(self) + self.genetic = Genetic() 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)] @@ -49,27 +51,41 @@ class Game: self.little_rock_sprites = pygame.sprite.LayeredUpdates() 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.list_object = list() + self.list_object = Genetic.generate_population() + l = len(self.list_object) + while l > 0: + obj = self.list_object.pop() + x,y = self.bfs.get_coordinates(obj[0]) + cell_x, cell_y = Genetic.get_cell_x_y_cord(x,y) + l=l-1 + if obj[1] == 'A': + self.archer_ork = Archer_ork(self,cell_x,cell_y) + self.obstacles[cell_x][cell_y] = True + self.bfs.enemy_cells.append(self.bfs.get_cell_number(self.archer_ork.x,self.archer_ork.y)) + if obj[1] == 'I': + self.infantry_ork = Infantry_ork(self,cell_x,cell_y) + self.obstacles[cell_x][cell_y] = True + self.bfs.enemy_cells.append(self.bfs.get_cell_number(self.infantry_ork.x,self.infantry_ork.y)) + if obj[1] == 'F': + self.flower = Health_flower(self,cell_x,cell_y) + if obj[1] == 'R': + self.rock = Rocks(self,cell_x,cell_y) + self.obstacles[cell_x][cell_y] = True + self.bfs.wall_cells.append(self.bfs.get_cell_number(self.rock.x,self.rock.y)) + if obj[1] == 'G': + self.grass = Grass(self,cell_x,cell_y) + self.cell_costs[cell_x][cell_y] = 5 + if obj[1] == 'B': + continue + - 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)) def update(self): @@ -92,6 +108,14 @@ class Game: mouse_presses = pygame.mouse.get_pressed() if mouse_presses[0]: + gx = self.archer_ork.x + gy = self.archer_ork.y + a_cell_x, a_cell_y = Genetic.get_cell_x_y_cord(gx,gy) + gx2 = self.infantry_ork.x + gy2 = self.infantry_ork.y + i_cell_x, i_cell_y = Genetic.get_cell_x_y_cord(gx2,gy2) + + x = self.sauron.x y = self.sauron.y goal = x//TILE_SIZE,y//TILE_SIZE @@ -100,8 +124,8 @@ class Game: prediction = "SAURON" while True: #do poprawienia poprawne rozpoznawanie póki co nie będzie działać dobrze, program się będzie zawieszać if prediction == "SAURON" and self.agent.level < 3: - x = self.archer_ork.x - y = self.archer_ork.y + x = self.archer_ork.x, + y = self.archer_ork.y, goal = x//TILE_SIZE,y//TILE_SIZE mob_image = self.archer_ork.image_path prediction = self.prediction_road(x,y,mob_image) @@ -111,7 +135,7 @@ class Game: self.move_agent(self.astar.a_star(goal)) elif prediction == "ORK_INFANTRY": - self.obstacles[10][4] = False + self.obstacles[i_cell_x][i_cell_y] = 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) @@ -123,13 +147,13 @@ class Game: prediction = self.prediction_road(x,y,mob_image) prediction = "SAURON" elif prediction == "ORK_ARCHER": - self.obstacles[10][10] = False + self.obstacles[a_cell_x][a_cell_y] = 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 + 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)