from operator import truediv import pygame import time import random def gameover_testen(aaaabbruch:bool,fresserchen:int): if aaaabbruch: pygame.display.set_caption('Snake Game Game Over ' + fresserchen.__str__()) time.sleep(1) return False else: return True def schlange_zeichnen(s:list): for segmeent in s: (x,y) = segmeent pygame.draw.rect(screen, GREEN, (x*box_size, y*box_size, box_size, box_size)) return s def schlange_wachsen(s:list,dx:int,dy:int): neues_segement = [s[0][0]+dx,s[0][1]+dy] s.insert(0,neues_segement) print (s) return s def weg_versperrt(s:list): for i in range(1, len(s)): if s[i] == s[0]: return True return False def schlange_bewegen(s:list,dx:int,dy:int): neues_segement = [s[0][0] + dx, s[0][1] + dy] s.insert(0, neues_segement) s.pop() return (s) def pixel(position): return 10 + position * box_size def rand_test(x:int,y:int): if x < 0: return True if y < 0: return True if x > feld_max: return True if y > feld_max: return True return False def futter_Yommy(futterx:int,futtery:int,positionx:int,positiony:int): if (futterx == positionx and futtery == positiony): return True def move(move_wertikal:int,move_horizontal:int): laenge = 0 for event in pygame.event.get(): if event.type == pygame.QUIT: running = False if event.type == pygame.KEYDOWN and event.key == pygame.K_LEFT: if move_wertikal != box_size: move_wertikal = -box_size move_horizontal = 0 laenge = move_wertikal + box_size if event.type == pygame.KEYDOWN and event.key == pygame.K_RIGHT: if move_wertikal != -box_size: move_wertikal = box_size move_horizontal = 0 laenge = move_wertikal - box_size if event.type == pygame.KEYDOWN and event.key == pygame.K_UP: if move_horizontal != box_size: move_horizontal = -box_size move_wertikal = 0 laenge = move_horizontal + box_size if event.type == pygame.KEYDOWN and event.key == pygame.K_DOWN: if move_horizontal != -box_size: move_horizontal = box_size move_wertikal = 0 laenge = move_horizontal - box_size return (move_wertikal,move_horizontal,laenge) pygame.init() Food = 0 feld_max=39 X = 0 Schlüssel_für_länge = 0 box_size = 20 screen = pygame.display.set_mode((feld_max*box_size, feld_max*box_size)) pygame.display.set_caption('Snake Game') WHITE = (255, 255, 255) RED = (100, 0, 0) BLACK = (0, 0, 0) GREEN = (0, 100, 0) _GREEN = (0, 205, 0) pygame.draw.rect(screen, RED, (10, 20, 680, 660)) pygame.display.flip() font = pygame.font.SysFont("Arial", 32) # Schriftart und Größe #--- Willkommens Meldung ---------------- screen.fill(BLACK) # 2. Text rendern (Text, Antialias, Farbe) text_titel_0 = font.render("Pygame_Snake", True,WHITE) text_titel_1 = font.render("Click Enter to start ", True,WHITE) # 3. Text auf dem Screen "blitzen" (Position x=10, y=10) screen.blit(text_titel_0, (250,30)) screen.blit(text_titel_1, (235,500)) # 4. Bildschirm zeichnen pygame.display.flip() # 5. Auf Enter-Taste warten warten_auf_enter = True while warten_auf_enter: for ereignis in pygame.event.get(): if ereignis.type == pygame.KEYDOWN and ereignis.key == pygame.K_RETURN: print("Enter gedrueckt!") warten_auf_enter = False #--- Spielwiederholung ---------------------------- nochmal_spielen = True while nochmal_spielen: #--- Spiel---------------------------------- schritt = 0 position_mitte = [(feld_max-1)/2, (feld_max-1)/2] position = position_mitte s = [[20,20]] richtung = [0, 0] running = True game_over = False X = 0 verzoegerung = 0.2 while running: snake = [] snake_laenge = 1 schritt = schritt + 1 time.sleep(verzoegerung-(X*0.002)) screen.fill(BLACK) # 2. Text rendern (Text, Antialias, Farbe) text_surface = font.render("Count "+X.__str__(), True,WHITE) # 3. Text auf dem Screen "blitzen" (Position x=10, y=10) screen.blit(text_surface, (10, 10)) s = schlange_zeichnen(s) s = schlange_bewegen(s, richtung[0]/box_size, richtung[1]/box_size) if (Food == 2 or Food == 0): zufallszahl1x = random.randint(1, 37) zufallszahl1y = random.randint(1, 37) #futter futter Yumy if futter_Yommy(zufallszahl1x, zufallszahl1y,s[0][0],s[0][1]): Food = 2 s = schlange_wachsen (s,richtung[0]/box_size,richtung[1]/box_size) if (Food == 0): Food = 1 if (Food == 2): X = X + 1 if (Food == 2): Food = 0 if (Food != 0): pygame.draw.rect(screen, RED, (zufallszahl1x * box_size,zufallszahl1y * box_size, box_size, box_size)) game_over = weg_versperrt(s) if game_over == False : game_over = rand_test(s[0][0], s[0][1]) # Bildschirm neu zeichnen! pygame.display.flip() (richtung[0], richtung[1], Schlüssel_für_länge) = move(richtung[0], richtung[1]) running = gameover_testen(game_over,X) #--- Abschiedsmeldung ---------------- screen.fill(BLACK) ereignisse_entfernen = pygame.event.get() # 1. Text rendern (Text, Antialias, Farbe) text_titel_0 = font.render("Pygame_Snake", True,WHITE) text_titel_1 = font.render("Play again? (Y/N)", True,WHITE) text_gefressen = font.render("Count " + X.__str__(), True, WHITE) # 2. Text auf dem Screen "blitzen" (Position x=10, y=10) screen.blit(text_titel_0, (250,30)) screen.blit(text_titel_1, (235,500)) screen.blit(text_gefressen, (10, 10)) # 3. Bildschirm zeichnen pygame.display.flip() # 4. Auf Taste warten warten_auf_taste = True while warten_auf_taste: for ereignis in pygame.event.get(): if ereignis.type == pygame.KEYDOWN: print("taste gedrueckt!") warten_auf_taste = False if ereignis.key == pygame.K_y: print("taste ist y also nochmal") nochmal_spielen = True else: print("taste ist nicht y") nochmal_spielen = False