ich schaue mir gerade dieses Tutorial an
https://www.youtube.com/watch?v=iaOKlxi ... 06jqsm6UY6
Da die SFML Bibo wohl nicht mehr für python 3.x zu erhalten ist wollte ich das im Tuorial beschribene Programm in ein pygame Programm umschreiben.
Ich komme nur bis
https://www.youtube.com/watch?v=KiwsYpf ... Y6&index=5
Minute 7:57
UNd bekomme dieses UpdateBots unter pygame nicht zum laufen. Mit sicherheit habe ich da einen mächtigen Denkfehler drin oder kann einfach nicht weit genug um die Eckedenken. Vielleicht hat eine/r von euch ja einen Hinweis wie ich das beschriebene Tutorial in pygame umschreien kann und über diese Gedankenhürde grad drüber komme?
Hier das Main
Code: Alles auswählen
import pygame
from Robot_Manager import RobotManager
from Robot import Roboter
if not pygame.font: print('Fehler pygame.font Modul konnte nicht geladen werden!')
if not pygame.mixer: print('Fehler pygame.mixer Modul konnte nicht geladen werden!')
def main():
pygame.init()
Bilschirm = (800, 800)
screen = pygame.display.set_mode(Bilschirm)
pygame.display.set_caption("EA_Roboter_Scheiß")
pygame.mouse.set_visible(1)
pygame.key.set_repeat(1, 30)
clock = pygame.time.Clock()
robot_manager = RobotManager(screen)
robot_manager.Roboter_hinzufügen(13)
robot = Roboter(300, 300, screen, 10)
# Die Schleife, und damit unser Spiel, läuft solange running == True.
running = True
while running:
# Framerate auf 30 Frames pro Sekunde beschränken.
# Pygame wartet, falls das Programm schneller läuft.
clock.tick(30)
# screen-Surface mit Schwarz (RGB = 0, 0, 0) füllen.
screen.fill((0, 0, 0))
# Alle aufgelaufenen Events holen und abarbeiten.
for event in pygame.event.get():
# Spiel beenden, wenn wir ein QUIT-Event finden.
if event.type == pygame.QUIT:
running = False
# Wir interessieren uns auch für "Taste gedrückt"-Events.
if event.type == pygame.KEYDOWN:
# Wenn Escape gedrückt wird, posten wir ein QUIT-Event in Pygames Event-Warteschlange.
if event.key == pygame.K_ESCAPE:
pygame.event.post(pygame.event.Event(pygame.QUIT))
# Inhalt von screen anzeigen.
#robot.update_bewegung(screen) #WENN ich hier auskommentiere und zeile 46 drin lasse wird nicht gezeichnet
robot_manager.zeichne_Roboter(screen)# Wenn ich hier auskommentiere und Zeile 45 drin lasse wird einer gezeichnet
# Wenn ich beide Zeilen (45 und 46) drin lasse , wird irgenwas komisches verspiegeltes gezeichnet
pygame.display.flip()
# Überprüfen, ob dieses Modul als Programm läuft und nicht in einem anderen Modul importiert wird.
if __name__ == '__main__':
# Unsere Main-Funktion aufrufen.
main()
Hier mein Roboter
Code: Alles auswählen
import pygame
from random import randint
from math import sqrt
class Roboter:
def __init__(self, x, y, window, durchmesser):
self.x = x
self.y = y
self.delta_x = 0
self.delta_y = 0
self.bewegungs_sequenz_laenge = randint(1, 100)
self.maximum_distanz = randint(1, 100)
self.bewegungs_sequenz_zaehler = 0
self.ziel_x = 0
self.ziel_y = 0
self.geschwindigkeit = 2.4
self.durchmesser = durchmesser
self.Roboter_Kreis = pygame.draw.circle(window,[255, 0, 0], (self.x, self.y), 20, 0)
self.kreiere_bewegungs_sequenz()
def update_bewegung(self, window):
self.update_richtung(window)
self.x += self.delta_x
self.y += self.delta_y
self.Roboter_Kreis = pygame.draw.circle(window,[255, 0, 0], (self.ziel_x, self.ziel_y), 20, 0)
def kreiere_bewegungs_sequenz(self):
self.bewegungs_sequenz = []
count = 0
while count < self.bewegungs_sequenz_laenge:
delta_x = randint(-self.maximum_distanz, self.maximum_distanz)
delta_y = randint(-self.maximum_distanz, self.maximum_distanz)
if delta_x != 0 or delta_y != 0:
self.bewegungs_sequenz.append((delta_x, delta_y))
count += 1
print(self.bewegungs_sequenz)
def update_ziel(self):
if self.bewegungs_sequenz_zaehler == len(self.bewegungs_sequenz) - 1:
self.bewegungs_sequenz_zaehler = 0
else:
self.bewegungs_sequenz_zaehler += 1
self.update_richtung()
def update_richtung(self,window):
delta_x, delta_y = self.bewegungs_sequenz[self.bewegungs_sequenz_zaehler]
self.ziel_x = int(self.x + delta_x)
self.ziel_y = int(self.y + delta_y)
hypotenuse = sqrt(delta_x**2 + delta_y**2)
self.delta_x = ((delta_x / hypotenuse) * self.geschwindigkeit)
self.delta_y = ((delta_y / hypotenuse) * self.geschwindigkeit)
Code: Alles auswählen
import pygame
from Robot import Roboter
from random import randint
class RobotManager():
def __init__(self, window):
self.Roboter_alle = []
self.window = window
print(window)
def Roboter_hinzufügen(self, anzahl=1, Roboter_Duchmesser=10):
for i in range(0, anzahl):
self.Roboter_alle.append(Roboter(randint(Roboter_Duchmesser, 800 - Roboter_Duchmesser),
randint(Roboter_Duchmesser, 800 - Roboter_Duchmesser),
self.window,
Roboter_Duchmesser))
def zeichne_Roboter(self, window):
for Robot in self.Roboter_alle:
window.blit(window, Robot.Roboter_Kreis)