Files
python-snake/snake.py

222 lines
6.6 KiB
Python

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