Ich habe gerade erst mit Pygame angefangen und deshalb ein vermutlich viele banales Problem, aber es will einfach nicht klappen.
Ich will einfach nur ein skalierbares Fenster erstellen mit einem Hintergrundbild. Das klappt alles auch so weit. doch wenn ich das Fenster dann maximiere oder durch am Rand ziehen vergrößer, skaliert das Hintergrundbild nicht mit. Zudem bleibt das alte kleinere Fenster als Bild auf dem größeren Fenster beim Maximieren erhalten.
Ich hoffe ihr versteht was ich meine.Ich hab lange gegoogelt und hab es eigentlich nur so gefunden wie ich es habe. Ich habe keine Idee mehr was ich noch ausprobieren kann.
import pygame
def main():
pygame.init()
Hintergrundbild = "Holz.jpg"
size = (600,400)
screen = pygame.display.set_mode(size, pygame.RESIZABLE|pygame.DOUBLEBUF|pygame.HWSURFACE)
pygame.display.set_caption("Mensch Ärger dich nicht!") #Fenstername
pygame.mouse.set_visible(1) #Anzeigen der Maus
clock = pygame.time.Clock() #Objekt, dass hilft die Zeit zu messen (Frameraten kontrolle)
Hintergrund = pygame.image.load(Hintergrundbild).convert() #Konvert kreirt eine Kopie, die schnellergeladen wird
running = 1
while running: #Solange running true, läuft das Fenster
clock.tick(30) #Framerate wird auf maximal 30 pro sekunde begrenzt
screen.fill((0, 0, 0)) #RGB: = 0, 0, 0 : Schwarz
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False # Spiel wird beendet wenn ein QUIT-Event gefunden wird
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
pygame.event.post(pygame.event.Event(pygame.QUIT))
screen.blit(pygame.transform.scale(Hintergrund,size), (0,0))
pygame.display.flip()
if __name__ == "__main__":
main()
# 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 = (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]
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
# 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ü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()
ich moechte die unnoetigen felder ausblenen und das spielfeld kreuzfoermig darstellen wie das originale mensch aeger dihc nicht allerding weiss ich nicht wie.
hat jemand eine ahnung