Læsere som dig hjælper med at støtte MUO. Når du foretager et køb ved hjælp af links på vores websted, kan vi optjene en affiliate-kommission. Læs mere.

PyGame er et populært bibliotek til at skabe projekter med Python, og det giver et kraftfuldt sæt værktøjer til spiludvikling. I denne artikel lærer du, hvordan du opretter en startmenu og game over-skærm til et simpelt spil ved hjælp af PyGame.

Oprettelse af et simpelt spil

Før du opretter startmenuen og spillet over skærmen, lad os først lave et simpelt spil. I dette spil vil du styre en karakter med piletasterne og forsøge at undgå forhindringer. For at gøre tingene enkle, prøv ikke at bruge nogen billeder.

For at komme i gang skal du importere de nødvendige moduler. Du vil bruge pygame modul for at få adgang til PyGames funktioner. For at installere modulet kan du brug pip-pakkehåndteringen:

pip installere pygame

Nu hvor vores modul er klar til brug, lad os skabe et simpelt spil med en spiller, der kan bevæge sig til venstre eller højre ved hjælp af piletasterne og en forhindring. Hvis du kolliderer med forhindringen, slutter spillet. Her er koden til det samme:

instagram viewer

importere pygame
pygame.i det()

screen_width = 750
skærmhøjde = 450
skærm = pygame.display.set_mode((skærmbredde, skærmhøjde))

obstacle_x = 400
hindring_y = 400
forhindringsbredde = 40
forhindringshøjde = 40
player_x = 200
player_y = 400
player_width = 20
spillerhøjde = 20

mensRigtigt:

tilbegivenhedipygame.begivenhed.få():

if event.type == pygame. AFSLUT:
pygame.Afslut()
Afslut()


keys = pygame.key.get_pressed()
hvisnøgler[pygame. K_LEFT]:
player_x -= 5
hvisnøgler[pygame. K_RIGHT]:
player_x += 5


hvis player_x + player_width > obstacle_x og player_x < forhindring_x + forhindringsbreddeogspiller_y + spillerhøjde > forhindring_y og spiller_y < forhindring_y + forhindringshøjde:
game_over = Rigtigt


skærmen.fylde((0, 0, 0))
pygame.tegne.rect(skærmen, (255, 0, 0), (forhindring_x, forhindring_y, forhindringsbredde, forhindringshøjde))
pygame.tegne.rect(skærmen, (0, 255, 0), (spiller_x, spiller_y, player_width, spillerhøjde))
pygame.Skærm.opdatering()

I ovenstående kode opsatte du spilvinduet og erklærede spilvariablerne. Du håndterede også brugerinput og tegnede elementerne til skærmen.

Oprettelse af startmenuen

Nu hvor du har et grundlæggende spil, lad os oprette en startmenu. For at gøre dette skal du erklære en global variabel for spiltilstanden. Denne variabel vil holde styr på den aktuelle tilstand af spillet, såsom om startmenuen er aktiv, eller om spillet kører. Du skal tilføje denne variabel i begyndelsen af ​​din spilkode:

game_state = "start_menu"

Dernæst vil du tilføje en funktion til at tegne startmenuen til skærmen. Du kan bruge PyGame-funktioner til at tegne teksten, knapperne og andre elementer på skærmen.

defdraw_start_menu():
skærmen.fylde((0, 0, 0))
font = pygame.font. SysFont('Arial', 40)
title = font.render('Mit spil', Rigtigt, (255, 255, 255))
start_button = font.render('Start', Rigtigt, (255, 255, 255))
screen.blit (title, (screen_width/2 - title.get_width()/2, screen_height/2 - title.get_height()/2))
screen.blit (start_button, (screen_width/2 - start_button.get_width()/2, screen_height/2 + start_button.get_height()/2))
pygame.Skærm.opdatering()

Du kan derefter tilføje draw_start_menu() funktion til hovedspillets loop.

mensRigtigt: 

tilbegivenhedipygame.begivenhed.få():
if event.type == pygame. AFSLUT:
pygame.Afslut()
Afslut()

hvis game_state == "start_menu":
draw_start_menu()

hvis game_state == "spil":
keys = pygame.key.get_pressed()
# resten af ​​koden

Nu vil startmenuen blive trukket til skærmen. Det sidste trin er at håndtere brugerinput. Du kan tilføje en hvis-erklæring til hovedspillets loop for at kontrollere, om brugeren har trykket på startknappen.

hvis game_state == "start_menu":
keys = pygame.key.get_pressed()
hvisnøgler[pygame. K_SPACE]:
player_x = 200
player_y = 400
game_state = "spil"
game_over = Falsk

Med denne kode starter spillet, når brugeren trykker på startknappen.

Implementering af Game Over Screen

Nu hvor du har startmenuen, lad os oprette spillet over skærmen. Denne funktion skal vise det endelige resultat og en game-over-meddelelse.

defdraw_game_over_screen():
skærmen.fylde((0, 0, 0))
font = pygame.font. SysFont('Arial', 40)
title = font.render('Game over', Rigtigt, (255, 255, 255))
genstart_knap = font.render('R - Genstart', Rigtigt, (255, 255, 255))
quit_button = font.render('Q - Afslut', Rigtigt, (255, 255, 255))
screen.blit (title, (screen_width/2 - title.get_width()/2, screen_height/2 - title.get_height()/3))
screen.blit (restart_button, (screen_width/2 - restart_button.get_width()/2, screen_height/1.9 + restart_button.get_height()))
screen.blit (quit_button, (screen_width/2 - quit_button.get_width()/2, screen_height/2 + quit_button.get_height()/2))
pygame.Skærm.opdatering()

Du kan derefter tilføje denne funktion til hovedspillets loop.

hvis game_state == "start_menu":
draw_start_menu()
hvis game_state == "game_over":
draw_game_over_screen()

hvis game_state == "spil":
keys = pygame.key.get_pressed()
hvisnøgler[pygame. K_LEFT]:
player_x -= 5
hvisnøgler[pygame. K_RIGHT]:
player_x += 5

hvis player_x + player_width > obstacle_x og player_x < forhindring_x + forhindringsbreddeogspiller_y + spillerhøjde > forhindring_y og spiller_y < forhindring_y + forhindringshøjde:
game_over = Rigtigt
game_state = "game_over"

Endelig skal du håndtere brugerinput for at håndtere brugerens valg. Du kan tilføje en if-sætning til hovedspillets loop for at kontrollere, om brugeren har trykket på genstart- eller quit-knappen.

hvis game_state == "start_menu":
keys = pygame.key.get_pressed()
hvisnøgler[pygame. K_SPACE]:
game_state = "spil"
player_x = 200
player_y = 400
game_state = "spil"
game_over = Falsk

hvis game_state == "game_over":
keys = pygame.key.get_pressed()
hvisnøgler[pygame. K_r]:
game_state = "start_menu"
hvisnøgler[pygame. K_q]:
pygame.Afslut()
Afslut()

Med denne kode vil spillet genstarte, når brugeren trykker på 'R'-knappen og afsluttes, når brugeren trykker på 'Q'-knappen på tastaturet.

Nedenfor er den fulde kode:

importere pygame

pygame.i det()
screen_width = 750
skærmhøjde = 450
skærm = pygame.display.set_mode((skærmbredde, skærmhøjde))
obstacle_x = 400
hindring_y = 400
forhindringsbredde = 40
forhindringshøjde = 40
player_x = 200
player_y = 400
player_width = 20
spillerhøjde = 20
game_state = "start_menu"

defdraw_start_menu():
skærmen.fylde((0, 0, 0))
font = pygame.font. SysFont('Arial', 40)
title = font.render('Mit spil', Rigtigt, (255, 255, 255))
start_button = font.render('Start', Rigtigt, (255, 255, 255))
screen.blit (title, (screen_width/2 - title.get_width()/2, screen_height/2 - title.get_height()/2))
screen.blit (start_button, (screen_width/2 - start_button.get_width()/2, screen_height/2 + start_button.get_height()/2))
pygame.Skærm.opdatering()

defdraw_game_over_screen():
skærmen.fylde((0, 0, 0))
font = pygame.font. SysFont('Arial', 40)
title = font.render('Game over', Rigtigt, (255, 255, 255))
genstart_knap = font.render('R - Genstart', Rigtigt, (255, 255, 255))
quit_button = font.render('Q - Afslut', Rigtigt, (255, 255, 255))
screen.blit (title, (screen_width/2 - title.get_width()/2, screen_height/2 - title.get_height()/3))
screen.blit (restart_button, (screen_width/2 - restart_button.get_width()/2, screen_height/1.9 + restart_button.get_height()))
screen.blit (quit_button, (screen_width/2 - quit_button.get_width()/2, screen_height/2 + quit_button.get_height()/2))
pygame.Skærm.opdatering()

mensRigtigt:
tilbegivenhedipygame.begivenhed.få():
if event.type == pygame. AFSLUT:
pygame.Afslut()
Afslut()
hvis game_state == "start_menu":
draw_start_menu()
keys = pygame.key.get_pressed()
hvisnøgler[pygame. K_SPACE]:
player_x = 200
player_y = 400
game_state = "spil"
game_over = Falsk
elif game_state == "game_over":
draw_game_over_screen()
keys = pygame.key.get_pressed()
hvisnøgler[pygame. K_r]:
game_state = "start_menu"
hvisnøgler[pygame. K_q]:
pygame.Afslut()
Afslut()

elif game_state == "spil":
keys = pygame.key.get_pressed()
hvisnøgler[pygame. K_LEFT]:
player_x -= 5
hvisnøgler[pygame. K_RIGHT]:
player_x += 5

hvis player_x + player_width > obstacle_x og player_x < forhindring_x + forhindringsbreddeogspiller_y + spillerhøjde > forhindring_y og spiller_y < forhindring_y + forhindringshøjde:
game_over = Rigtigt
game_state = "game_over"

skærmen.fylde((0, 0, 0))
pygame.tegne.rect(skærmen, (255, 0, 0), (forhindring_x, forhindring_y, forhindringsbredde, forhindringshøjde))
pygame.tegne.rect(skærmen, (0, 255, 0), (spiller_x, spiller_y, player_width, spillerhøjde))
pygame.Skærm.opdatering()

elif game_over:
game_state = "game_over"
game_over = Falsk

Koden starter med at importere pygame modul og initialisering af det. Det opretter derefter et spilvindue og erklærer de nødvendige spilvariabler, inklusive spillerens og forhindringens position, dimension og spillets tilstand.

Koden definerer to funktioner, draw_start_menu() og draw_game_over_screen(), for at tegne startmenuen og spillet over skærmen. Disse funktioner bruger PyGame-funktionerne til at tegne tekst og knapper til skærmen.

Hovedspillets loop starter med at håndtere begivenheder og kontrollere spillets tilstand. Hvis spiltilstanden er start_menu, er startmenuen trukket til skærmen. Hvis spiltilstanden er game_over, bliver game-over-skærmen trukket til skærmen. Hvis spillets tilstand er noget andet, opdateres spillet og trækker spilleren og forhindringen til skærmen.

Spillet opdateres ved at håndtere tastetryk og tjekke for en kollision mellem spilleren og forhindringen. Hvis der er en kollision, sætter spillet game_over flag til Rigtigt og indstiller spiltilstanden til game_over.

Efter at spillet er opdateret, trækkes spilleren og forhindringen til skærmen. Til sidst kontrollerer koden, om game_over flaget er sat, og hvis det er, nulstiller det flaget og indstiller spillets tilstand til game_over.

Denne proces gentages kontinuerligt, indtil spilvinduet lukkes.

Øg brugerengagementet med visuelt tiltalende brugergrænseflade

Brug af en veldesignet brugergrænseflade (UI) kan i høj grad øge brugerengagementet i et PyGame-spil. En klar og letlæselig skrifttype, visuelt tiltalende grafik, nem navigation og brugerfeedback er alle vigtige elementer at overveje, når du designer brugergrænsefladen. Ved at implementere disse elementer kan du oprette en brugergrænseflade, der hjælper med at holde spilleren interesseret og fordybet i spillet.

Husk at teste din brugergrænseflade og indsamle feedback fra spillere for at sikre, at den er effektiv til at øge engagementet. Samlet set kan det at tage sig tid til at skabe en stærk brugergrænseflade i høj grad forbedre spillerens oplevelse og nydelse af dit spil.