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