PyGame is een populaire bibliotheek voor het maken van projecten met Python en biedt een krachtige set tools voor game-ontwikkeling. In dit artikel leer je hoe je een startmenu en een game-over-scherm kunt maken voor een eenvoudig spel met PyGame.
Een eenvoudig spel maken
Voordat je het startmenu en het game-over-scherm maakt, gaan we eerst een eenvoudig spel maken. In dit spel bestuur je een personage met de pijltjestoetsen en probeer je obstakels te ontwijken. Probeer om het simpel te houden geen afbeeldingen te gebruiken.
Om te beginnen, moet u de benodigde modules importeren. Je gaat gebruik maken van de pyspel module om toegang te krijgen tot de functies van PyGame. Om de module te installeren, kan dat gebruik de pip-pakketbeheerder:
Pip installeren pyspel
Nu onze module klaar is voor gebruik, gaan we een eenvoudig spel maken met een speler die naar links of rechts kan bewegen met behulp van de pijltjestoetsen en een obstakel. Als je tegen het obstakel botst, is het spel afgelopen. Hier is de code voor hetzelfde:
importeren pyspel
pyspel.in het()schermbreedte = 750
schermhoogte = 450
scherm = pygame.display.set_mode((screen_width, screen_height))obstakel_x = 400
obstakel_y = 400
obstakelbreedte = 40
obstakel_hoogte = 40
speler_x = 200
speler_y = 400
spelerbreedte = 20
speler_hoogte = 20terwijlWAAR:
voorevenementinpyspel.evenement.krijgen():
if event.type == pygame. ONTSLAG NEMEN:
pyspel.ontslag nemen()
ontslag nemen()
toetsen = pygame.key.get_pressed()
alssleutels[pygame. K_LEFT]:
speler_x -= 5
alssleutels[pygame. K_RIGHT]:
speler_x += 5
als speler_x + speler_breedte > obstakel_x en speler_x < obstakel_x + obstakel_breedteEnspeler_y + speler_hoogte > obstakel_y en speler_y < obstakel_y + obstakel_hoogte:
game_over = WAAR
scherm.vullen((0, 0, 0))
pyspel.tekenen.rect(scherm, (255, 0, 0), (obstakel_x, obstakel_y, obstakel_breedte, obstakel_hoogte))
pyspel.tekenen.rect(scherm, (0, 255, 0), (speler_x, speler_y, speler_breedte, speler_hoogte))
pyspel.weergave.update()
In de bovenstaande code heb je het spelvenster ingesteld en de spelvariabelen gedeclareerd. Je behandelde ook gebruikersinvoer en tekende de elementen op het scherm.
Het startmenu maken
Nu je een basisspel hebt, gaan we een startmenu maken. Om dit te doen, moet u een globale variabele voor de spelstatus declareren. Deze variabele houdt de huidige status van het spel bij, bijvoorbeeld of het startmenu actief is of dat het spel actief is. Je moet deze variabele toevoegen aan het begin van je spelcode:
game_state = "start menu"
Vervolgens voeg je een functie toe om het startmenu naar het scherm te tekenen. U kunt PyGame-functies gebruiken om de tekst, knoppen en andere elementen op het scherm te tekenen.
defteken_start_menu():
scherm.vullen((0, 0, 0))
lettertype = pygame.lettertype. SysFont('arieel', 40)
titel = font.render('Mijn spel', WAAR, (255, 255, 255))
start_button = font.render('Begin', WAAR, (255, 255, 255))
screen.blit (titel, (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))
pyspel.weergave.update()
U kunt dan de teken_start_menu() functie naar de hoofdspellus.
terwijlWAAR:
voorevenementinpyspel.evenement.krijgen():
if event.type == pygame. ONTSLAG NEMEN:
pyspel.ontslag nemen()
ontslag nemen()
als game_state == "start menu":
teken_start_menu()
als game_state == "spel":
toetsen = pygame.key.get_pressed()
# rest van de code
Nu wordt het startmenu naar het scherm getekend. De laatste stap is het afhandelen van de gebruikersinvoer. Jij kan voeg een if-statement toe naar de hoofdspellus om te controleren of de gebruiker op de startknop heeft gedrukt.
als game_state == "start menu":
toetsen = pygame.key.get_pressed()
alssleutels[pygame. K_SPACE]:
speler_x = 200
speler_y = 400
game_state = "spel"
game_over = Vals
Met deze code start het spel wanneer de gebruiker op de startknop drukt.
Implementatie van het Game Over-scherm
Nu je het startmenu hebt, gaan we het game-over-scherm maken. Deze functie zou de eindscore en een game-over-bericht moeten weergeven.
defteken_spel_over_scherm():
scherm.vullen((0, 0, 0))
lettertype = pygame.lettertype. SysFont('arieel', 40)
titel = font.render('Spel is over', WAAR, (255, 255, 255))
restart_button = font.render('R - Opnieuw opstarten', WAAR, (255, 255, 255))
quit_button = font.render('V - Stop', WAAR, (255, 255, 255))
screen.blit (titel, (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))
pyspel.weergave.update()
Je kunt deze functie dan toevoegen aan de hoofdspelloop.
als game_state == "start menu":
teken_start_menu()
als game_state == "spel is over":
teken_spel_over_scherm()
als game_state == "spel":
toetsen = pygame.key.get_pressed()
alssleutels[pygame. K_LEFT]:
speler_x -= 5
alssleutels[pygame. K_RIGHT]:
speler_x += 5
als speler_x + speler_breedte > obstakel_x en speler_x < obstakel_x + obstakel_breedteEnspeler_y + speler_hoogte > obstakel_y en speler_y < obstakel_y + obstakel_hoogte:
game_over = WAAR
game_state = "spel is over"
Ten slotte moet u gebruikersinvoer afhandelen om de keuze van de gebruiker te verwerken. Je kunt een if-statement toevoegen aan de hoofdspelloop om te controleren of de gebruiker op de herstart- of stopknop heeft gedrukt.
als game_state == "start menu":
toetsen = pygame.key.get_pressed()
alssleutels[pygame. K_SPACE]:
game_state = "spel"
speler_x = 200
speler_y = 400
game_state = "spel"
game_over = Vals
als game_state == "spel is over":
toetsen = pygame.key.get_pressed()
alssleutels[pygame. K_r]:
game_state = "start menu"
alssleutels[pygame. K_q]:
pyspel.ontslag nemen()
ontslag nemen()
Met deze code start het spel opnieuw wanneer de gebruiker op de 'R'-knop drukt en stopt het wanneer de gebruiker op de 'Q'-knop op het toetsenbord drukt.
Hieronder staat de volledige code:
importeren pyspel
pyspel.in het()
schermbreedte = 750
schermhoogte = 450
scherm = pygame.display.set_mode((screen_width, screen_height))
obstakel_x = 400
obstakel_y = 400
obstakelbreedte = 40
obstakel_hoogte = 40
speler_x = 200
speler_y = 400
spelerbreedte = 20
speler_hoogte = 20
game_state = "start menu"defteken_start_menu():
scherm.vullen((0, 0, 0))
lettertype = pygame.lettertype. SysFont('arieel', 40)
titel = font.render('Mijn spel', WAAR, (255, 255, 255))
start_button = font.render('Begin', WAAR, (255, 255, 255))
screen.blit (titel, (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))
pyspel.weergave.update()defteken_spel_over_scherm():
scherm.vullen((0, 0, 0))
lettertype = pygame.lettertype. SysFont('arieel', 40)
titel = font.render('Spel is over', WAAR, (255, 255, 255))
restart_button = font.render('R - Opnieuw opstarten', WAAR, (255, 255, 255))
quit_button = font.render('V - Stop', WAAR, (255, 255, 255))
screen.blit (titel, (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))
pyspel.weergave.update()
terwijlWAAR:
voorevenementinpyspel.evenement.krijgen():
if event.type == pygame. ONTSLAG NEMEN:
pyspel.ontslag nemen()
ontslag nemen()
als game_state == "start menu":
teken_start_menu()
toetsen = pygame.key.get_pressed()
alssleutels[pygame. K_SPACE]:
speler_x = 200
speler_y = 400
game_state = "spel"
game_over = Vals
elif game_state == "spel is over":
teken_spel_over_scherm()
toetsen = pygame.key.get_pressed()
alssleutels[pygame. K_r]:
game_state = "start menu"
alssleutels[pygame. K_q]:
pyspel.ontslag nemen()
ontslag nemen()
elif game_state == "spel":
toetsen = pygame.key.get_pressed()
alssleutels[pygame. K_LEFT]:
speler_x -= 5
alssleutels[pygame. K_RIGHT]:
speler_x += 5
als speler_x + speler_breedte > obstakel_x en speler_x < obstakel_x + obstakel_breedteEnspeler_y + speler_hoogte > obstakel_y en speler_y < obstakel_y + obstakel_hoogte:
game_over = WAAR
game_state = "spel is over"
scherm.vullen((0, 0, 0))
pyspel.tekenen.rect(scherm, (255, 0, 0), (obstakel_x, obstakel_y, obstakel_breedte, obstakel_hoogte))
pyspel.tekenen.rect(scherm, (0, 255, 0), (speler_x, speler_y, speler_breedte, speler_hoogte))
pyspel.weergave.update()
elif spel is over:
game_state = "spel is over"
game_over = Vals
De code begint met het importeren van het pyspel module en initialiseren. Vervolgens wordt een spelvenster gemaakt en worden de benodigde spelvariabelen gedeclareerd, waaronder de positie, dimensie en de spelstatus van de speler en het obstakel.
De code definieert twee functies, teken_start_menu() En teken_spel_over_scherm(), om het startmenu en het game-over-scherm te tekenen. Deze functies gebruiken de PyGame-functies om tekst en knoppen naar het scherm te tekenen.
De hoofdspellus begint met het afhandelen van gebeurtenissen en het controleren van de spelstatus. Als de spelstatus is start menu, wordt het startmenu naar het scherm getekend. Als de spelstatus is spel is over, wordt het game-over-scherm naar het scherm getrokken. Als de spelstatus iets anders is, wordt het spel bijgewerkt en worden de speler en het obstakel naar het scherm getrokken.
Het spel wordt geüpdatet door het indrukken van toetsen en het controleren op een botsing tussen de speler en het obstakel. Als er een botsing is, stelt het spel de spel is over vlag naar WAAR en stelt de spelstatus in op spel is over.
Nadat het spel is bijgewerkt, worden de speler en het obstakel naar het scherm getrokken. Ten slotte controleert de code of de spel is over vlag is ingesteld, en als dat zo is, wordt de vlag gereset en wordt de spelstatus ingesteld op spel is over.
Dit proces wordt continu herhaald totdat het spelvenster wordt gesloten.
Verhoog de gebruikersbetrokkenheid met een visueel aantrekkelijke gebruikersinterface
Het gebruik van een goed ontworpen gebruikersinterface (UI) kan de betrokkenheid van gebruikers bij een PyGame-game aanzienlijk vergroten. Een duidelijk en gemakkelijk leesbaar lettertype, visueel aantrekkelijke afbeeldingen, eenvoudige navigatie en gebruikersfeedback zijn allemaal belangrijke elementen waarmee rekening moet worden gehouden bij het ontwerpen van de gebruikersinterface. Door deze elementen te implementeren, kun je een gebruikersinterface maken die ervoor zorgt dat de speler geïnteresseerd en ondergedompeld blijft in het spel.
Vergeet niet om uw gebruikersinterface te testen en feedback van spelers te verzamelen om ervoor te zorgen dat deze effectief is in het vergroten van de betrokkenheid. Over het algemeen kan de tijd nemen om een sterke gebruikersinterface te maken de ervaring van de speler en het spelplezier aanzienlijk verbeteren.