Python Snake HILFE!?
ich verzweifle an einem bestimmtem Problem seit knapp 3 Stunden und ich bin auf eure Hilfe angewiesen :C! Ich habe ein Snake spiel programmiert und mit Vektoren gearbeitet nun habe ich, wenn ich gestorben bin ein game over screen mit einem Button drauf erstellt. Clickt man auf diesen button kommt man zur Reset methode und diese soll das Game wieder starten lassen... Guess what? Tut sie nicht -.- und ich raff nicht wieso.... Da der code 350 Zeilen lang ist, werde ich mal die wichtigsten ausschnitte reinschicken :3(Ganz unten ist die Probhlem stelle)
self.body = [Vector2(7,8),Vector2(6,8),Vector2(5,8)]
self.direction = Vector2(1,0)
-
def move_snake(self):
if self.new_block == True:
self.body_copy = self.body[:]
self.body_copy.insert(0,self.body_copy[0] + self.direction)
self.body = self.body_copy[:]
self.new_block = False
else:
self.body_copy = self.body[:-1]
self.body_copy.insert(0,self.body_copy[0] + self.direction)
self.body = self.body_copy[:]
-
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_w and self.snake.direction != Vector2(0,1):
self.snake.direction = Vector2(0,-1)
...(Zeichen sparen)
-
def Colision_self(self):
for block in self.snake.body[1:]:
if block == self.snake.body[0]:
self.game_over()
def Hit_Wall(self):
if not 0 <= self.snake.body[0].x < cell_number_x:
self.game_over()
if not 0 <= self.snake.body[0].y < cell_number_y:
self.game_over()
def game_over(self):
font_go = pygame.font.SysFont("Calibri", 100, True, False)
You_reached = font_go.render("You reached: " + str(self.Counter), True, "White")
while go:
screen.fill((0, 0, 100))
screen.blit(You_reached,[30,100])
button1.Update()
button2.Update()
for event in pygame.event.get( ):
if event.type == pygame.QUIT:
pygame.quit( )
sys.exit( )
pygame.display.flip( )
FPS.tick(45)
-
def check_click(self): <- bereits in der Button class
mouse_pos = pygame.mouse.get_pos()
if self.top_rect.collidepoint(mouse_pos):
self.top_color = "Blue"
if pygame.mouse.get_pressed()[0]:
self.dynamic_elevaition = 0
self.pressed = True
self.Restart()
def Restart(self):
Snake.body = [Vector2(7, 8), Vector2(6, 8), Vector2(5, 8)]
(auch wenn ich jeden einzelen teil von Body mit vektoren zb. Vector2(10,0) subtrahiere passiert nichts...)
while go:
screen.fill((0, 90, 10))
snake.draw_grass( )
for event in pygame.event.get( ):
main_game.Quit( )
if event.type == SCRREEN_UPDATE:
if game_active:
main_game.update( )
else:
main_game.game_over( )
main_game.movement( )
main_game.counter( )
main_game.draw_elements( )
pygame.display.flip( )
FPS.tick(45)
12 Stimmen
3 Antworten
Bei deiner Programmstruktur scheint etwas nicht zu passen.
Du schreibst, check_click würde sich in der Button-Klasse befinden. Doch was hat die Restart-Methode in dieser Klasse zu suchen (und wieso schreibst du die plötzlich mit einem Großbuchstaben am Anfang)?
Des Weiteren sehe ich die Definition von zwei Game-Loops.
An sich sollte das Programm folgendermaßen (in groben Schritten) aufgebaut sein:
reset()
game_over = False
while game_is_running:
if game_over:
show_button()
game_over = True
clear_screen()
for event in pygame.event.get():
handle_events()
draw_elements()
In der reset-Funktion werden nur Positionen, Punkte, u.ä. gesetzt, wie sie bei Programmstart sein sollen.
Glaube kaum, dass sich jemand die Mühe macht den Code Zeile für Zeile durchzugehen und zu verstehen.
Feedback: Bei solchen Fragen ist es immer gut, wenn man den Usern einen minimalen Codeabschnitt zur Verfügung stellt der sich lokal bei den Usern kompilieren/interpretieren lässt und das Problem beinhaltet.
Oder direkt den ganzen Code per pastebin o.ä.
idk, kann da nix finden sry 😟
Nur ums nochmal klar zu sagen: das game startet kurz aber die schlange wird nicht ins spielfeld teleportiert wodurch ich praktisch direkt wieder verliere
Zeichenlimit