Code: Alles auswählen
import pygame
import sys
import random
# Pygame initialisieren
pygame.init()
# Fenstergröße festlegen
WINDOW_SIZE = (400, 200)
# Fenster erstellen
screen = pygame.display.set_mode(WINDOW_SIZE)
pygame.display.set_caption('Farbauswahl')
# Farben definieren
RED = (255, 0, 0)
GREEN = (0, 255, 0)
YELLOW = (255, 255, 0)
BLUE = (0, 0, 255)
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
# Schriftart festlegen
font = pygame.font.Font(None, 36)
# Spielfarben
spielfarben = [
(RED, "Rot", False),
(GREEN, "Grün", False),
(YELLOW, "Gelb", False),
(BLUE, "Blau", False)
]
# Farbauswahl-Funktion für Spieler
def farbauswahl(spieler_nummer):
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
elif event.type == pygame.MOUSEBUTTONDOWN:
mouse_pos = pygame.mouse.get_pos()
for i, (farbe, name, gewaehlt) in enumerate(spielfarben):
if 50 + i * 80 <= mouse_pos[0] <= 50 + (i + 1) * 80 and 80 <= mouse_pos[1] <= 160:
if not gewaehlt:
spielfarben[i] = (farbe, name, True)
return farbe
# Hintergrund füllen
screen.fill(WHITE)
# Farbauswahl anzeigen
for i, (farbe, name, gewaehlt) in enumerate(spielfarben):
if gewaehlt:
pygame.draw.rect(screen, (200, 200, 200), pygame.Rect(50 + i * 80, 80, 60, 60))
text = font.render(str(spieler_nummer), True, BLACK)
text_rect = text.get_rect(center=(50 + i * 80 + 30, 160))
screen.blit(text, text_rect)
else:
pygame.draw.rect(screen, farbe, pygame.Rect(50 + i * 80, 80, 60, 60))
text = font.render(name, True, BLACK)
text_rect = text.get_rect(center=(50 + i * 80 + 30, 160))
screen.blit(text, text_rect)
# Anzeige aktualisieren
pygame.display.flip()
# Spielerfarben wählen
spieler_farben = []
for spieler_nummer in range(1, 5):
farbe = farbauswahl(spieler_nummer)
spieler_farben.append(farbe)
spielfarben = [(color, name, gewaehlt) for color, name, gewaehlt in spielfarben if color != farbe]
# Fenstergröße festlegen
WINDOW_SIZE = (600, 600)
# Fenster erstellen
screen = pygame.display.set_mode(WINDOW_SIZE)
pygame.display.set_caption('Mensch Ärger Dich Nicht')
# Breite und Höhe eines einzelnen Quadrats
SQUARE_SIZE = WINDOW_SIZE[0] // 13
# Schriftart festlegen
font = pygame.font.Font(None, 36)
# Würfelfunktion
def wuerfeln():
return random.randint(1, 6)
# Position des Würfelquadrats
dice_square_x = 6
dice_square_y = 6
# Spielfigur-Klasse
class Spielfigur:
def __init__(self, color, start_x, start_y):
self.color = color
self.x = start_x
self.y = start_y
def draw(self):
pygame.draw.circle(screen, self.color, ((self.x + 0.5) * SQUARE_SIZE, (self.y + 0.5) * SQUARE_SIZE),
SQUARE_SIZE // 4)
pygame.draw.circle(screen, BLACK, ((self.x + 0.5) * SQUARE_SIZE, (self.y + 0.5) * SQUARE_SIZE),
SQUARE_SIZE // 4, 2)
# Erstellen der Spielfiguren
spielfiguren = []
for i, farbe in enumerate(spieler_farben):
if farbe == RED:
spielfiguren.extend([
Spielfigur(RED, 1, 1),
Spielfigur(RED, 1, 2),
Spielfigur(RED, 2, 1),
Spielfigur(RED, 2, 2)
])
elif farbe == GREEN:
spielfiguren.extend([
Spielfigur(GREEN, 10, 10),
Spielfigur(GREEN, 10, 11),
Spielfigur(GREEN, 11, 10),
Spielfigur(GREEN, 11, 11)
])
elif farbe == YELLOW:
spielfiguren.extend([
Spielfigur(YELLOW, 1, 10),
Spielfigur(YELLOW, 1, 11),
Spielfigur(YELLOW, 2, 10),
Spielfigur(YELLOW, 2, 11)
])
elif farbe == BLUE:
spielfiguren.extend([
Spielfigur(BLUE, 10, 1),
Spielfigur(BLUE, 10, 2),
Spielfigur(BLUE, 11, 1),
Spielfigur(BLUE, 11, 2)
])
# Spielhauptschleife
aktueller_spieler = -1
wurf_count = 0
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
elif event.type == pygame.MOUSEBUTTONDOWN:
mouse_pos = pygame.mouse.get_pos()
click_x = mouse_pos[0] // SQUARE_SIZE
click_y = mouse_pos[1] // SQUARE_SIZE
if click_x == dice_square_x and click_y == dice_square_y:
dice_value = wuerfeln()
if dice_value == 6:
# Setze Spielfigur des Spielers in das Startfeld
if spieler_farben[aktueller_spieler] == RED:
spielfiguren[aktueller_spieler * 4].x = 1
spielfiguren[aktueller_spieler * 4].y = 5
elif spieler_farben[aktueller_spieler] == GREEN:
spielfiguren[aktueller_spieler * 4].x = 11
spielfiguren[aktueller_spieler * 4].y = 7
elif spieler_farben[aktueller_spieler] == YELLOW:
spielfiguren[aktueller_spieler * 4].x = 5
spielfiguren[aktueller_spieler * 4].y = 11
elif spieler_farben[aktueller_spieler] == BLUE:
spielfiguren[aktueller_spieler * 4].x = 7
spielfiguren[aktueller_spieler * 4].y = 1
else:
if spielfiguren[aktueller_spieler * 4].x != -1 or dice_value == 6:
# Vorwärtsbewegung um die gewürfelte Zahl
if spielfiguren[aktueller_spieler * 4].x != -1:
new_x = spielfiguren[aktueller_spieler * 4].x + dice_value
new_y = spielfiguren[aktueller_spieler * 4].y
if new_x > 12:
steps_to_goal = new_x - 12
if new_y == 6 and steps_to_goal <= 4:
new_x = 6 + steps_to_goal
new_y = aktueller_spieler * 3 + 7
else:
new_x = spielfiguren[aktueller_spieler * 4].x
new_y = spielfiguren[aktueller_spieler * 4].y
else:
if new_x == 6 and new_y >= aktueller_spieler * 3 + 7 and new_y <= aktueller_spieler * 3 + 10:
new_x = spielfiguren[aktueller_spieler * 4].x
new_y = spielfiguren[aktueller_spieler * 4].y
spielfiguren[aktueller_spieler * 4].x = new_x
spielfiguren[aktueller_spieler * 4].y = new_y
if wurf_count >= 3 or (spielfiguren[aktueller_spieler * 4].x == -1 and dice_value != 6):
aktueller_spieler += 1
if aktueller_spieler >= len(spieler_farben):
aktueller_spieler = 0
wurf_count = 0
# Hintergrund füllen
screen.fill(WHITE)
# Gitter zeichnen
for x in range(13):
for y in range(13):
color = (255, 255, 255)
# Team-Bereiche farbig machen
if 1 <= x < 3 and 1 <= y < 3:
color = RED
elif 10 <= x < 12 and 1 <= y < 3:
color = BLUE
elif 1 <= x < 3 and 10 <= y < 12:
color = YELLOW
elif 10 <= x < 12 and 10 <= y < 12:
color = GREEN
# Zielfelder farbig machen
if 2 <= x < 6 and y == 6:
color = RED
elif x == 6 and 7 <= y < 11:
color = YELLOW
elif x == 6 and 2 <= y < 6:
color = BLUE
if 7 <= x < 11 and y == 6:
color = GREEN
# Startfelder
if 1 <= x < 2 and y == 5:
color = RED
elif x == 5 and 11 <= y < 12:
color = YELLOW
elif x == 7 and 1 <= y < 2:
color = BLUE
if 11 <= x < 12 and y == 7:
color = GREEN
pygame.draw.rect(screen, color, pygame.Rect(x * SQUARE_SIZE, y * SQUARE_SIZE, SQUARE_SIZE, SQUARE_SIZE))
pygame.draw.rect(screen, BLACK, pygame.Rect(x * SQUARE_SIZE, y * SQUARE_SIZE, SQUARE_SIZE, SQUARE_SIZE), 1)
# Feld, in dem das Würfelergebnis angezeigt wird
pygame.draw.rect(screen, (200, 200, 200),
pygame.Rect(dice_square_x * SQUARE_SIZE, dice_square_y * SQUARE_SIZE, SQUARE_SIZE, SQUARE_SIZE))
# Würfelrand in Spielerfarbe zeichnen
pygame.draw.rect(screen, spieler_farben[aktueller_spieler],
pygame.Rect(dice_square_x * SQUARE_SIZE, dice_square_y * SQUARE_SIZE, SQUARE_SIZE, SQUARE_SIZE), 4)
# Würfelergebnis anzeigen, wenn vorhanden
if 'dice_value' in locals():
text = font.render(str(dice_value), True, BLACK)
text_rect = text.get_rect(center=((dice_square_x + 0.5) * SQUARE_SIZE, (dice_square_y + 0.5) * SQUARE_SIZE))
screen.blit(text, text_rect)
# Spielfiguren zeichnen
for spielfigur in spielfiguren:
spielfigur.draw()
# Anzeige aktualisieren
pygame.display.flip()