PyGame je priljubljena knjižnica za ustvarjanje projektov s Pythonom in ponuja zmogljiv nabor orodij za razvoj iger. V tem članku se boste naučili, kako ustvariti začetni meni in zaslon za konec igre za preprosto igro z uporabo PyGame.
Ustvarjanje preproste igre
Preden ustvarite začetni meni in zaslon za konec igre, naredimo preprosto igro. V tej igri boste upravljali lik s puščičnimi tipkami in se poskušali izogniti oviram. Da bodo stvari preproste, poskusite ne uporabljati nobenih slik.
Za začetek morate uvoziti potrebne module. Uporabljali boste pygame modul za dostop do funkcij PyGame. Če želite namestiti modul, lahko uporabite upravitelja paketov pip:
pip namestite pygame
Zdaj, ko je naš modul pripravljen za uporabo, ustvarimo preprosto igro z igralcem, ki se lahko premika levo ali desno s puščičnimi tipkami in oviro. Če trčite v oviro, se igra konča. Tukaj je koda za isto:
uvoz pygame
pygame.v()screen_width = 750
višina_zaslona = 450
zaslon = pygame.display.set_mode((širina_zaslona, višina_zaslona))ovira_x = 400
ovira_y = 400
širina_ovire = 40
višina_ovire = 40
igralec_x = 200
igralec_y = 400
player_width = 20
višina_igralca = 20medtemPrav:
zadogodekvpygame.dogodek.dobiti():
if event.type == pygame. PRENEHATI:
pygame.prenehati()
prenehati()
tipke = pygame.key.get_pressed()
čeključi[pygame. K_LEFT]:
igralec_x -= 5
čeključi[pygame. K_DESNO]:
igralec_x += 5
če player_x + player_width > obstacle_x in player_x < ovira_x + širina_ovireinigralec_y + višina_igralca > ovira_y in igralec_y < ovira_y + višina_ovire:
konec igre = Prav
zaslon.napolniti((0, 0, 0))
pygame.risanje.rect(zaslon, (255, 0, 0), (ovira_x, ovira_y, širina_ovire, višina_ovire))
pygame.risanje.rect(zaslon, (0, 255, 0), (igralec_x, igralec_y, player_width, višina_igralca))
pygame.zaslon.nadgradnja()
V zgornji kodi ste nastavili okno igre in deklarirali spremenljivke igre. Ukvarjali ste se tudi z uporabniškim vnosom in risali elemente na zaslon.
Ustvarjanje menija Start
Zdaj, ko imate osnovno igro, ustvarimo začetni meni. Če želite to narediti, boste morali deklarirati globalno spremenljivko za stanje igre. Ta spremenljivka bo spremljala trenutno stanje igre, na primer, ali je začetni meni aktiven ali se igra izvaja. To spremenljivko morate dodati na začetek kode igre:
game_state = "start_menu"
Nato boste dodali funkcijo za risanje začetnega menija na zaslon. Funkcije PyGame lahko uporabite za risanje besedila, gumbov in drugih elementov na zaslonu.
defdraw_start_menu():
zaslon.napolniti((0, 0, 0))
pisava = pygame.font. SysFont('arial', 40)
naslov = font.render('Moja igra', Prav, (255, 255, 255))
start_button = font.render('Začni', Prav, (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.zaslon.nadgradnja()
Nato lahko dodate draw_start_menu() funkcijo v glavno igralno zanko.
medtemPrav:
zadogodekvpygame.dogodek.dobiti():
if event.type == pygame. PRENEHATI:
pygame.prenehati()
prenehati()
če game_state == "start_menu":
draw_start_menu()
če game_state == "igra":
tipke = pygame.key.get_pressed()
# preostanek kode
Zdaj bo začetni meni narisan na zaslon. Zadnji korak je obdelava uporabniškega vnosa. Ti lahko dodajte stavek if v glavno igralno zanko, da preveri, ali je uporabnik pritisnil gumb za zagon.
če game_state == "start_menu":
tipke = pygame.key.get_pressed()
čeključi[pygame. K_SPACE]:
igralec_x = 200
igralec_y = 400
game_state = "igra"
konec igre = False
S to kodo se bo igra začela, ko uporabnik pritisne gumb za zagon.
Implementacija zaslona Game Over
Zdaj, ko imate začetni meni, ustvarimo zaslon za igro. Ta funkcija mora prikazati končni rezultat in sporočilo o koncu igre.
defdraw_game_over_screen():
zaslon.napolniti((0, 0, 0))
pisava = pygame.font. SysFont('arial', 40)
naslov = font.render('Konec igre', Prav, (255, 255, 255))
restart_button = font.render('R - Znova zaženi', Prav, (255, 255, 255))
quit_button = font.render('Q - Končaj', Prav, (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.zaslon.nadgradnja()
To funkcijo lahko nato dodate v glavno igralno zanko.
če game_state == "start_menu":
draw_start_menu()
če game_state == "konec igre":
draw_game_over_screen()
če game_state == "igra":
tipke = pygame.key.get_pressed()
čeključi[pygame. K_LEFT]:
igralec_x -= 5
čeključi[pygame. K_DESNO]:
igralec_x += 5
če player_x + player_width > obstacle_x in player_x < ovira_x + širina_ovireinigralec_y + višina_igralca > ovira_y in igralec_y < ovira_y + višina_ovire:
konec igre = Prav
game_state = "konec igre"
Nazadnje morate obravnavati uporabniški vnos, da lahko obravnavate izbiro uporabnika. V glavno zanko igre lahko dodate stavek if, da preverite, ali je uporabnik pritisnil gumb za ponovni zagon ali izhod.
če game_state == "start_menu":
tipke = pygame.key.get_pressed()
čeključi[pygame. K_SPACE]:
game_state = "igra"
igralec_x = 200
igralec_y = 400
game_state = "igra"
konec igre = False
če game_state == "konec igre":
tipke = pygame.key.get_pressed()
čeključi[pygame. K_r]:
game_state = "start_menu"
čeključi[pygame. K_q]:
pygame.prenehati()
prenehati()
S to kodo se bo igra znova zagnala, ko uporabnik pritisne gumb 'R', in zapusti, ko uporabnik pritisne gumb 'Q' na tipkovnici.
Spodaj je celotna koda:
uvoz pygame
pygame.v()
screen_width = 750
višina_zaslona = 450
zaslon = pygame.display.set_mode((širina_zaslona, višina_zaslona))
ovira_x = 400
ovira_y = 400
širina_ovire = 40
višina_ovire = 40
igralec_x = 200
igralec_y = 400
player_width = 20
višina_igralca = 20
game_state = "start_menu"defdraw_start_menu():
zaslon.napolniti((0, 0, 0))
pisava = pygame.font. SysFont('arial', 40)
naslov = font.render('Moja igra', Prav, (255, 255, 255))
start_button = font.render('Začni', Prav, (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.zaslon.nadgradnja()defdraw_game_over_screen():
zaslon.napolniti((0, 0, 0))
pisava = pygame.font. SysFont('arial', 40)
naslov = font.render('Konec igre', Prav, (255, 255, 255))
restart_button = font.render('R - Znova zaženi', Prav, (255, 255, 255))
quit_button = font.render('Q - Končaj', Prav, (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.zaslon.nadgradnja()
medtemPrav:
zadogodekvpygame.dogodek.dobiti():
if event.type == pygame. PRENEHATI:
pygame.prenehati()
prenehati()
če game_state == "start_menu":
draw_start_menu()
tipke = pygame.key.get_pressed()
čeključi[pygame. K_SPACE]:
igralec_x = 200
igralec_y = 400
game_state = "igra"
konec igre = False
elif game_state == "konec igre":
draw_game_over_screen()
tipke = pygame.key.get_pressed()
čeključi[pygame. K_r]:
game_state = "start_menu"
čeključi[pygame. K_q]:
pygame.prenehati()
prenehati()
elif game_state == "igra":
tipke = pygame.key.get_pressed()
čeključi[pygame. K_LEFT]:
igralec_x -= 5
čeključi[pygame. K_DESNO]:
igralec_x += 5
če player_x + player_width > obstacle_x in player_x < ovira_x + širina_ovireinigralec_y + višina_igralca > ovira_y in igralec_y < ovira_y + višina_ovire:
konec igre = Prav
game_state = "konec igre"
zaslon.napolniti((0, 0, 0))
pygame.risanje.rect(zaslon, (255, 0, 0), (ovira_x, ovira_y, širina_ovire, višina_ovire))
pygame.risanje.rect(zaslon, (0, 255, 0), (igralec_x, igralec_y, player_width, višina_igralca))
pygame.zaslon.nadgradnja()
elif konec igre:
game_state = "konec igre"
konec igre = False
Koda se začne z uvozom pygame modul in ga inicializirati. Nato ustvari okno igre in deklarira potrebne spremenljivke igre, vključno s položajem igralca in ovire, dimenzijo in stanjem igre.
Koda definira dve funkciji, draw_start_menu() in draw_game_over_screen(), za risanje začetnega menija in konca igre. Te funkcije uporabljajo funkcije PyGame za risanje besedila in gumbov na zaslon.
Glavna igralna zanka se začne z obravnavanjem dogodkov in preverjanjem stanja igre. Če je stanje igre začetni_meni, se začetni meni prikaže na zaslonu. Če je stanje igre konec igre, se zaslon igre konča na zaslonu. Če je stanje igre kaj drugega, se igra posodobi in pritegne igralca in oviro na zaslon.
Igra se posodablja z obravnavanjem pritiskov tipk in preverjanjem trka med igralcem in oviro. Če pride do trka, igra nastavi konec igre označi za Prav in nastavi stanje igre na konec igre.
Ko je igra posodobljena, sta igralec in ovira narisana na zaslonu. Na koncu koda preveri, ali je konec igre zastavica je nastavljena, in če je, ponastavi zastavico in nastavi stanje igre na konec igre.
Ta postopek se neprekinjeno ponavlja, dokler se okno igre ne zapre.
Povečajte angažiranost uporabnikov z vizualno privlačnim uporabniškim vmesnikom
Uporaba dobro oblikovanega uporabniškega vmesnika (UI) lahko močno poveča angažiranost uporabnikov v igri PyGame. Jasna in lahko berljiva pisava, vizualno privlačna grafika, enostavna navigacija in povratne informacije uporabnikov so pomembni elementi, ki jih je treba upoštevati pri oblikovanju uporabniškega vmesnika. Z implementacijo teh elementov lahko ustvarite uporabniški vmesnik, ki pomaga ohraniti zanimanje igralca in ga potopiti v igro.
Ne pozabite preizkusiti svojega uporabniškega vmesnika in zbrati povratne informacije igralcev, da zagotovite, da je učinkovit pri povečanju angažiranosti. Če si vzamete čas za ustvarjanje močnega uporabniškega vmesnika, lahko na splošno močno izboljšate igralčevo izkušnjo in užitek v igri.