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 92%
Hab auch keine Ahnung 8%
gucke ob ich dir helfen kann 0%
Computer, Computerspiele, programmieren, snake, Informatik, Python, Pygame
Java: Wie kann man das Programm nochmals durchlaufen lassen?

Man soll bei cash das Geld eingeben und wenn man genug Geld hat, soll alles nochmal durchlaufen werden (bei while ( isRunning )). Wie kann man das am besten lösen, ohne das eine Fehlermeldung kommt? Sorry für den langen Code :D

PS: Die Mitte des Codes ist relativ unwichtig.

//S. 244-245

public class Snake {

public static void main(String[] args) {
    
    boolean isRunning = true;
    boolean ok = true;
    while ( isRunning ) {
        if ( ok )
    System.out.println("Cash einwerfen:");
        ok = false;
    int cash = new java.util.Scanner( System.in ).nextInt();

    java.awt.Point playerPosition = new java.awt.Point( 10, 9 );
    java.awt.Point snakePosition  = new java.awt.Point( 39, 0 );
    java.awt.Point goldPosition   = new java.awt.Point( 6, 6 );
    java.awt.Point doorPosition   = new java.awt.Point( 0, 5 );
    java.awt.Point gold2Position   = new java.awt.Point( 20, 8 );
    boolean rich = false;
    boolean rich2 = false;
    
    while ( true ) {
        
        for ( int y = 0; y < 10; y++ ) {
            for ( int x = 0; x < 40; x++) {
                java.awt.Point p = new java.awt.Point( x, y );
                if ( playerPosition.equals ( p ) )
                    System.out.print('&');
                else if ( snakePosition.equals( p ) )
                    System.out.print('S');
                else if ( goldPosition.equals( p ) )
                    System.out.print('$');  
                else if ( gold2Position.equals( p ) )
                    System.out.print('$');                      //Wichtig: print statt println
                else if ( doorPosition.equals( p ) )
                    System.out.print('#');
                else System.out.print('.');
              }
            System.out.println();
            }
        
        //Textausgaben
        if ( rich && rich2 && playerPosition.equals( doorPosition ) ) {
            System.out.println("Gewonnen!");
            break;
        }
        if ( playerPosition.equals( snakePosition ) ) {
            System.out.println("Game Over!");
            break;
        }
        if ( playerPosition.equals ( goldPosition ) ) {
            rich = true;
            goldPosition.setLocation( -1, -1 );
        }
        if ( playerPosition.equals ( gold2Position ) ) {
            rich2 = true;
            gold2Position.setLocation( -1, -1 );
            
        
            goldPosition.setLocation( -1, -1 );
        }
        
        switch ( new java.util.Scanner ( System.in ).next() ) {
        case "w" : playerPosition.y = Math.max( 0, playerPosition.y - 1); break; 
        case "s" : playerPosition.y = Math.min( 9, playerPosition.y + 1); break;
        case "a" : playerPosition.x = Math.max( 0, playerPosition.x - 1); break;
        case "d" : playerPosition.x = Math.min( 39, playerPosition.x + 1); break;
        case "wa": playerPosition.y = Math.max( 0, playerPosition.y - 1);
                   playerPosition.y = Math.max( 0, playerPosition.x - 1 ); break;
        case "wd": playerPosition.y = Math.max( 0, playerPosition.y - 1);
                   playerPosition.x = Math.min( 39, playerPosition.x + 1); break;
        case "sa": playerPosition.y = Math.min( 9, playerPosition.y + 1);
                   playerPosition.x = Math.max( 0, playerPosition.x - 1); break;
        case "sd": playerPosition.y = Math.min( 9, playerPosition.y + 1);
                   playerPosition.x = Math.min( 39, playerPosition.x + 1); break;
        }
        
PC, programmieren, Java, snake
C++ Snake programmieren, aber wie?

Hallo, ich schreibe gerade an einem Spiel(Snake) in c++. Ich weiß aber nicht wie ich die punkte einfüge die die schlange dann einsammeln kann, wie ich die Schlange länger mache und wie ich die kollision zwischen schlangenkopf und schlangenkörper integriere.

Hier mein bisheriger code:

include <conio.h> include <Windows.h> include

using namespace std;

const int rechts = 'd'; const int links = 'a'; const int hoch = 'w'; const int runter = 's'; const int prechts = 0x4d; //Hexadezimale codes der Pfeiltasten const int plinks = 0x4b; const int phoch = 0x48; const int prunter = 0x50;

void Bewegung(int, int);

int main() { bool ende = false; int x = 12; //x Koordniate (erst definition = Startpunkt) int < = 10; //y Koordniate (erst definition = Startpunkt) int richtung = 1; int punkt = 0;

cout << "Punkte " << punkte << endl; cout <<"XXXXXXXXXXXXXXXXXXXXXXXXX"<<endl; for(int i = 1; i < 24; i++) { cout << "X X"<<endl; } cout <<"XXXXXXXXXXXXXXXXXXXXXXXXX"<<endl;

do { Bewegung(x, y); cout << "o";

if(kbhit()) { int taste = getch(); if(!taste || taste == 0xe0)) taste = getch();

if(taste == hoch && richtung != 2 || taste == phoch && richtung != 2) { richtung = 1; --y; }

else if(taste == runter && richtung != 1 || taste == prunter && richtung != 1) { richtung = 2; ++y; }

else if(taste == rechts && richtung != 4 || taste == prechts && richtung != 4) { richtung = 3; ++x; }

else if(taste == links && richtung != 3 || taste == plinks && richtung != 3)

else { continue; }

Sleep(150); }

else if(!kbhit()) { if(richtung == 1) { --y; } if(richtung == 2) { ++y; } if(richtung == 3) { ++x; } if(richtung == 4) { --x; } Sleep(150); }

system("cls");

if( x <= 0 || x >= 24 || x <= 1 || y >= 25) { cout << "Game Over!" << endl << endl; cout << "Du hast " << punkte << " Punkte erreicht" << endl << endl; system("pause"); return 0; }

cout << "Punkte " << punkte << endl; cout <<"XXXXXXXXXXXXXXXXXXXXXXXXX"<<endl; for(int i = 1; i < 24; i++) { cout << "X X"<<endl; } cout <<"XXXXXXXXXXXXXXXXXXXXXXXXX"<<endl;

}while(true);

return 0; }

void Bewegung(int b, int h) { COORD punkt; punkt.X = b; punkt.Y = h; SetConsoleCursorPosition(GetStdHandle(STDOUTPUTHANDLE), punkt); }

Computer, IT, programmieren, Cplusplus, snake, Spieleprogrammierung

Meistgelesene Fragen zum Thema Snake