Čitatelia ako vy pomáhajú podporovať MUO. Keď uskutočníte nákup pomocou odkazov na našej stránke, môžeme získať pridruženú províziu. Čítaj viac.

PyGame je populárna knižnica na vytváranie projektov s Pythonom a poskytuje výkonnú sadu nástrojov na vývoj hier. V tomto článku sa dozviete, ako vytvoriť úvodnú ponuku a hru cez obrazovku pre jednoduchú hru pomocou PyGame.

Vytvorenie jednoduchej hry

Pred vytvorením ponuky Štart a hry cez obrazovku si najprv urobme jednoduchú hru. V tejto hre budete ovládať postavu pomocou šípok a snažiť sa vyhýbať prekážkam. Ak chcete veci zjednodušiť, snažte sa nepoužívať žiadne obrázky.

Ak chcete začať, musíte importovať potrebné moduly. Budete používať pygame modul pre prístup k funkciám PyGame. Ak chcete nainštalovať modul, môžete použite správcu balíkov pip:

pip Inštalácia pygame

Teraz, keď je náš modul pripravený na použitie, poďme vytvoriť jednoduchú hru s hráčom, ktorý sa môže pohybovať doľava alebo doprava pomocou šípok a prekážky. Ak narazíte na prekážku, hra sa skončí. Tu je kód pre to isté:

instagram viewer
importovať pygame
pygame.init()

screen_width = 750
screen_height = 450
obrazovka = pygame.display.set_mode((šírka_obrazovky, výška_obrazovky))

prekážka_x = 400
prekážka_y = 400
šírka_prekážky = 40
výška_prekážky = 40
hráč_x = 200
hráč_y = 400
player_width = 20
player_height = 20

zatiaľ čoPravda:

preudalosťvpygame.udalosť.dostať():

if event.type == pygame. UKONČIŤ:
pygame.prestať()
skončiť ()


keys = pygame.key.get_pressed()
akkľúče[pygame. K_LEFT]:
hráč_x -= 5
akkľúče[pygame. K_RIGHT]:
hráč_x += 5


ak hráč_x + šírka_hráča > prekážka_x a hráč_x < prekážka_x + prekážka_šírkaahráč_y + player_height > prekážka_y a hráč_y < prekážka_y + výška_prekážok:
game_over = Pravda


obrazovke.naplniť((0, 0, 0))
pygame.kresliť.rect(obrazovke, (255, 0, 0), (prekážka_x, prekážka_y, prekážka_šírka, prekážka_výška))
pygame.kresliť.rect(obrazovke, (0, 255, 0), (hráč_x, hráč_y, player_width, player_height))
pygame.zobraziť.aktualizovať()

Vo vyššie uvedenom kóde nastavíte herné okno a deklarujete premenné hry. Zaoberali ste sa aj vstupom používateľa a kreslili prvky na obrazovku.

Vytvorenie ponuky Štart

Teraz, keď máte základnú hru, poďme vytvoriť ponuku Štart. Ak to chcete urobiť, budete musieť deklarovať globálnu premennú pre stav hry. Táto premenná bude sledovať aktuálny stav hry, napríklad či je aktívna ponuka štart alebo či je hra spustená. Túto premennú musíte pridať na začiatok kódu hry:

game_state = "ponuka Štart"

Ďalej pridáte funkciu na vykreslenie úvodnej ponuky na obrazovku. Na kreslenie textu, tlačidiel a iných prvkov na obrazovku môžete použiť funkcie PyGame.

defdraw_start_menu():
obrazovke.naplniť((0, 0, 0))
font = pygame.font. SysFont('arial', 40)
title = font.render('Moja hra', Pravda, (255, 255, 255))
start_button = font.render('Štart', Pravda, (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.zobraziť.aktualizovať()

Potom môžete pridať draw_start_menu() funkcie do hlavnej hernej slučky.

zatiaľ čoPravda: 

preudalosťvpygame.udalosť.dostať():
if event.type == pygame. UKONČIŤ:
pygame.prestať()
skončiť ()

ak game_state == "ponuka Štart":
draw_start_menu()

ak game_state == "hra":
keys = pygame.key.get_pressed()
# zvyšok kódu

Teraz sa na obrazovku zobrazí ponuka Štart. Posledným krokom je spracovanie vstupu používateľa. Môžeš pridajte príkaz if do hlavnej hernej slučky, aby ste skontrolovali, či používateľ stlačil tlačidlo štart.

ak game_state == "ponuka Štart":
keys = pygame.key.get_pressed()
akkľúče[pygame. K_SPACE]:
hráč_x = 200
hráč_y = 400
game_state = "hra"
game_over = Nepravdivé

S týmto kódom sa hra spustí, keď používateľ stlačí tlačidlo Štart.

Implementácia funkcie Game Over Screen

Teraz, keď máte ponuku Štart, poďme vytvoriť hru cez obrazovku. Táto funkcia by mala zobraziť konečné skóre a správu o ukončení hry.

defdraw_game_over_screen():
obrazovke.naplniť((0, 0, 0))
font = pygame.font. SysFont('arial', 40)
title = font.render('Koniec hry', Pravda, (255, 255, 255))
restart_button = font.render('R - Restart', Pravda, (255, 255, 255))
quit_button = font.render('Q - Quit', Pravda, (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 (tlačidlo_ukončiť, (šírka_obrazovky/2 - quit_button.get_width()/2, výška_obrazovky/2 + quit_button.get_height()/2))
pygame.zobraziť.aktualizovať()

Potom môžete túto funkciu pridať do hlavnej hernej slučky.

ak game_state == "ponuka Štart":
draw_start_menu()
ak game_state == "koniec hry":
draw_game_over_screen()

ak game_state == "hra":
keys = pygame.key.get_pressed()
akkľúče[pygame. K_LEFT]:
hráč_x -= 5
akkľúče[pygame. K_RIGHT]:
hráč_x += 5

ak hráč_x + šírka_hráča > prekážka_x a hráč_x < prekážka_x + prekážka_šírkaahráč_y + player_height > prekážka_y a hráč_y < prekážka_y + výška_prekážok:
game_over = Pravda
game_state = "koniec hry"

Nakoniec musíte spracovať vstup používateľa, aby ste zvládli výber používateľa. Do hlavnej slučky hry môžete pridať príkaz if, aby ste skontrolovali, či používateľ stlačil tlačidlo reštartu alebo ukončenia.

ak game_state == "ponuka Štart":
keys = pygame.key.get_pressed()
akkľúče[pygame. K_SPACE]:
game_state = "hra"
hráč_x = 200
hráč_y = 400
game_state = "hra"
game_over = Nepravdivé

ak game_state == "koniec hry":
keys = pygame.key.get_pressed()
akkľúče[pygame. K_r]:
game_state = "ponuka Štart"
akkľúče[pygame. K_q]:
pygame.prestať()
skončiť ()

S týmto kódom sa hra reštartuje, keď používateľ stlačí tlačidlo „R“ a ukončí sa, keď používateľ stlačí tlačidlo „Q“ na klávesnici.

Nižšie je uvedený úplný kód:

importovať pygame

pygame.init()
screen_width = 750
screen_height = 450
obrazovka = pygame.display.set_mode((šírka_obrazovky, výška_obrazovky))
prekážka_x = 400
prekážka_y = 400
šírka_prekážky = 40
výška_prekážky = 40
hráč_x = 200
hráč_y = 400
player_width = 20
player_height = 20
game_state = "ponuka Štart"

defdraw_start_menu():
obrazovke.naplniť((0, 0, 0))
font = pygame.font. SysFont('arial', 40)
title = font.render('Moja hra', Pravda, (255, 255, 255))
start_button = font.render('Štart', Pravda, (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.zobraziť.aktualizovať()

defdraw_game_over_screen():
obrazovke.naplniť((0, 0, 0))
font = pygame.font. SysFont('arial', 40)
title = font.render('Koniec hry', Pravda, (255, 255, 255))
restart_button = font.render('R - Restart', Pravda, (255, 255, 255))
quit_button = font.render('Q - Quit', Pravda, (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 (tlačidlo_ukončiť, (šírka_obrazovky/2 - quit_button.get_width()/2, výška_obrazovky/2 + quit_button.get_height()/2))
pygame.zobraziť.aktualizovať()

zatiaľ čoPravda:
preudalosťvpygame.udalosť.dostať():
if event.type == pygame. UKONČIŤ:
pygame.prestať()
skončiť ()
ak game_state == "ponuka Štart":
draw_start_menu()
keys = pygame.key.get_pressed()
akkľúče[pygame. K_SPACE]:
hráč_x = 200
hráč_y = 400
game_state = "hra"
game_over = Nepravdivé
elif game_state == "koniec hry":
draw_game_over_screen()
keys = pygame.key.get_pressed()
akkľúče[pygame. K_r]:
game_state = "ponuka Štart"
akkľúče[pygame. K_q]:
pygame.prestať()
skončiť ()

elif game_state == "hra":
keys = pygame.key.get_pressed()
akkľúče[pygame. K_LEFT]:
hráč_x -= 5
akkľúče[pygame. K_RIGHT]:
hráč_x += 5

ak hráč_x + šírka_hráča > prekážka_x a hráč_x < prekážka_x + prekážka_šírkaahráč_y + player_height > prekážka_y a hráč_y < prekážka_y + výška_prekážok:
game_over = Pravda
game_state = "koniec hry"

obrazovke.naplniť((0, 0, 0))
pygame.kresliť.rect(obrazovke, (255, 0, 0), (prekážka_x, prekážka_y, prekážka_šírka, prekážka_výška))
pygame.kresliť.rect(obrazovke, (0, 255, 0), (hráč_x, hráč_y, player_width, player_height))
pygame.zobraziť.aktualizovať()

elif koniec hry:
game_state = "koniec hry"
game_over = Nepravdivé

Kód začína importovaním pygame modul a jeho inicializácia. Potom vytvorí herné okno a deklaruje potrebné herné premenné vrátane pozície hráča a prekážky, rozmerov a stavu hry.

Kód definuje dve funkcie, draw_start_menu() a draw_game_over_screen(), na kreslenie úvodnej ponuky a hry cez obrazovku. Tieto funkcie využívajú funkcie PyGame na kreslenie textu a tlačidiel na obrazovku.

Hlavná herná slučka začína spracovaním udalostí a kontrolou stavu hry. Ak je stav hry ponuka Štart, na obrazovke sa zobrazí ponuka Štart. Ak je stav hry koniec hry, na obrazovke sa vykreslí obrazovka ukončenia hry. Ak je stav hry iný, hra sa aktualizuje a pritiahne hráča a prekážku na obrazovku.

Hra sa aktualizuje ovládaním stlačenia klávesov a kontrolou kolízie medzi hráčom a prekážkou. Ak dôjde ku kolízii, hra nastaví koniec hry vlajka do Pravda a nastaví stav hry na koniec hry.

Po aktualizácii hry sa na obrazovku vykreslí hráč a prekážka. Nakoniec kód skontroluje, či je koniec hry je nastavená vlajka, a ak je, resetuje vlajku a nastaví stav hry na koniec hry.

Tento proces sa neustále opakuje, kým sa herné okno nezavrie.

Zvýšte zapojenie používateľov pomocou vizuálne príťažlivého používateľského rozhrania

Použitie dobre navrhnutého používateľského rozhrania (UI) môže výrazne zvýšiť zapojenie používateľov do hry PyGame. Jasné a ľahko čitateľné písmo, vizuálne príťažlivá grafika, jednoduchá navigácia a spätná väzba od používateľov sú všetko dôležité prvky, ktoré treba zvážiť pri navrhovaní používateľského rozhrania. Implementáciou týchto prvkov môžete vytvoriť používateľské rozhranie, ktoré pomáha udržať záujem hráča a ponoriť sa do hry.

Nezabudnite otestovať svoje používateľské rozhranie a získať spätnú väzbu od hráčov, aby ste sa uistili, že je efektívne pri zvyšovaní angažovanosti. Celkovo možno povedať, že čas na vytvorenie silného používateľského rozhrania môže výrazne zlepšiť hráčsky zážitok a pôžitok z vašej hry.