## Kapitel 17 – pygame-ce – Spiele bauen mit Objekten

# Seite 218 – Was macht unser erstes Programm?
import pygame

pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Fischers Fritze")
font = pygame.font.SysFont(None, 50)
objekt = font.render("<°)))><<", True, 'red')

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    screen.fill((200, 220, 255))
    screen.blit(objekt, (250, 150))
    pygame.display.flip()

pygame.quit()

# Seite 223 – Wie die Fische das Laufen lernen
# Unsere neuen Variablen
x = 250
y = 150
speed = 5

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        # Wir prüfen, ob eine Taste gedrückt wurde
        if event.type == pygame.KEYDOWN:
            # Und prüfen dann, welche Taste gedrückt wurde
            if event.key == pygame.K_UP:
                y -= speed
            if event.key == pygame.K_DOWN:
                y += speed
            if event.key == pygame.K_LEFT:
                x -= speed
            if event.key == pygame.K_RIGHT:
                x += speed

    screen.fill((200, 220, 255))
    # Hier übergeben wir den aktuellen Wert von x und y
    screen.blit(objekt, (x, y))
    pygame.display.flip()

# Seite 224 – Der Chamäleonfisch
import pygame
import random

pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Fischers Fritze")

font = pygame.font.SysFont(None, 50)
farbe = (200, 0, 0)
objekt = font.render("<°)))><<", True, farbe)

# Startposition des Fisches
x = 250
y = 150
speed = 5

# Seite 225 – Der Chamäleonfisch
running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

        # Wurde eine Taste gedrückt?
        if event.type == pygame.KEYDOWN:

            # Zufällige Farbe wählen bei Taste c
            if event.key == pygame.K_c:
                farbe = (random.randint(0, 255),random.randint(0, 255),random.randint(0, 255))
            # Bewegung mit den Cursortasten
            if event.key == pygame.K_UP:
                y -= speed
            if event.key == pygame.K_DOWN:
                y += speed
            if event.key == pygame.K_LEFT:
                x -= speed
            if event.key == pygame.K_RIGHT:
                x += speed

    # Fisch mit aktueller Farbe neu rendern
    objekt = font.render("<°)))><<", True, farbe)

    screen.fill((200, 220, 255))
    screen.blit(objekt, (x, y))
    pygame.display.flip()
pygame.quit()

# Seite 228 – Der Fisch soll leben – Spielfigur mit Eigenleben
import pygame
import random

pygame.init()
screen = pygame.display.set_mode((600, 400))
pygame.display.set_caption("Automatischer Fisch")

font = pygame.font.SysFont(None, 60)
fisch_text = "<°(((><"
fisch_farbe = (200, 0, 0)

x = 250
y = 150
gleiche_richtung = 0
x_richtung = 0
y_richtung = 0
clock = pygame.time.Clock()
running = True

while running:
		for event in pygame.event.get():
			if event.type == pygame.QUIT:
				running = False
				
		# Zufällige Bewegung
		gleiche_richtung = gleiche_richtung - 1
		if gleiche_richtung <= 0:
			gleiche_richtung = random.randint(20, 100)
			x_richtung = random.choice([-1, 0, 1])
			y_richtung = random.choice([-1, 0, 1])

    x += x_richtung
    y += y_richtung

    # Begrenzung: Fisch bleib im Fenster
    if x < 0:
        x = 0
    if y < 0:
        y = 0
    if x > 600:
        x = 600
    if y > 400:
        y = 400

    # Fisch rendern
    fisch = font.render(fisch_text, True, fisch_farbe)

    # Zeichnen
    screen.fill((200, 220, 255))
    screen.blit(fisch, (x, y))
    pygame.display.flip()

    clock.tick(60)

pygame.quit()

# Seite 233 – Fisch reloaded – diesmal objektorientiert
import pygame
import random

pygame.init()
screen = pygame.display.set_mode((600, 400))
pygame.display.set_caption("OOP Fisch")
font = pygame.font.SysFont(None, 60)
clock = pygame.time.Clock()

class Fisch:
    def __init__(self, x, y, text, farbe):
        self.x = x
        self.y = y
        self.text = text
        self.farbe = farbe

        self.gleiche_richtung = 0
        self.x_richtung = 0
        self.y_richtung = 0

    def neue_richtung(self):
        """Wählt eine neue zufällige Richtung."""
        self.gleiche_richtung = random.randint(20, 100)
        self.x_richtung = random.choice([-1, 0, 1])
        self.y_richtung = random.choice([-1, 0, 1])

    def bewegen(self):
        """Bewegt den Fisch automatisch."""
        self.gleiche_richtung -= 1
        if self.gleiche_richtung <= 0:
            self.neue_richtung()

        self.x += self.x_richtung
        self.y += self.y_richtung

        # Begrenzung
        self.x = max(0, min(self.x, 600))
        self.y = max(0, min(self.y, 400))

    def zeichnen(self, zeichen_flaeche):
        """Zeichnet den Fisch."""
        bild_element = font.render(self.text, True, self.farbe)
        zeichen_flaeche.blit(bild_element, (self.x, self.y))

# --- Hauptprogramm ---
fisch = Fisch(250, 150, "<°(((><", (200, 0, 0))
running = True
while running:
	for event in pygame.event.get():
		if event.type == pygame.QUIT:
			running = False
			
	fisch.bewegen()
	screen.fill((200, 220, 255))
	fisch.zeichnen(screen)
	
	pygame.display.flip()
	clock.tick(60)
pygame.quit()

# Seite 234 – Ein Freund für unseren Fisch – ein objektorientierter Oktopus
# --- Hauptprogramm ---
fisch = Fisch(250, 150, "<°(((><", (200, 0, 0))
oktopus = Fisch(250, 150, "<°///8", (0, 90, 90))

running = True
while running:

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    fisch.bewegen()
    oktopus.bewegen()

    screen.fill((200, 220, 255))

    fisch.zeichnen(screen)
    oktopus.zeichnen(screen)

    pygame.display.flip()
    clock.tick(60)

pygame.quit()

