From 81404a51da0c9b4547faed5b807e1f30d2686bd3 Mon Sep 17 00:00:00 2001 From: Doom-JSlayer Date: Tue, 6 May 2025 17:13:14 +0300 Subject: [PATCH 1/3] update: movement --- __pycache__/fill_level.cpython-313.pyc | Bin 2934 -> 2962 bytes main.py | 32 +++++++++++++++++++------ 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/__pycache__/fill_level.cpython-313.pyc b/__pycache__/fill_level.cpython-313.pyc index 44a1f1b44772ad082869a9c6f413a7ba8a0cbaf4..60ba9c77b4b531d4305a1c5057d5a6f4babc7424 100644 GIT binary patch delta 64 zcmew+Hc6cOGcPX}0}yyHNNwcKU{rHVwu%WYPAw`1lQAy&$)&lec_qa$E~R 0: - if self.body[i].type == "body" or self.body[i].type == "tail": - self.body[i].x = self.body[i-1].x - self.body[i].y = self.body[i-1].y - self.body[i].rotate = self.body[i-1].rotate - i = i - 1 + self.body[i].x = self.body[i-1].x + self.body[i].y = self.body[i-1].y - self.body[0].x = int(-math.sin(-self.body[0].rotate * math.pi / 180)) + self.body[0].x - self.body[0].y = int(math.cos(-self.body[0].rotate * math.pi / 180)) + self.body[0].y + + if abs(math.cos(self.body[i+1].rotate)) == abs(math.cos(self.body[i-1].rotate)) or abs(math.sin(self.body[i+1].rotate)) == abs(math.sin(self.body[i-1].rotate)): + self.body[i].type = "body" + self.body[i].rotate = self.body[i-1].rotate + else: + self.body[i].type = "body-rotate" + self.body[i].rotate = (self.body[i+1].rotate - 90) % 360 + + + + i = i - 1 + self.body[0].x = int(-math.sin(-(vector * 90) * math.pi / 180)) + self.body[0].x + self.body[0].y = int(math.cos(-(vector * 90) * math.pi / 180)) + self.body[0].y # print(f"Move {vector}") From c7c5b6429bf5d9c2220dd003f16166d9146f0e65 Mon Sep 17 00:00:00 2001 From: PABLO Date: Wed, 7 May 2025 01:15:15 +0300 Subject: [PATCH 2/3] update: movement --- DATA/Sprites/Snake/body.aseprite | Bin 468 -> 465 bytes DATA/Sprites/Snake/body.png | Bin 371 -> 342 bytes DATA/Sprites/Snake/head.aseprite | Bin 486 -> 443 bytes DATA/Sprites/Snake/head.png | Bin 329 -> 305 bytes DATA/Sprites/Snake/tail.png | Bin 315 -> 222 bytes __pycache__/fill_level.cpython-313.pyc | Bin 2962 -> 2934 bytes main.py | 107 ++++++++++++++++--------- 7 files changed, 71 insertions(+), 36 deletions(-) diff --git a/DATA/Sprites/Snake/body.aseprite b/DATA/Sprites/Snake/body.aseprite index b2d7e37a33bc8a997f2d2ad341ea793764f737d0..fce8482037791e3c4aaa0c20008b78e7fad14b48 100644 GIT binary patch delta 175 zcmcb@e36;);zY)J#=wb<8|&vYFfgzx00{;zhW|_;8Uz#=co-_?Bqto;JtV&3pZoEO zDZ#7?w?)m|d08(Xl6~>dd7FOre8vbKm%~3^D2cUsE}2N=>h} bd{QyD=^JI17qNMQkNJ|`urMelXg>!4h6zIU delta 178 zcmcb}e1)0u%0$L`#*m4P8|xP_FfgzxFfecd>HkbX0t|Q<6c{SzBqua9d|+Mm|M0UF zf6w1a{~&*)?V^IAz}W`22~Q_{6$tXz{_Myw`{$Md;azeyc~0frx_4Yw{xq;p4DQ$V zaWvUg74(=VJR&K$-&fbjcg=23-trl8L5E~xZTFQlpUz3T%%CHu>``d0nJE#!leYUUw?|(`x*bCU zDz~6pLmM$0-Y0m#6x~UmRow^?om|J^a5#R4J6h=oY-O6;ZU6uP07*qoM6N<$f}}l+ A`2YX_ delta 331 zcmV-R0krsJ!&YAk03boRU4QRc+Td;hFo7rraNJ)+ zf=;aHX+u^8JZ)G6Fjm0RhO7$QuJ>{PsW`5i3JE3`V#@7UaUV#~i2~Mr;8H+`$N5X; zcL99;d@4)_Fv?$K8>Xhem;!S#97E{k0FYM!6LOsXF+{xl^nErkPpBC%LE0PyPQJ d#`-h=hQE9AB~Kwdp#%T`002ovPDHLkV1f#UmRA4( diff --git a/DATA/Sprites/Snake/head.aseprite b/DATA/Sprites/Snake/head.aseprite index 039b8f74758b768d4fd8e39c8d37a290721b490e..482db0b221c20f119f34788b78af9594a3a8933e 100644 GIT binary patch delta 147 zcmaFHyqlSE_e92eM(c@<+v}Sd7#LU;fCK|4!+$0a4Fa+Zd<+$Hk`olO xB+syX@?&yPkDU9LO~o25x~7*dI6Rr!s3E)}*M93;rDJ(XUlmgPz%x$i1l5jmBHX%2YqYoyB%bmFNlA{kw!*$EF8Yz97~l$_6;rj05GCuk8v+dJpcdz diff --git a/DATA/Sprites/Snake/head.png b/DATA/Sprites/Snake/head.png index 370d62f41b6655d419ef71acc923759dfe5e0f4e..30ba40a1548445f46a055b7e6031693abf31b988 100644 GIT binary patch delta 266 zcmV+l0rmdL0L^}YVrAvYY85kHC7-H7FC)pv4#P|jo2+MIZynXZ)!*W)>Q!s~O)rZR=OfW-< zrQbgK${;Mq4afOselg^q`Ni=2lNrPBPi8nBj?1HrS^EtB!+#7VM3Vz_R&|2kYEg7p!%N}%PDaLGC+3(6U8P{2$*Q?``ag8!lMCO6tEC$IU&bPG+|?4 zV8G0ZLQ*_9EoWdD1le%l3nF42K&)ekwU{CY;ByG6mC+~|1*2dT3^)J)AmpZE=AoRt Q00000NkvXXt^-0~f_30=+yDRo delta 290 zcmV+-0p0$w0?7i9Fn<99NkljtYKo z4p%{%kYGSib#x0fWtVFR$&IpQii5Rf}0O*?#Y1z%r)3QU~gxu?R0@)fV^^cD+HpMpbre$~if_V<3(z9;O7{}5KQ8?kp-$+%c o3#bEAH@L74SQ`hd1G_u$0?LN8|06E8{{R3007*qoM6N<$f`7+-CIA2c diff --git a/DATA/Sprites/Snake/tail.png b/DATA/Sprites/Snake/tail.png index ec9f76bb793f5fbd7573ca813f8447f6e11e9d7f..8c21d5d68d1695953dd4bea83fcb0706159b6f1c 100644 GIT binary patch delta 181 zcmV;m080P60^R|TF@KmzL_t(og=1hC1*2dTjDk@xz<`kw&0%xY{v-2OrQ9OfJd!ma zTPmW&#qj3dH#kkKW5VXB{bywPPn-kLeTi-6c-@m7!f5dhPRKt zG6>6Y!)d&(!v(MfFDW5~>RB!VE6+7qpNgM6c|#C00000NkvXXu0mjfr~gZN delta 275 zcmV+u0qp+X0lNZ_F@N<*L_t(oh1Hdz4udcdhW{>8AVDKY#v?I1!DAt2$0M->fdOE3FPUH`A&rL6-q*Zal$-Jz^Atn-GV%CXKH{O;h+9*^78arQfL0VrX4 zQRUKY_yB(Y955_j=Pez;(2Wi-G(ah;9Lw}NRsihzM*%F;3x8#u9ji1V02)IGkraRu zmJ?JGfVOYEhJG;sprc;|(Dsc7pi(XZ_*E{QzZf8#eM~tUKwCc>;JZBb^dbO_s}}{J zsh56hLbX|7k$u1&jjFj2J-6g1LdHm^?( 0: self.body[i].x = self.body[i-1].x self.body[i].y = self.body[i-1].y - + self.body[i].rotate = self.body[i-1].rotate if self.body[i-1] != "body-rotate" else self.convert_rot_to_tail(self.body[i-1].rotate, self.body[i].rotate) - if abs(math.cos(self.body[i+1].rotate)) == abs(math.cos(self.body[i-1].rotate)) or abs(math.sin(self.body[i+1].rotate)) == abs(math.sin(self.body[i-1].rotate)): - self.body[i].type = "body" - self.body[i].rotate = self.body[i-1].rotate - else: - self.body[i].type = "body-rotate" - self.body[i].rotate = (self.body[i+1].rotate - 90) % 360 + self.body[i].type = self.body[i-1].type + + # elif (self.body[i].type == "tail") and self.body[i-1].type == "body-rotate": + # self.body[l].rotate = self.convert_rot_to_tail(self.body[l-1].rotate, self.body[l].rotate) - - i = i - 1 - self.body[0].x = int(-math.sin(-(vector * 90) * math.pi / 180)) + self.body[0].x - self.body[0].y = int(math.cos(-(vector * 90) * math.pi / 180)) + self.body[0].y + + self.body[0].rotate = vector * 90 + self.body[0].x = int(math.cos(math.radians(self.body[0].rotate))) + self.body[0].x + self.body[0].y = int(math.sin(math.radians(self.body[0].rotate))) + self.body[0].y + + if self.body[0].rotate != self.body[1].rotate: + self.body[1].type = "body-rotate" + self.body[1].rotate = self.calculate_rot(self.body[0].rotate, self.body[1].rotate) + else: + self.body[1].type = "body" + + + self.body[l].type = "tail" + # self.body[l].rotate = lf.body[l-1].type == "body-rotate" else self.body[l-1].rotate # print(f"Move {vector}") + class Level_data(): def __init__(self, level_data_json = []): @@ -120,8 +155,8 @@ class MYGAME(arcade.Window): # food self.food_list = arcade.SpriteList() - self.food_sleep = 300 - self.delay = 400 + self.food_sleep = 200 + self.delay = 200 self.food = [] # Счет self.score = 0 @@ -133,7 +168,7 @@ class MYGAME(arcade.Window): # Загрузка змеи for body in self.snake.body: snake_sprite = arcade.Sprite(f"./DATA/Sprites/Snake/{body.type}.png", self.scale_) - snake_sprite.angle = 90 + snake_sprite.angle = 0 snake_sprite.center_x = self.level_start[0] - 16 + ( body.x + 1 ) * 32 * self.scale_ snake_sprite.center_y = self.level_start[1] - 16 + ( body.y + 1 ) * 32 * self.scale_ self.player_list.append(snake_sprite) @@ -171,7 +206,7 @@ class MYGAME(arcade.Window): i = 0 while i < len(self.snake.body): self.player_list[i] = arcade.Sprite(f"./DATA/Sprites/Snake/{self.snake.body[i].type}.png", self.scale_) - self.player_list[i].angle = self.snake.body[i].rotate + self.player_list[i].angle = 360 - self.snake.body[i].rotate self.player_list[i].center_x = self.level_start[0] - 16 + ( self.snake.body[i].x + 1 ) * 32 * self.scale_ self.player_list[i].center_y = self.level_start[1] - 16 + ( self.snake.body[i].y + 1 ) * 32 * self.scale_ i = i + 1 @@ -230,20 +265,20 @@ class MYGAME(arcade.Window): if len(self.player_list) > 0: if key in (arcade.key.UP, arcade.key.W): - if self.floor_grid[self.snake.body[0].y + 1][self.snake.body[0].x] == 1 and self.snake.body[0].rotate != 180 and not(self.snake.check_contact(self.snake.body[0].x ,self.snake.body[0].y+1)): - self.snake.move(0) + if self.floor_grid[self.snake.body[0].y + 1][self.snake.body[0].x] == 1 and self.snake.body[0].rotate != 270 and not(self.snake.check_contact(self.snake.body[0].x ,self.snake.body[0].y+1)): + self.snake.move(1) elif key in (arcade.key.DOWN, arcade.key.S): - if self.floor_grid[self.snake.body[0].y - 1][self.snake.body[0].x] == 1 and self.snake.body[0].rotate != 0 and not(self.snake.check_contact(self.snake.body[0].x ,self.snake.body[0].y-1)): - self.snake.move(2) - - elif key in (arcade.key.LEFT, arcade.key.A): - if self.floor_grid[self.snake.body[0].y][self.snake.body[0].x - 1] == 1 and self.snake.body[0].rotate != 90 and not(self.snake.check_contact(self.snake.body[0].x - 1,self.snake.body[0].y)): + if self.floor_grid[self.snake.body[0].y - 1][self.snake.body[0].x] == 1 and self.snake.body[0].rotate != 90 and not(self.snake.check_contact(self.snake.body[0].x ,self.snake.body[0].y-1)): self.snake.move(3) + elif key in (arcade.key.LEFT, arcade.key.A): + if self.floor_grid[self.snake.body[0].y][self.snake.body[0].x - 1] == 1 and self.snake.body[0].rotate != 0 and not(self.snake.check_contact(self.snake.body[0].x - 1,self.snake.body[0].y)): + self.snake.move(2) + elif key in (arcade.key.RIGHT, arcade.key.D): - if self.floor_grid[self.snake.body[0].y][self.snake.body[0].x + 1] == 1 and self.snake.body[0].rotate != 270 and not(self.snake.check_contact(self.snake.body[0].x + 1,self.snake.body[0].y)): - self.snake.move(1) + if self.floor_grid[self.snake.body[0].y][self.snake.body[0].x + 1] == 1 and self.snake.body[0].rotate != 180 and not(self.snake.check_contact(self.snake.body[0].x + 1,self.snake.body[0].y)): + self.snake.move(0) def on_key_release(self, key, modifiers): """Вызывается, когда пользователь отпускает клавишу""" From f99fe6e27c07cb90803c267170de5b5e13b9534c Mon Sep 17 00:00:00 2001 From: PABLO Date: Thu, 8 May 2025 01:29:18 +0300 Subject: [PATCH 3/3] fix: movement --- DATA/Sprites/Snake/body.png | Bin 342 -> 308 bytes main.py | 92 ++++++++++++++++++++++-------------- 2 files changed, 56 insertions(+), 36 deletions(-) diff --git a/DATA/Sprites/Snake/body.png b/DATA/Sprites/Snake/body.png index 9d8d66773aabbaa69869d56a6bc37b28aee2a3a3..f3a53f97bed8bf468b6cdd9e9110b926e8682325 100644 GIT binary patch delta 269 zcmV+o0rLLV0<;2DbI2BEigSU}a$9O$@B?2p$4b zhtBQTPL;xx;F=@~kPY8r$w_tR>%{;J27~eM5V6DEd1YwtvVTOs`B?xaHS_XVlrKHG zga|q%CRJL((2Y 0: self.body[i].x = self.body[i-1].x self.body[i].y = self.body[i-1].y - self.body[i].rotate = self.body[i-1].rotate if self.body[i-1] != "body-rotate" else self.convert_rot_to_tail(self.body[i-1].rotate, self.body[i].rotate) + self.body[i].rotate = self.body[i-1].rotate + self.body[i].type = self.body[i-1].type + i -= 1 - self.body[i].type = self.body[i-1].type - - # elif (self.body[i].type == "tail") and self.body[i-1].type == "body-rotate": - # self.body[l].rotate = self.convert_rot_to_tail(self.body[l-1].rotate, self.body[l].rotate) - - i = i - 1 - - self.body[0].rotate = vector * 90 self.body[0].x = int(math.cos(math.radians(self.body[0].rotate))) + self.body[0].x self.body[0].y = int(math.sin(math.radians(self.body[0].rotate))) + self.body[0].y @@ -102,14 +122,14 @@ class SNAKE(): self.body[1].type = "body-rotate" self.body[1].rotate = self.calculate_rot(self.body[0].rotate, self.body[1].rotate) else: - self.body[1].type = "body" - - - self.body[l].type = "tail" - # self.body[l].rotate = lf.body[l-1].type == "body-rotate" else self.body[l-1].rotate - # print(f"Move {vector}") + self.body[1].type = "body" + + self.body[len(self.body)-1 ].type = "tail" + self.body[len(self.body)-1 ].rotate = self.calc_tail_rotate() + + class Level_data(): def __init__(self, level_data_json = []): if level_data_json: @@ -176,8 +196,8 @@ class MYGAME(arcade.Window): # Загрузка пола for floor in self.Lvl_data.floor: floor_sprite = arcade.Sprite(floor["sprite"], self.scale_) - floor_sprite.center_x = self.level_start[0] - 16 + ( floor["x"] + 1 ) * 32 * self.scale_ - floor_sprite.center_y = self.level_start[1] - 16 + ( floor["y"] + 1 ) * 32 * self.scale_ + floor_sprite.center_x = self.level_start[0] - 16 + ( floor["x"] + 1 ) * 32 * self.scale_ + floor_sprite.center_y = self.level_start[1] - 16 + ( floor["y"] + 1 ) * 32 * self.scale_ self.floor_list.append(floor_sprite) # Загрузка врагов @@ -221,7 +241,7 @@ class MYGAME(arcade.Window): self.food_list[i].kill() self.food.pop(i) self.score += 1 - self.snake.add_dody() + self.snake.add_body() self.player_list.append(arcade.Sprite()) i += 1 # Enemy_spawn