From dc9a8d52ff5195f94e36eef51168309c33f5152b Mon Sep 17 00:00:00 2001 From: Anton Laktionov Date: Wed, 17 Jun 2026 17:46:47 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A3=D0=BB=D1=83=D1=87=D1=88=D0=B8=D0=BB=20?= =?UTF-8?q?=D0=B1=D0=B0=D0=BB=D0=B0=D0=BD=D1=81.=20=D0=9A=D0=BE=D1=80?= =?UTF-8?q?=D0=BE=D0=B2=D0=B0=20=D0=B8=D0=B4=D0=B5=D1=82=20=D0=BA=20=D0=BE?= =?UTF-8?q?=D0=B4=D0=BD=D0=BE=D0=BC=D1=83=20=D0=B8=D0=B7=20=D0=B1=D0=BB?= =?UTF-8?q?=D0=B8=D0=B6=D0=B0=D0=B9=D1=89=D0=B8=D1=85=203=D1=85=20=D1=80?= =?UTF-8?q?=D0=B0=D1=81=D1=82=D0=B5=D0=BD=D0=B8=D0=B9.=20=D0=A3=D1=87?= =?UTF-8?q?=D0=B8=D1=82=D1=8B=D0=B2=D0=B0=D0=B5=D1=82=D1=81=D1=8F=20=D1=82?= =?UTF-8?q?=D0=B0=D0=BA=20=D0=B6=D0=B5=20=D1=80=D0=B0=D0=B7=D0=BC=D0=B5?= =?UTF-8?q?=D1=80=20=D1=80=D0=B0=D1=81=D1=82=D0=B5=D0=BD=D0=B8=D1=8F.=20?= =?UTF-8?q?=D0=95=D1=81=D0=BB=D0=B8=20=D0=BF=D0=BE=D1=81=D0=BB=D0=B5=D0=B4?= =?UTF-8?q?=D0=BD=D1=8F=D1=8F=20=D0=BA=D0=BE=D1=80=D0=BE=D0=B2=D0=B0=20?= =?UTF-8?q?=D1=83=D0=BC=D0=B8=D1=80=D0=B0=D0=B5=D1=82,=20=D1=82=D0=BE=20?= =?UTF-8?q?=D0=BD=D0=BE=D0=B2=D0=B0=D1=8F=20=D1=81=D0=BB=D1=83=D1=87=D0=B0?= =?UTF-8?q?=D0=B9=D0=BD=D1=8B=D0=BC=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B7=D0=BE?= =?UTF-8?q?=D0=BC=20=D1=81=D0=BF=D0=B0=D0=B2=D0=BD=D0=B8=D1=82=D1=81=D1=8F?= =?UTF-8?q?.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.py | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/main.py b/main.py index 6a0964f..b5ae2e8 100644 --- a/main.py +++ b/main.py @@ -19,6 +19,8 @@ class Cow(arcade.SpriteCircle): self.age_to_bride = 3 self.health = 30 self.speed = 5 + self.move_target = 0 + self.target_timer = 0 Cow.ls.append(self) @classmethod def update(cls): @@ -26,6 +28,8 @@ class Cow(arcade.SpriteCircle): c.age += 1 if c.age >= 30: cls.ls.remove(c) + if len(cls.ls) == 0: + Cow() continue hit_plant = arcade.check_for_collision_with_list(c,Plant.ls) for p in hit_plant: @@ -35,10 +39,12 @@ class Cow(arcade.SpriteCircle): c.health -= 30 Plant.ls.remove(p) else: - near_plant = Plant.get_near(c.center_x,c.center_y) - if near_plant: - vec = cls.get_vector(c.center_x,near_plant.center_x, - c.center_y,near_plant.center_y) + if c.target_timer <= 0: + c.move_target = Plant.get_near(c.center_x,c.center_y) + c.target_timer = 5 + if c.move_target: + vec = cls.get_vector(c.center_x,c.move_target.center_x, + c.center_y,c.move_target.center_y) new_x = c.center_x + vec[0]*randint(0,c.speed) new_y = c.center_y + vec[1]*randint(0,c.speed) if 0 < new_x < SCREEN_SIZE[0] and 0 < new_y < SCREEN_SIZE[1]: @@ -79,14 +85,11 @@ class Plant(arcade.SpriteCircle): Plant.ls.append(self) @classmethod def get_near(cls,x,y): - min_dist = SCREEN_SIZE[0] - near_plant = None + dist_list = list() for p in cls.ls: - dist = ((p.center_x - x)**2 + (p.center_y - y)**2)**0.5 - if dist < min_dist: - near_plant = p - min_dist = dist - return near_plant + dist_list.append((p,((p.center_x - x)**2 + (p.center_y - y)**2)**0.5 - p.width )) + dist_list.sort(key=lambda x: x[1]) + return dist_list[randint(0,3)][0] @classmethod def update(cls): for p in cls.ls: @@ -121,6 +124,7 @@ class MainView(arcade.View): def on_update(self, delta_time): self.cur_time += delta_time if self.cur_time >= TICK_TIME: + print(f'Total plants: {len(Plant.ls)}, total cows: {len(Cow.ls)}') Plant.update() Cow.update() self.time += 1