Python city Simulator
Verfasst: Mittwoch 13. Mai 2020, 14:27
Hallo zusammen,
Ich muss als Aufgabe eine "City-Simulation" Application programmieren.
Es geht darum eine random Karte zu generieren, diese grafisch (so rastermässig) auszugeben und dann ein paar Autos und Menschen automatisch drüber laufen zu lassen. Sprich das das Programm alle paar Sekunden von selbst aktualisiert und dann wie erwähnt die Autos fahren und die Menschen über die Strassen umherlaufen.
Anbei habe ich einmal alles was ich schon habe reinkopiert... Irgendwie hänge ich aber nun ein wenig wie es weiter geht. Zudem bin ich mir bewusst, dass mein Programm schon noch sehr kompliziert und umständlich aussieht. Da ich aber noch ein ziemlicher Amateur bin dachte ich mir das ich zuerst einmal schaue das es irgendwie läuft und ich dann zum Schluss beginne alles zu überarbeiten.
Kann mir jemand einen Tipp geben wie ich weiterfahren soll? bzw. wie ich das Programmieren könnte das sich Autos etc. über die Karte bewegen können?
Vielen Dank für die Hilfe
class Car:
def __init__(self):
self.car = ("\U0001F697")
class Person:
def __init__(self):
self.person = ("\U0001F6B9")
class Create: #Hier wird die Grundkarte erstellt
def __init__(self):
self.grid = None
self.starttime = None
self.endtime= None
self.vote = None
gras = "\033[32m\U0001F7E9" #gestrichelt
water = "\033[34m\U0001F7E6" #blue / getrichelt
empty_street = "\033[37m\U00002B1C" #white/grey
house = "\033[30m\U00002B1B" #black
self.symbols = [self.empty_street, water, house, gras]
def choice(self): #Hier hat der Benutzer die Wahl ob er eine random Karte will oder eine bestehende basierend auf einer bekannten stadt...
self.vote = int(input('Wollen Sie eine zufällige Karte (1) erstellen, oder einen Karten-Ausschnitt von xyz (2) wählen? '))
return self.vote
def random_grid_maker(self):
x1 = random.randint(1, 30)
x2 = random.randint(1, 30)
x3 = random.randint(1, 30)
x4 = random.randint(1, 30)
x5 = random.randint(1, 30)
n = 30
self.grid = [[0] * n for i in range(n)]
for i in range(n):
for j in range(n):
if i == x1 or i == x2 or i == x3 or i == x4 or i == x5:
self.grid[j] = "\033[37m\U00002B1C" #white/grey
elif j == x1 or j == x2 or j == x3 or j == x4 or j == x5:
self.grid[j] = "\033[37m\U00002B1C" #white/grey
elif i == x1+1 or i == x2+1 or i == x3+1 or i == x4+1 or i == x5+1:
self.grid[j] = "\033[30m\U00002B1B" #black
elif j == x1+1 or j == x2+1 or j == x3+1 or j == x4+1 or j == x5+1:
self.grid[j] = "\033[30m\U00002B1B" #black
elif i == x1-1 or i == x2-1 or i == x3-1 or i == x4-1 or i == x5-1:
self.grid[j] = "\033[30m\U00002B1B" #black
elif j == x1-1 or j == x2-1 or j == x3-1 or j == x4-1 or j == x5-1:
self.grid[j] = "\033[30m\U00002B1B" #black
else:
self.grid[j] = "\033[32m\U0001F7E9" #grün gestrichelt
for row in self.grid:
print(''.join([str(elem) for elem in row]))
return self.grid
def realistic(self):
x1 = 5
x2 = 10
x3 = 15
x4 = 20
x5 = 25
n = 30
self.grid = [[0] * n for i in range(n)]
for i in range(n):
for j in range(n):
if i == x1 or i == x2 or i == x3 or i == x4 or i == x5:
self.grid[j] = "\033[37m\U00002B1C" #white/grey
elif j == x1 or j == x2 or j == x3 or j == x4 or j == x5:
self.grid[j] = "\033[37m\U00002B1C" #white/grey
elif i == x1+1 or i == x2+1 or i == x3+1 or i == x4+1 or i == x5+1:
self.grid[j] = "\033[30m\U00002B1B" #black
elif j == x1+1 or j == x2+1 or j == x3+1 or j == x4+1 or j == x5+1:
self.grid[i][j] = "\033[30m\U00002B1B" #black
elif i == x1-1 or i == x2-1 or i == x3-1 or i == x4-1 or i == x5-1:
self.grid[i][j] = "\033[30m\U00002B1B" #black
elif j == x1-1 or j == x2-1 or j == x3-1 or j == x4-1 or j == x5-1:
self.grid[i][j] = "\033[30m\U00002B1B" #black
else:
self.grid[i][j] = "\033[32m\U0001F7E9" #grün gestrichelt
for row in self.grid:
print(''.join([str(elem) for elem in row]))
return self.grid
def execute_1(self): # Hier wird alles aufgerufen, dass man nicht alles separat aufrufen muss...
self.choice()
if self.vote == 1:
self.random_grid_maker()
elif self.vote == 2:
self.realistic()
else:
raise Exception('Falsche Eingabe, Sie müssen die Zahl 1 oder zwei wählen')
self.execute_1()
class City_Game(Create): #Hier wird das eigentliche Spiel gestartet... damit es
def __init__(self):
Create.__init__(self)
self.grid2 = self.grid
def aufgabe_1(self):
# Hier wird der Task 1 programmiert
return
def ausgabe_2(self):
return
def update(self):
#Hier wird das Programm laufend udated... sprich der Spielfluss...
return
if __name__ == "__main__":
a = Create()
a.execute_1()
print(a)
#zip funktion... um farbe und farbcodierung hinzuzufügen...
Ich muss als Aufgabe eine "City-Simulation" Application programmieren.
Es geht darum eine random Karte zu generieren, diese grafisch (so rastermässig) auszugeben und dann ein paar Autos und Menschen automatisch drüber laufen zu lassen. Sprich das das Programm alle paar Sekunden von selbst aktualisiert und dann wie erwähnt die Autos fahren und die Menschen über die Strassen umherlaufen.
Anbei habe ich einmal alles was ich schon habe reinkopiert... Irgendwie hänge ich aber nun ein wenig wie es weiter geht. Zudem bin ich mir bewusst, dass mein Programm schon noch sehr kompliziert und umständlich aussieht. Da ich aber noch ein ziemlicher Amateur bin dachte ich mir das ich zuerst einmal schaue das es irgendwie läuft und ich dann zum Schluss beginne alles zu überarbeiten.
Kann mir jemand einen Tipp geben wie ich weiterfahren soll? bzw. wie ich das Programmieren könnte das sich Autos etc. über die Karte bewegen können?
Vielen Dank für die Hilfe
class Car:
def __init__(self):
self.car = ("\U0001F697")
class Person:
def __init__(self):
self.person = ("\U0001F6B9")
class Create: #Hier wird die Grundkarte erstellt
def __init__(self):
self.grid = None
self.starttime = None
self.endtime= None
self.vote = None
gras = "\033[32m\U0001F7E9" #gestrichelt
water = "\033[34m\U0001F7E6" #blue / getrichelt
empty_street = "\033[37m\U00002B1C" #white/grey
house = "\033[30m\U00002B1B" #black
self.symbols = [self.empty_street, water, house, gras]
def choice(self): #Hier hat der Benutzer die Wahl ob er eine random Karte will oder eine bestehende basierend auf einer bekannten stadt...
self.vote = int(input('Wollen Sie eine zufällige Karte (1) erstellen, oder einen Karten-Ausschnitt von xyz (2) wählen? '))
return self.vote
def random_grid_maker(self):
x1 = random.randint(1, 30)
x2 = random.randint(1, 30)
x3 = random.randint(1, 30)
x4 = random.randint(1, 30)
x5 = random.randint(1, 30)
n = 30
self.grid = [[0] * n for i in range(n)]
for i in range(n):
for j in range(n):
if i == x1 or i == x2 or i == x3 or i == x4 or i == x5:
self.grid[j] = "\033[37m\U00002B1C" #white/grey
elif j == x1 or j == x2 or j == x3 or j == x4 or j == x5:
self.grid[j] = "\033[37m\U00002B1C" #white/grey
elif i == x1+1 or i == x2+1 or i == x3+1 or i == x4+1 or i == x5+1:
self.grid[j] = "\033[30m\U00002B1B" #black
elif j == x1+1 or j == x2+1 or j == x3+1 or j == x4+1 or j == x5+1:
self.grid[j] = "\033[30m\U00002B1B" #black
elif i == x1-1 or i == x2-1 or i == x3-1 or i == x4-1 or i == x5-1:
self.grid[j] = "\033[30m\U00002B1B" #black
elif j == x1-1 or j == x2-1 or j == x3-1 or j == x4-1 or j == x5-1:
self.grid[j] = "\033[30m\U00002B1B" #black
else:
self.grid[j] = "\033[32m\U0001F7E9" #grün gestrichelt
for row in self.grid:
print(''.join([str(elem) for elem in row]))
return self.grid
def realistic(self):
x1 = 5
x2 = 10
x3 = 15
x4 = 20
x5 = 25
n = 30
self.grid = [[0] * n for i in range(n)]
for i in range(n):
for j in range(n):
if i == x1 or i == x2 or i == x3 or i == x4 or i == x5:
self.grid[j] = "\033[37m\U00002B1C" #white/grey
elif j == x1 or j == x2 or j == x3 or j == x4 or j == x5:
self.grid[j] = "\033[37m\U00002B1C" #white/grey
elif i == x1+1 or i == x2+1 or i == x3+1 or i == x4+1 or i == x5+1:
self.grid[j] = "\033[30m\U00002B1B" #black
elif j == x1+1 or j == x2+1 or j == x3+1 or j == x4+1 or j == x5+1:
self.grid[i][j] = "\033[30m\U00002B1B" #black
elif i == x1-1 or i == x2-1 or i == x3-1 or i == x4-1 or i == x5-1:
self.grid[i][j] = "\033[30m\U00002B1B" #black
elif j == x1-1 or j == x2-1 or j == x3-1 or j == x4-1 or j == x5-1:
self.grid[i][j] = "\033[30m\U00002B1B" #black
else:
self.grid[i][j] = "\033[32m\U0001F7E9" #grün gestrichelt
for row in self.grid:
print(''.join([str(elem) for elem in row]))
return self.grid
def execute_1(self): # Hier wird alles aufgerufen, dass man nicht alles separat aufrufen muss...
self.choice()
if self.vote == 1:
self.random_grid_maker()
elif self.vote == 2:
self.realistic()
else:
raise Exception('Falsche Eingabe, Sie müssen die Zahl 1 oder zwei wählen')
self.execute_1()
class City_Game(Create): #Hier wird das eigentliche Spiel gestartet... damit es
def __init__(self):
Create.__init__(self)
self.grid2 = self.grid
def aufgabe_1(self):
# Hier wird der Task 1 programmiert
return
def ausgabe_2(self):
return
def update(self):
#Hier wird das Programm laufend udated... sprich der Spielfluss...
return
if __name__ == "__main__":
a = Create()
a.execute_1()
print(a)
#zip funktion... um farbe und farbcodierung hinzuzufügen...