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)
Zu faul zum lesen 91%
Hab auch keine Ahnung 9%
gucke ob ich dir helfen kann 0%
Computer, Computerspiele, Programmieren, Coden, snake, Informatik, Python, Pygame
Pygame rechteck bewegt sich für einen frame in die falsche richtung, nachdem ich richtungswechsel ausgeführt hab...?

Ich habe das Problem das wenn ich beispielsweise nach oben gehe und dann nach rechts, sich die Schlange für einen frame nach links bewegt und dann erst wieder nach rechts... Ich weiß zwar warum aber ich weiß nicht wie ich das ganze fixen kann... Es gelten natürlich die normalen Snake regeln( perma bewegung und nur rechts links geradeaus...)Danke vorab :)

import pygame

import sys

pygame.init( )
screen = pygame.display.set_mode((1920, 1080))
pygame.display.set_caption("Snake")


class Snake( ):

    def __init__(self):
        self.go = True
        pygame.init( )

        self.width_body = 20
        self.hight_body = 20
        self.current_position_x = 950
        self.current_position_y = 540
        self.current_direction_y = 0
        self.current_direction_x = 0
        self.player_speed_y = 0
        self.player_speed_x = 0
        self.FPS = pygame.time.Clock( )

        self.while_loop( )

    def while_loop(self):

        while self.go:




            screen.fill((50, 50, 50))

            for self.event in pygame.event.get( ):
                if self.event.type == pygame.QUIT:
                    sys.exit( )

                if self.event.type == pygame.KEYDOWN:
                    if self.event.key == pygame.K_w and self.player_speed_y == 0:
                        if self.player_speed_x == 3:
                            self.player_speed_x -= 3
                        if self.player_speed_x == -3:
                            self.player_speed_x += 3
                        self.player_speed_y -= 3
                    if self.event.key == pygame.K_s and self.player_speed_y == 0:
                        if self.player_speed_x == 3:
                            self.player_speed_x -= 3
                        if self.player_speed_x == -3:
                            self.player_speed_x += 3
                        self.player_speed_y += 3
                    if self.event.key == pygame.K_a and self.player_speed_x == 0:
                        if self.player_speed_y == 3:
                            self.player_speed_y -= 3
                        if self.player_speed_y == -3:
                            self.player_speed_y += 3
                        self.player_speed_x -= 3
                    if self.event.key == pygame.K_d and self.player_speed_x == 0:
                        if self.player_speed_y == 3:
                            self.player_speed_y -= 3
                        if self.player_speed_y == -3:
                            self.player_speed_y += 3
                        self.player_speed_x += 3



            self.current_position_y += self.player_speed_y
            self.current_position_x += self.player_speed_x
            self.snake( )

            pygame.display.flip( )
            self.FPS.tick(60)

    def snake(self):
        pygame.draw.rect(screen, ('Red'),(self.current_position_x, self.current_position_y, self.width_body, self.hight_body))


Snake( )
Computerspiele, Programmieren, Python, Pygame

Meistgelesene Fragen zum Thema Computerspiele