Teiesugused lugejad aitavad MUO-d toetada. Kui teete ostu meie saidil olevate linkide abil, võime teenida sidusettevõtte komisjonitasu. Loe rohkem.

PyGame on populaarne raamatukogu Pythoni abil projektide loomiseks ja see pakub võimsaid tööriistu mängude arendamiseks. Sellest artiklist saate teada, kuidas PyGame'i abil lihtsa mängu jaoks luua menüü Start ja mäng ekraanil.

Lihtsa mängu loomine

Enne kui loote menüü Start ja mängu ekraanil, tehkem esmalt lihtne mäng. Selles mängus juhite tegelast nooleklahvidega ja proovite takistusi vältida. Asjade lihtsaks hoidmiseks proovige mitte kasutada pilte.

Alustamiseks peate importima vajalikud moodulid. Te hakkate kasutama pygame moodul PyGame'i funktsioonidele juurdepääsuks. Mooduli installimiseks saate kasutage pip paketihaldurit:

pip installida pygame

Nüüd, kui meie moodul on kasutamiseks valmis, loome lihtsa mängu mängijaga, kes saab liikuda nooleklahvide ja takistuse abil vasakule või paremale. Kui põrkate kokku takistusega, lõpeb mäng. Siin on sama kood:

instagram viewer
importida pygame
pygame.selles()

screen_width = 750
ekraani_kõrgus = 450
ekraan = pygame.display.set_mode((ekraani_laius, ekraani_kõrgus))

takistus_x = 400
takistus_y = 400
takistuse_laius = 40
takistuse_kõrgus = 40
mängija_x = 200
mängija_y = 400
mängija_laius = 20
mängija_kõrgus = 20

samal ajalTõsi:

jaokssündmussissepygame.sündmus.saada():

if event.type == pygame. VÄLJA:
pygame.lõpeta()
lõpeta ()


võtmed = pygame.key.get_pressed()
kuivõtmed[pygame. K_LEFT]:
mängija_x - = 5
kuivõtmed[pygame. K_RIGHT]:
mängija_x += 5


kui mängija_x + mängija_laius > takistus_x ja mängija_x < takistus_x + takistuse_laiusjamängija_y + mängija_kõrgus > takistus_y ja mängija_y < takistus_y + takistuse_kõrgus:
game_over = Tõsi


ekraan.täitke((0, 0, 0))
pygame.joonista.rekt(ekraan, (255, 0, 0), (takistus_x, takistus_y, takistuse_laius, takistuse_kõrgus))
pygame.joonista.rekt(ekraan, (0, 255, 0), (mängija_x, mängija_y, mängija_laius, mängija_kõrgus))
pygame.kuva.värskendus()

Ülaltoodud koodis seadistasite mänguakna ja deklareerisite mängu muutujad. Samuti käsitlesite kasutajate sisestusi ja joonistasite elemendid ekraanile.

Start-menüü loomine

Nüüd, kui teil on põhimäng, loome käivitusmenüü. Selleks peate deklareerima mängu oleku globaalse muutuja. See muutuja jälgib mängu hetkeseisu, näiteks seda, kas Start-menüü on aktiivne või mäng töötab. Peate lisama selle muutuja oma mängukoodi algusesse:

game_state = "start_menu"

Järgmisena lisate funktsiooni Start-menüü ekraanile joonistamiseks. PyGame'i funktsioone saate kasutada teksti, nuppude ja muude elementide ekraanile joonistamiseks.

defjoonistus_algusmenüü():
ekraan.täitke((0, 0, 0))
font = pygame.font. SysFont("arial", 40)
title = font.render("Minu mäng", Tõsi, (255, 255, 255))
start_button = font.render("Alusta", Tõsi, (255, 255, 255))
screen.blit (pealkiri, (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.kuva.värskendus()

Seejärel saate lisada draw_start_menu() funktsiooni põhimänguahelasse.

samal ajalTõsi: 

jaokssündmussissepygame.sündmus.saada():
if event.type == pygame. VÄLJA:
pygame.lõpeta()
lõpeta ()

kui game_state == "start_menu":
draw_start_menu()

kui game_state == "mäng":
võtmed = pygame.key.get_pressed()
# ülejäänud kood

Nüüd kuvatakse ekraanile menüü Start. Viimane samm on kasutaja sisendi käsitlemine. Sa saad lisa if-lause mängu põhitsüklisse, et kontrollida, kas kasutaja on vajutanud käivitusnuppu.

kui game_state == "start_menu":
võtmed = pygame.key.get_pressed()
kuivõtmed[pygame. K_SPACE]:
mängija_x = 200
mängija_y = 400
game_state = "mäng"
game_over = Vale

Selle koodiga hakkab mäng käima, kui kasutaja vajutab start-nuppu.

Mängu rakendamine üle ekraani

Nüüd, kui teil on menüü Start, loome mängu ekraanil. See funktsioon peaks kuvama lõpptulemuse ja mängu lõppemise teate.

defdraw_game_over_screen():
ekraan.täitke((0, 0, 0))
font = pygame.font. SysFont("arial", 40)
title = font.render('Mäng läbi', Tõsi, (255, 255, 255))
restart_button = font.render("R - taaskäivitage", Tõsi, (255, 255, 255))
quit_button = font.render('Q - Lõpeta', Tõsi, (255, 255, 255))
screen.blit (pealkiri, (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.kuva.värskendus()

Seejärel saate selle funktsiooni lisada põhimängutsüklisse.

kui game_state == "start_menu":
draw_start_menu()
kui game_state == "mäng läbi":
draw_game_over_screen()

kui game_state == "mäng":
võtmed = pygame.key.get_pressed()
kuivõtmed[pygame. K_LEFT]:
mängija_x - = 5
kuivõtmed[pygame. K_RIGHT]:
mängija_x += 5

kui mängija_x + mängija_laius > takistus_x ja mängija_x < takistus_x + takistuse_laiusjamängija_y + mängija_kõrgus > takistus_y ja mängija_y < takistus_y + takistuse_kõrgus:
game_over = Tõsi
game_state = "mäng läbi"

Lõpuks peate kasutaja valiku käsitlemiseks käsitlema kasutaja sisendit. Saate mängu põhitsüklile lisada if-lause, et kontrollida, kas kasutaja on vajutanud taaskäivitus- või väljumisnuppu.

kui game_state == "start_menu":
võtmed = pygame.key.get_pressed()
kuivõtmed[pygame. K_SPACE]:
game_state = "mäng"
mängija_x = 200
mängija_y = 400
game_state = "mäng"
game_over = Vale

kui game_state == "mäng läbi":
võtmed = pygame.key.get_pressed()
kuivõtmed[pygame. K_r]:
game_state = "start_menu"
kuivõtmed[pygame. K_q]:
pygame.lõpeta()
lõpeta ()

Selle koodiga mäng taaskäivitub, kui kasutaja vajutab nuppu R ja lõpetab, kui kasutaja vajutab klaviatuuril nuppu Q.

Allpool on täielik kood:

importida pygame

pygame.selles()
screen_width = 750
ekraani_kõrgus = 450
ekraan = pygame.display.set_mode((ekraani_laius, ekraani_kõrgus))
takistus_x = 400
takistus_y = 400
takistuse_laius = 40
takistuse_kõrgus = 40
mängija_x = 200
mängija_y = 400
mängija_laius = 20
mängija_kõrgus = 20
game_state = "start_menu"

defjoonistus_algusmenüü():
ekraan.täitke((0, 0, 0))
font = pygame.font. SysFont("arial", 40)
title = font.render("Minu mäng", Tõsi, (255, 255, 255))
start_button = font.render("Alusta", Tõsi, (255, 255, 255))
screen.blit (pealkiri, (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.kuva.värskendus()

defdraw_game_over_screen():
ekraan.täitke((0, 0, 0))
font = pygame.font. SysFont("arial", 40)
title = font.render('Mäng läbi', Tõsi, (255, 255, 255))
restart_button = font.render("R - taaskäivitage", Tõsi, (255, 255, 255))
quit_button = font.render('Q - Lõpeta', Tõsi, (255, 255, 255))
screen.blit (pealkiri, (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.kuva.värskendus()

samal ajalTõsi:
jaokssündmussissepygame.sündmus.saada():
if event.type == pygame. VÄLJA:
pygame.lõpeta()
lõpeta ()
kui game_state == "start_menu":
draw_start_menu()
võtmed = pygame.key.get_pressed()
kuivõtmed[pygame. K_SPACE]:
mängija_x = 200
mängija_y = 400
game_state = "mäng"
game_over = Vale
elif game_state == "mäng läbi":
draw_game_over_screen()
võtmed = pygame.key.get_pressed()
kuivõtmed[pygame. K_r]:
game_state = "start_menu"
kuivõtmed[pygame. K_q]:
pygame.lõpeta()
lõpeta ()

elif game_state == "mäng":
võtmed = pygame.key.get_pressed()
kuivõtmed[pygame. K_LEFT]:
mängija_x - = 5
kuivõtmed[pygame. K_RIGHT]:
mängija_x += 5

kui mängija_x + mängija_laius > takistus_x ja mängija_x < takistus_x + takistuse_laiusjamängija_y + mängija_kõrgus > takistus_y ja mängija_y < takistus_y + takistuse_kõrgus:
game_over = Tõsi
game_state = "mäng läbi"

ekraan.täitke((0, 0, 0))
pygame.joonista.rekt(ekraan, (255, 0, 0), (takistus_x, takistus_y, takistuse_laius, takistuse_kõrgus))
pygame.joonista.rekt(ekraan, (0, 255, 0), (mängija_x, mängija_y, mängija_laius, mängija_kõrgus))
pygame.kuva.värskendus()

elif mäng läbi:
game_state = "mäng läbi"
game_over = Vale

Kood algab koodi importimisega pygame moodul ja selle lähtestamine. Seejärel loob see mänguakna ja deklareerib vajalikud mängumuutujad, sealhulgas mängija ja takistuse asukoha, mõõtme ja mängu oleku.

Kood määratleb kaks funktsiooni, draw_start_menu() ja draw_game_over_screen(), et joonistada algusmenüü ja mäng üle ekraani. Need funktsioonid kasutavad PyGame'i funktsioone teksti ja nuppude ekraanile joonistamiseks.

Põhiline mängutsükkel algab sündmuste käsitlemisest ja mängu oleku kontrollimisest. Kui mängu olek on algusmenüü, joonistatakse ekraanile algusmenüü. Kui mängu olek on mäng läbi, joonistatakse mängu üle ekraan ekraanile. Kui mängu olek on midagi muud, siis mäng värskendab ja tõmbab mängija ja takistuse ekraanile.

Mängu värskendatakse klahvivajutuste käsitlemise ja mängija ja takistuse vahelise kokkupõrke kontrollimise teel. Kui toimub kokkupõrge, määrab mäng mäng läbi liputage Tõsi ja seab mängu oleku mäng läbi.

Pärast mängu värskendamist tõmmatakse mängija ja takistus ekraanile. Lõpuks kontrollib kood, kas mäng läbi lipp on seatud ja kui on, lähtestab see lipu ja seab mängu oleku mäng läbi.

Seda protsessi korratakse pidevalt, kuni mänguaken suletakse.

Suurendage kasutajate seotust visuaalselt ahvatleva kasutajaliidese abil

Hästi läbimõeldud kasutajaliidese (UI) kasutamine võib oluliselt suurendada kasutajate seotust PyGame mänguga. Selge ja hõlpsasti loetav font, visuaalselt atraktiivne graafika, lihtne navigeerimine ja kasutajate tagasiside on kõik olulised elemendid, mida kasutajaliidese kujundamisel arvestada. Neid elemente rakendades saate luua kasutajaliidese, mis aitab hoida mängijal huvi ja mängust süveneda.

Ärge unustage testida oma kasutajaliidest ja koguda mängijatelt tagasisidet, et tagada selle tõhusus kaasatuse suurendamisel. Üldiselt võib tugeva kasutajaliidese loomiseks aja võtmine oluliselt parandada mängija kogemust ja teie mängu naudingut.