Manueller Upload erster Stand
This commit is contained in:
221
snake.py
Normal file
221
snake.py
Normal file
@@ -0,0 +1,221 @@
|
||||
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
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user