Benutzer-Werkzeuge

Webseiten-Werkzeuge


ss24:code_hier

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
ss24:code_hier [2024/07/25 17:37]
Paul-Hoeft angelegt
ss24:code_hier [2024/07/25 17:49] (aktuell)
Paul-Hoeft
Zeile 1: Zeile 1:
 ======Code====== ======Code======
-===def main()===+=====main.py===== 
 +<file python main.py>
     global running     global running
     global state     global state
Zeile 72: Zeile 73:
     pygame.quit()#​Pygame wird geschlossen     pygame.quit()#​Pygame wird geschlossen
     plt.show()#​Graphen anzeigen     plt.show()#​Graphen anzeigen
 +</​file>​
 +=====bee.update.py=====
 +<file python bee-update.py>​
 +    def update(self,​ flower, bees):
 +        scale = 3.0
 +
 +        radius_repel = 3.0 * scale
 +        radius_align = 25.0 * scale
 +        radius_attract = 100.0 * scale
 +
 +        social_strength = 0.5
 +
 +        nearestBeeDistTo = float("​inf"​)
 +        NearestBeeVecTo = pygame.Vector2(0.0,​ 0.0)
 +        NearestBeeDir = pygame.Vector2(0.0,​ 0.0)
 +        ToFlower_vec = pygame.Vector2(0.0,​ 0.0)
 +        ToHive_vec = pygame.Vector2(0.0,​ 0.0)
 +        social_vec = pygame.Vector2(0.0,​ 0.0)
 +
 +        NearestBeeStatus = None
 +
 +        # Der Vektor von der Biene zur Blume
 +        flower_pos = pygame.math.Vector2(flower.rect.center[0],​ flower.rect.center[1])
 +        # TODO solange blumen radius auch nicht über torus verläfut macht das keinen Unterschied
 +        # ob Biene über torus oder nicht
 +        to_flower = utils.nearest_vector(self.float_rect,​ flower_pos)
 +        # if(flower != self.lastflower):​
 +        _len = to_flower.length()
 +        # else:
 +        #    _len = Bee.RADIUS+1
 +        # Biene stirbt nach gewisser Zeit
 +        if time.time() - self.STARTTIME >= self.lebensdauer:​
 +            self.die()
 +            print("​die",​ self.hive.name,​ self.hive.livingBees)
 +
 +        # alle bienen durchgehen um nächste zu finden
 +        for bee in bees:
 +            BeeVecTo = (
 +                bee.float_rect - self.float_rect
 +            )  # Vector zur gerade betrachteten Biene
 +            BeeDistTo = BeeVecTo.length()
 +            if BeeDistTo < nearestBeeDistTo and BeeDistTo > 0:
 +                NearestBeeVecTo = BeeVecTo
 +                nearestBeeDistTo = BeeDistTo
 +                NearestBeeDir = bee.dir
 +                NearestBeeStatus = bee.status
 +
 +        # ich weiß das ist voll schlecht so aber mir fällt grad nichts besseres ein
 +        # ignoriert bienen anderen typs wenn IGNOREOTHERS = True
 +        # imo etwas sinnvoller denn, warum sollten suchende bienen anderen zum hive folgen
 +        # keine so großes Chaos bei hoher social_strength
 +        if config.IGNOREOTHERS:​
 +            if self.status == NearestBeeStatus:​
 +                if (
 +                    nearestBeeDistTo < radius_attract
 +                    and nearestBeeDistTo > radius_align
 +                ):
 +                    social_vec = NearestBeeVecTo.normalize()
 +
 +                if nearestBeeDistTo < radius_align and nearestBeeDistTo > radius_repel:​
 +                    social_vec = NearestBeeDir
 +
 +        else:
 +            if nearestBeeDistTo < radius_attract and nearestBeeDistTo > radius_align:​
 +                social_vec = NearestBeeVecTo.normalize()
 +
 +            if nearestBeeDistTo < radius_align and nearestBeeDistTo > radius_repel:​
 +                social_vec = NearestBeeDir
 +
 +        if nearestBeeDistTo < radius_repel:​
 +            social_vec = -NearestBeeVecTo.normalize()
 +        # falls der Vektor zur Blume <= des Blumen Radius entspricht
 +        # und die Biene neutral ist, fliegt die Biene zur Blume
 +        if _len <= Bee.RADIUS and self.status == "​neutral":​
 +            ToFlower_vec = to_flower / _len * min(_len, Bee.SPEED)
 +            # print(ToFlower_vec)
 +            self.image.fill(Bee.ATTRACTED_COLOR)
 +
 +            # Ist sie nah genug dran, ändere den status und die Biene fliegt
 +            # zurück zum hive
 +            if _len < 20:
 +                self.status = "​return"​
 +                # Biene erhält Nahrung --> lebensdauer verlängern
 +                self.lebensdauer += 5
 +                self.lastflower = flower
 +
 +        # Die Bewegung der Biene entschieden durch übergebene Argumente
 +        # während sie neutral ist
 +        # elif self.status == "​neutral":​
 +
 +        # Hier ist de Status return und die Biene fliegt zu ihrem hive zurück:
 +        # ['​self.hive'​]
 +
 +        # ist config.ENDLESS = True ist status "​neutral"​ wenn Bienen Hive erreichen
 +        elif self.status == "​return":​
 +            self.image.fill(Bee.RETURN_COLOR)
 +            to_hive = pygame.math.Vector2((self.hive.rect.center) - self.float_rect)
 +            if to_hive.length() > 5:
 +                ToHive_vec = (
 +                    to_hive / to_hive.length() * min(to_hive.length(),​ Bee.SPEED)
 +                )
 +            elif config.ENDLESS:​
 +                self.status = "​neutral"​
 +                self.image.fill(Bee.NEUTRAL_COLOR)
 +                self.hive.pollen += 1
 +                self.dir = pygame.math.Vector2(
 +                    uniform(-1.0,​ -1.0), uniform(-1.0,​ -1.0)
 +                ).normalize()
 +
 +        # Move Bee
 +        social_vec *= social_strength
 +        self.dir = (self.dir + social_vec + ToFlower_vec + ToHive_vec).normalize()
 +
 +        self.float_rect += Bee.SPEED * self.dir
 +        self.tp()
 +</​file>​
ss24/code_hier.1721921853.txt.gz · Zuletzt geändert: 2024/07/25 17:37 von Paul-Hoeft