Hi, bin Neuling. Dieses Prog. bleibt bei Zeile 21 stehen, Meldung SyntaxError: bad input on line 21
import pygame
import sys
partikel = 25
schlange = [[13, 13][13, 14]]
richtung = 0
pygame.init()
clock = pygame.time.clock
screen = pygame.display.set_mode([700, 700])
def zeichner():
screen.fill((0, 102, 0))
kopf = True
for x in schlange:
Coords = [x[0] * partikel, x[1]* partikel]
if kopf:
pygame.draw.rect(screen, (0,0,0),(Coords[0], Coords[1], partikel, partikel, 0)
kopf = False
else:
pygame.draw.rect(screen, (47,79,79),(Coords[0], Coords[1], partikel, partikel, 0)
go = True
anhang = None
apfelInd = -1
ende = False
score = 0
while go:
for event in pygame.event.get():
if event.type == pygame.QUIT: sys.exit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP and richtung != 2:
richtung = 0
if event.key == pygame.K_RIGHT and richtung != 3:
richtung = 1
if event.key == pygame.K_DOWN and richtung != 0:
richtung = 2
if event.key == pygame.K_LEFT and richtung != 1:
richtung = 3
zahl = len(schlange)-1
for i in range(1, len(schlange)):
schlange [zahl] = schlange[zahl-1].copy()
zahl -= 1
if richtung == 0:
schlange[0][1] -= 1
if richtung == 1:
schlange[0][0] += 1
if richtung == 2:
schlange[0][1] += 1
if richtung == 3:
schlange[0][0] -= 1
if ende == False:
zeichner()
pygame.display.update()
else:
print("Du hast " + str(score) + "Punkte erreicht")
sys.exit()
clock.tick(10)
kann mir jemand helfen? Vielen Dank!
Anfängerfehler!?
Das Programm bleibt nicht stehen, sondern der Compiler meldet einen Fehler, weil in der Zeile davor eine Klammer fehlt.
Zudem mischst Du in Deinem Programm globale Variablen und Konstanten wild durcheinander, so dass es schwierig ist, den Programmfluß zu verstehen. Alles was eine Funktion braucht, muß sie auch über ihre Argumente bekommen.
`x` ist ein schlechter Name für eine x-y-Koordinate.
Vergiss gleich, dass es sys.exit gibt, ein Programm beendet sich, wenn es die main-Funktion verläßt.
`go` ist immer True, also überflüssig.
`anhang`, `apfelInd` werden nie benutzt.
`ende` ist immer False.
Bei der Initialisierung von `schlange` fehlt ein Komma.
Die for-Schleife, in der Du `schlange` änderst, sieht komisch aus. Du definierst eine `zahl` und hast gleichzeitig ein `i`, das Du gar nicht benutzt.
Dann machst Du Kopien von Listen, deren Original Du gleich danach wegwirfst.
Statt Kopien zu machen, würde man bei Bedarf neue Listen erzeugen, statt sie zu ändern.
Statt Strings mit + zusammenzustückeln benutzt man Formatstrings.
Bevor Du also weiter mit Deinem Programm machst, solltest Du es ersteinmal aufräumen.
Zudem mischst Du in Deinem Programm globale Variablen und Konstanten wild durcheinander, so dass es schwierig ist, den Programmfluß zu verstehen. Alles was eine Funktion braucht, muß sie auch über ihre Argumente bekommen.
`x` ist ein schlechter Name für eine x-y-Koordinate.
Vergiss gleich, dass es sys.exit gibt, ein Programm beendet sich, wenn es die main-Funktion verläßt.
`go` ist immer True, also überflüssig.
`anhang`, `apfelInd` werden nie benutzt.
`ende` ist immer False.
Bei der Initialisierung von `schlange` fehlt ein Komma.
Die for-Schleife, in der Du `schlange` änderst, sieht komisch aus. Du definierst eine `zahl` und hast gleichzeitig ein `i`, das Du gar nicht benutzt.
Code: Alles auswählen
for i in range(len(schlange)-1, 0, -1):
schlange[i] = schlange[i-1].copy()
Statt Kopien zu machen, würde man bei Bedarf neue Listen erzeugen, statt sie zu ändern.
Statt Strings mit + zusammenzustückeln benutzt man Formatstrings.
Bevor Du also weiter mit Deinem Programm machst, solltest Du es ersteinmal aufräumen.
Code: Alles auswählen
import pygame
PARTIKEL = 25
def zeichner(screen, schlange):
screen.fill((0, 102, 0))
color = (0, 0, 0)
for x, y in schlange:
pygame.draw.rect(screen, color, (x * PARTIKEL, y * PARTIKEL, PARTIKEL, PARTIKEL), width=0)
color = (47, 79, 79)
def main():
schlange = [[13, 13], [13, 14]]
richtung = 0
pygame.init()
clock = pygame.time.clock
screen = pygame.display.set_mode([700, 700])
score = 0
ende = False
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
ende = True
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP and richtung != 2:
richtung = 0
elif event.key == pygame.K_RIGHT and richtung != 3:
richtung = 1
elif event.key == pygame.K_DOWN and richtung != 0:
richtung = 2
elif event.key == pygame.K_LEFT and richtung != 1:
richtung = 3
if ende:
break
head_x, head_y = schlange[0]
if richtung == 0:
new_head = [head_x, head_y - 1]
elif richtung == 1:
new_head = [head_x + 1, head_y]
elif richtung == 2:
new_head = [head_x, head_y + 1]
elif richtung == 3:
new_head = [head_x - 1, head_y]
schlange = [new_head] + schlange[:-1]
zeichner(screen, schlange)
pygame.display.update()
clock.tick(10)
print(f"Du hast {score} Punkte erreicht")
if __name__ == '__main__':
main()