Čitatelji poput vas podržavaju MUO. Kada kupite putem poveznica na našoj stranici, možemo zaraditi partnersku proviziju. Čitaj više.

PyGame je popularna biblioteka za stvaranje projekata s Pythonom i pruža snažan skup alata za razvoj igara. U ovom ćete članku naučiti kako stvoriti početni izbornik i zaslon za kraj igre za jednostavnu igru ​​koristeći PyGame.

Stvaranje jednostavne igre

Prije nego što stvorite početni izbornik i zaslon za kraj igre, napravimo jednostavnu igru. U ovoj igrici upravljat ćete likom pomoću tipki sa strelicama i pokušavati izbjeći prepreke. Kako biste pojednostavili stvari, pokušajte ne koristiti nikakve slike.

Za početak morate uvesti potrebne module. Vi ćete koristiti pygame modul za pristup PyGame funkcijama. Da biste instalirali modul, možete koristite pip upravitelj paketa:

pip instalirati pygame

Sada kada je naš modul spreman za upotrebu, stvorimo jednostavnu igru ​​s igračem koji se može pomicati lijevo ili desno pomoću tipki sa strelicama i prepreke. Ako se sudarite s preprekom, igra će završiti. Evo koda za isto:

instagram viewer
uvoz pygame
pygame.u tome()

screen_width = 750
visina_zaslona = 450
ekran = pygame.display.set_mode((širina_zaslona, ​​visina_zaslona))

prepreka_x = 400
prepreka_y = 400
širina_prepreke = 40
visina_prepreke = 40
igrač_x = 200
igrač_y = 400
player_width = 20
visina_igrača = 20

dokPravi:

zadogađajupygame.događaj.dobiti():

if event.type == pygame. PRESTATI:
pygame.prestati()
prestati()


tipke = pygame.key.get_pressed()
akoključevi[pygame. K_LEFT]:
igrač_x -= 5
akoključevi[pygame. K_DESNO]:
igrač_x += 5


ako player_x + player_width > prepreka_x i player_x < prepreka_x + širina_preprekeiigrač_y + visina_igrača > prepreka_y i igrač_y < prepreka_y + visina_prepreke:
igra_gotova = Pravi


zaslon.ispuniti((0, 0, 0))
pygame.crtati.ispravno(zaslon, (255, 0, 0), (prepreka_x, prepreka_y, širina_prepreke, visina_prepreke))
pygame.crtati.ispravno(zaslon, (0, 255, 0), (igrač_x, igrač_y, player_width, visina_igrača))
pygame.prikaz.Ažuriraj()

U gornjem kodu, postavili ste prozor igre i deklarirali varijable igre. Također ste rukovali korisničkim unosom i crtali elemente na ekranu.

Stvaranje izbornika Start

Sada kada imate osnovnu igru, kreirajmo početni izbornik. Da biste to učinili, morat ćete deklarirati globalnu varijablu za stanje igre. Ova varijabla će pratiti trenutno stanje igre, kao što je je li početni izbornik aktivan ili je igra pokrenuta. Morate dodati ovu varijablu na početku koda igre:

game_state = "start_menu"

Zatim ćete dodati funkciju za crtanje početnog izbornika na zaslonu. Možete koristiti PyGame funkcije za crtanje teksta, gumba i drugih elemenata na ekranu.

defcrtanje_početnog_izbornika():
zaslon.ispuniti((0, 0, 0))
font = pygame.font. SysFont('arial', 40)
naslov = font.render('moja igra', Pravi, (255, 255, 255))
start_button = font.render('Početak', Pravi, (255, 255, 255))
screen.blit (naslov, (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.prikaz.Ažuriraj()

Zatim možete dodati draw_start_menu() funkciju u glavnu petlju igre.

dokPravi: 

zadogađajupygame.događaj.dobiti():
if event.type == pygame. PRESTATI:
pygame.prestati()
prestati()

ako game_state == "start_menu":
draw_start_menu()

ako game_state == "igra":
tipke = pygame.key.get_pressed()
# ostatak koda

Sada će se početni izbornik prikazati na zaslonu. Zadnji korak je rukovanje korisničkim unosom. Možeš dodajte naredbu if u glavnu petlju igre kako bi provjerili je li korisnik pritisnuo gumb za pokretanje.

ako game_state == "start_menu":
tipke = pygame.key.get_pressed()
akoključevi[pygame. K_SPACE]:
igrač_x = 200
igrač_y = 400
game_state = "igra"
igra_gotova = lažno

S ovim kodom, igra će se pokrenuti kada korisnik pritisne gumb za pokretanje.

Implementacija zaslona Game Over

Sada kada imate početni izbornik, kreirajmo zaslon za igru. Ova bi funkcija trebala prikazati konačni rezultat i poruku o završetku igre.

defcrtanje_igra_preko_zaslona():
zaslon.ispuniti((0, 0, 0))
font = pygame.font. SysFont('arial', 40)
naslov = font.render('Igra je gotova', Pravi, (255, 255, 255))
restart_button = font.render('R - Restart', Pravi, (255, 255, 255))
quit_button = font.render('Q - Odustani', Pravi, (255, 255, 255))
screen.blit (naslov, (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.prikaz.Ažuriraj()

Zatim možete dodati ovu funkciju u glavnu petlju igre.

ako game_state == "start_menu":
draw_start_menu()
ako game_state == "igra je gotova":
draw_game_over_screen()

ako game_state == "igra":
tipke = pygame.key.get_pressed()
akoključevi[pygame. K_LEFT]:
igrač_x -= 5
akoključevi[pygame. K_DESNO]:
igrač_x += 5

ako player_x + player_width > prepreka_x i player_x < prepreka_x + širina_preprekeiigrač_y + visina_igrača > prepreka_y i igrač_y < prepreka_y + visina_prepreke:
igra_gotova = Pravi
game_state = "igra je gotova"

Na kraju, morate obraditi korisnički unos kako biste obradili korisnikov izbor. Možete dodati naredbu if u glavnu petlju igre kako biste provjerili je li korisnik pritisnuo gumb za ponovno pokretanje ili izlaz.

ako game_state == "start_menu":
tipke = pygame.key.get_pressed()
akoključevi[pygame. K_SPACE]:
game_state = "igra"
igrač_x = 200
igrač_y = 400
game_state = "igra"
igra_gotova = lažno

ako game_state == "igra je gotova":
tipke = pygame.key.get_pressed()
akoključevi[pygame. K_r]:
game_state = "start_menu"
akoključevi[pygame. K_q]:
pygame.prestati()
prestati()

S ovim kodom, igra će se ponovno pokrenuti kada korisnik pritisne tipku 'R' i prekinuti kada korisnik pritisne tipku 'Q' na tipkovnici.

Ispod je cijeli kod:

uvoz pygame

pygame.u tome()
screen_width = 750
visina_zaslona = 450
ekran = pygame.display.set_mode((širina_zaslona, ​​visina_zaslona))
prepreka_x = 400
prepreka_y = 400
širina_prepreke = 40
visina_prepreke = 40
igrač_x = 200
igrač_y = 400
player_width = 20
visina_igrača = 20
game_state = "start_menu"

defcrtanje_početnog_izbornika():
zaslon.ispuniti((0, 0, 0))
font = pygame.font. SysFont('arial', 40)
naslov = font.render('moja igra', Pravi, (255, 255, 255))
start_button = font.render('Početak', Pravi, (255, 255, 255))
screen.blit (naslov, (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.prikaz.Ažuriraj()

defcrtanje_igra_preko_zaslona():
zaslon.ispuniti((0, 0, 0))
font = pygame.font. SysFont('arial', 40)
naslov = font.render('Igra je gotova', Pravi, (255, 255, 255))
restart_button = font.render('R - Restart', Pravi, (255, 255, 255))
quit_button = font.render('Q - Odustani', Pravi, (255, 255, 255))
screen.blit (naslov, (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.prikaz.Ažuriraj()

dokPravi:
zadogađajupygame.događaj.dobiti():
if event.type == pygame. PRESTATI:
pygame.prestati()
prestati()
ako game_state == "start_menu":
draw_start_menu()
tipke = pygame.key.get_pressed()
akoključevi[pygame. K_SPACE]:
igrač_x = 200
igrač_y = 400
game_state = "igra"
igra_gotova = lažno
elif game_state == "igra je gotova":
draw_game_over_screen()
tipke = pygame.key.get_pressed()
akoključevi[pygame. K_r]:
game_state = "start_menu"
akoključevi[pygame. K_q]:
pygame.prestati()
prestati()

elif game_state == "igra":
tipke = pygame.key.get_pressed()
akoključevi[pygame. K_LEFT]:
igrač_x -= 5
akoključevi[pygame. K_DESNO]:
igrač_x += 5

ako player_x + player_width > prepreka_x i player_x < prepreka_x + širina_preprekeiigrač_y + visina_igrača > prepreka_y i igrač_y < prepreka_y + visina_prepreke:
igra_gotova = Pravi
game_state = "igra je gotova"

zaslon.ispuniti((0, 0, 0))
pygame.crtati.ispravno(zaslon, (255, 0, 0), (prepreka_x, prepreka_y, širina_prepreke, visina_prepreke))
pygame.crtati.ispravno(zaslon, (0, 255, 0), (igrač_x, igrač_y, player_width, visina_igrača))
pygame.prikaz.Ažuriraj()

elif igra je gotova:
game_state = "igra je gotova"
igra_gotova = lažno

Kod počinje uvozom pygame modul i njegovo inicijaliziranje. Zatim stvara prozor igre i deklarira potrebne varijable igre, uključujući poziciju igrača i prepreke, dimenzije i stanje igre.

Kod definira dvije funkcije, draw_start_menu() i draw_game_over_screen(), za crtanje početnog izbornika i završetka igre. Ove funkcije koriste funkcije PyGame za crtanje teksta i gumba na ekranu.

Glavna petlja igre počinje rukovanjem događajima i provjerom stanja igre. Ako je stanje igre početni_izbornik, početni izbornik se iscrtava na zaslonu. Ako je stanje igre igra je gotova, zaslon za završetak igre je nacrtan na zaslonu. Ako je stanje igre nešto drugo, igra se ažurira i privlači igrača i prepreku na zaslon.

Igra se ažurira rukovanjem pritiscima tipki i provjerom kolizije između igrača i prepreke. Ako dođe do sudara, igra postavlja igra je gotova označiti za Pravi i postavlja stanje igre na igra je gotova.

Nakon što se igra ažurira, igrač i prepreka su nacrtani na ekranu. Na kraju, kod provjerava je li igra je gotova zastavica je postavljena, a ako jest, poništava zastavicu i postavlja stanje igre na igra je gotova.

Ovaj se postupak neprekidno ponavlja sve dok se prozor igre ne zatvori.

Povećajte angažman korisnika s vizualno privlačnim korisničkim sučeljem

Korištenje dobro dizajniranog korisničkog sučelja (UI) može uvelike povećati angažman korisnika u PyGame igri. Jasan i lako čitljiv font, vizualno privlačna grafika, laka navigacija i povratne informacije korisnika važni su elementi koje treba uzeti u obzir pri dizajniranju korisničkog sučelja. Implementacijom ovih elemenata možete stvoriti korisničko sučelje koje pomaže zadržati igrača zainteresiranim i uronjenim u igru.

Ne zaboravite testirati svoje korisničko sučelje i prikupiti povratne informacije od igrača kako biste bili sigurni da je učinkovito u povećanju angažmana. Općenito, izdvajanje vremena za stvaranje snažnog korisničkog sučelja može uvelike poboljšati igračevo iskustvo i užitak u vašoj igri.