Čtenáři jako vy pomáhají podporovat MUO. Když provedete nákup pomocí odkazů na našich stránkách, můžeme získat provizi přidružené společnosti. Přečtěte si více.

PyGame je oblíbená knihovna pro vytváření projektů v Pythonu a poskytuje výkonnou sadu nástrojů pro vývoj her. V tomto článku se dozvíte, jak vytvořit úvodní nabídku a hru přes obrazovku pro jednoduchou hru pomocí PyGame.

Vytvoření jednoduché hry

Než vytvoříte nabídku Start a hru přes obrazovku, udělejme nejprve jednoduchou hru. V této hře budete ovládat postavu pomocí šipek a snažit se vyhýbat překážkám. Chcete-li věci zjednodušit, nepoužívejte žádné obrázky.

Chcete-li začít, musíte importovat potřebné moduly. Budete používat pygame modul pro přístup k funkcím PyGame. Chcete-li nainstalovat modul, můžete použijte správce balíčků pip:

pip Nainstalujte pygame

Nyní, když je náš modul připraven k použití, pojďme vytvořit jednoduchou hru s hráčem, který se může pohybovat doleva nebo doprava pomocí kláves se šipkami a překážky. Pokud narazíte na překážku, hra skončí. Zde je kód pro totéž:

instagram viewer
import pygame
pygame.init()

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

překážka_x = 400
překážka_y = 400
šířka_ překážky = 40
výška_překážky = 40
hráč_x = 200
hráč_y = 400
player_width = 20
výška hráče = 20

zatímcoSkutečný:

proudálostvpygame.událost.dostat():

if event.type == pygame. PŘESTAT:
pygame.přestat()
přestat()


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


pokud hráč_x + šířka_hráče > překážka_x a hráč_x < překážka_x + šířka_ překážkyahráč_y + výška_hráče > překážka_y a hráč_y < překážka_y + překážka_výška:
game_over = Skutečný


obrazovka.vyplnit((0, 0, 0))
pygame.kreslit.rect(obrazovka, (255, 0, 0), (překážka_x, překážka_y, šířka_ překážky, překážka_výška))
pygame.kreslit.rect(obrazovka, (0, 255, 0), (hráč_x, hráč_y, player_width, výška_hráče))
pygame.Zobrazit.Aktualizace()

Ve výše uvedeném kódu nastavíte herní okno a deklarujete herní proměnné. Také jste zpracovávali uživatelský vstup a kreslili prvky na obrazovku.

Vytvoření nabídky Start

Nyní, když máte základní hru, pojďme vytvořit nabídku Start. Chcete-li to provést, budete muset deklarovat globální proměnnou pro stav hry. Tato proměnná bude sledovat aktuální stav hry, například zda je aktivní nabídka start nebo zda je hra spuštěna. Tuto proměnnou musíte přidat na začátek kódu hry:

game_state = "nabídka Start"

Dále přidáte funkci pro vykreslení nabídky Start na obrazovku. K kreslení textu, tlačítek a dalších prvků na obrazovku můžete použít funkce PyGame.

defdraw_start_menu():
obrazovka.vyplnit((0, 0, 0))
font = pygame.font. SysFont('arial', 40)
title = font.render('Moje hra', Skutečný, (255, 255, 255))
start_button = font.render('Start', Skutečný, (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.Zobrazit.Aktualizace()

Poté můžete přidat draw_start_menu() funkce do hlavní herní smyčky.

zatímcoSkutečný: 

proudálostvpygame.událost.dostat():
if event.type == pygame. PŘESTAT:
pygame.přestat()
přestat()

-li game_state == "nabídka Start":
draw_start_menu()

-li game_state == "hra":
keys = pygame.key.get_pressed()
# zbytek kódu

Nyní se na obrazovku zobrazí nabídka Start. Posledním krokem je zpracování uživatelského vstupu. Můžeš přidat příkaz if do hlavní herní smyčky a zkontrolujte, zda uživatel stiskl tlačítko start.

-li game_state == "nabídka Start":
keys = pygame.key.get_pressed()
-liklíče[pygame. K_SPACE]:
hráč_x = 200
hráč_y = 400
game_state = "hra"
game_over = Nepravdivé

S tímto kódem se hra spustí, když uživatel stiskne tlačítko Start.

Implementace Game Over Screen

Nyní, když máte nabídku Start, pojďme vytvořit hru přes obrazovku. Tato funkce by měla zobrazit konečné skóre a zprávu o konci hry.

defdraw_game_over_screen():
obrazovka.vyplnit((0, 0, 0))
font = pygame.font. SysFont('arial', 40)
title = font.render('Konec hry', Skutečný, (255, 255, 255))
restart_button = font.render('R - Restart', Skutečný, (255, 255, 255))
quit_button = font.render('Q - Quit', Skutečný, (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 (quit_button, (screen_width/2 - quit_button.get_width()/2, screen_height/2 + quit_button.get_height()/2))
pygame.Zobrazit.Aktualizace()

Tuto funkci pak můžete přidat do hlavní herní smyčky.

-li game_state == "nabídka Start":
draw_start_menu()
-li game_state == "konec hry":
draw_game_over_screen()

-li game_state == "hra":
keys = pygame.key.get_pressed()
-liklíče[pygame. K_LEFT]:
hráč_x -= 5
-liklíče[pygame. K_RIGHT]:
hráč_x += 5

pokud hráč_x + šířka_hráče > překážka_x a hráč_x < překážka_x + šířka_ překážkyahráč_y + výška_hráče > překážka_y a hráč_y < překážka_y + překážka_výška:
game_over = Skutečný
game_state = "konec hry"

Nakonec musíte zpracovat uživatelský vstup, abyste zvládli volbu uživatele. Do hlavní herní smyčky můžete přidat příkaz if a zkontrolovat, zda uživatel stiskl tlačítko restartování nebo ukončení.

-li game_state == "nabídka Start":
keys = pygame.key.get_pressed()
-liklíče[pygame. K_SPACE]:
game_state = "hra"
hráč_x = 200
hráč_y = 400
game_state = "hra"
game_over = Nepravdivé

-li game_state == "konec hry":
keys = pygame.key.get_pressed()
-liklíče[pygame. K_r]:
game_state = "nabídka Start"
-liklíče[pygame. K_q]:
pygame.přestat()
přestat()

S tímto kódem se hra restartuje, když uživatel stiskne tlačítko 'R', a ukončí se, když uživatel stiskne tlačítko 'Q' na klávesnici.

Níže je celý kód:

import pygame

pygame.init()
screen_width = 750
screen_height = 450
obrazovka = pygame.display.set_mode((šířka_obrazovky, výška_obrazovky))
překážka_x = 400
překážka_y = 400
šířka_ překážky = 40
výška_překážky = 40
hráč_x = 200
hráč_y = 400
player_width = 20
výška hráče = 20
game_state = "nabídka Start"

defdraw_start_menu():
obrazovka.vyplnit((0, 0, 0))
font = pygame.font. SysFont('arial', 40)
title = font.render('Moje hra', Skutečný, (255, 255, 255))
start_button = font.render('Start', Skutečný, (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.Zobrazit.Aktualizace()

defdraw_game_over_screen():
obrazovka.vyplnit((0, 0, 0))
font = pygame.font. SysFont('arial', 40)
title = font.render('Konec hry', Skutečný, (255, 255, 255))
restart_button = font.render('R - Restart', Skutečný, (255, 255, 255))
quit_button = font.render('Q - Quit', Skutečný, (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 (quit_button, (screen_width/2 - quit_button.get_width()/2, screen_height/2 + quit_button.get_height()/2))
pygame.Zobrazit.Aktualizace()

zatímcoSkutečný:
proudálostvpygame.událost.dostat():
if event.type == pygame. PŘESTAT:
pygame.přestat()
přestat()
-li game_state == "nabídka Start":
draw_start_menu()
keys = pygame.key.get_pressed()
-liklíče[pygame. K_SPACE]:
hráč_x = 200
hráč_y = 400
game_state = "hra"
game_over = Nepravdivé
elif game_state == "konec hry":
draw_game_over_screen()
keys = pygame.key.get_pressed()
-liklíče[pygame. K_r]:
game_state = "nabídka Start"
-liklíče[pygame. K_q]:
pygame.přestat()
přestat()

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

pokud hráč_x + šířka_hráče > překážka_x a hráč_x < překážka_x + šířka_ překážkyahráč_y + výška_hráče > překážka_y a hráč_y < překážka_y + překážka_výška:
game_over = Skutečný
game_state = "konec hry"

obrazovka.vyplnit((0, 0, 0))
pygame.kreslit.rect(obrazovka, (255, 0, 0), (překážka_x, překážka_y, šířka_ překážky, překážka_výška))
pygame.kreslit.rect(obrazovka, (0, 255, 0), (hráč_x, hráč_y, player_width, výška_hráče))
pygame.Zobrazit.Aktualizace()

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

Kód začíná importem pygame modulu a jeho inicializaci. Poté vytvoří herní okno a deklaruje potřebné herní proměnné, včetně pozice hráče a překážky, dimenze a stavu hry.

Kód definuje dvě funkce, draw_start_menu() a draw_game_over_screen(), pro vykreslení nabídky Start a hry přes obrazovku. Tyto funkce využívají funkce PyGame ke kreslení textu a tlačítek na obrazovku.

Hlavní herní smyčka začíná zpracováním událostí a kontrolou stavu hry. Pokud je stav hry nabídka Start, na obrazovce se zobrazí nabídka Start. Pokud je stav hry konec hry, překryvná obrazovka se vykreslí na obrazovku. Pokud je stav hry jiný, hra se aktualizuje a přitáhne hráče a překážku na obrazovku.

Hra se aktualizuje zpracováním stisknutí kláves a kontrolou, zda nedošlo ke kolizi mezi hráčem a překážkou. Pokud dojde ke kolizi, hra nastaví konec hry vlajka do Skutečný a nastaví stav hry na konec hry.

Po aktualizaci hry se hráč a překážka zobrazí na obrazovce. Nakonec kód zkontroluje, zda konec hry je nastaven příznak, a pokud je, resetuje příznak a nastaví stav hry na konec hry.

Tento proces se neustále opakuje, dokud se herní okno nezavře.

Zvyšte zapojení uživatelů pomocí vizuálně přitažlivého uživatelského rozhraní

Použití dobře navrženého uživatelského rozhraní (UI) může výrazně zvýšit zapojení uživatelů do hry PyGame. Jasné a snadno čitelné písmo, vizuálně přitažlivá grafika, snadná navigace a zpětná vazba od uživatelů jsou důležité prvky, které je třeba vzít v úvahu při navrhování uživatelského rozhraní. Implementací těchto prvků můžete vytvořit uživatelské rozhraní, které pomůže udržet hráče v zájmu a ponoření do hry.

Nezapomeňte otestovat své uživatelské rozhraní a získat zpětnou vazbu od hráčů, abyste se ujistili, že je efektivní při zvyšování zapojení. Celkově vzato, věnovat čas vytvoření silného uživatelského rozhraní může výrazně zlepšit zážitek hráče a požitek z vaší hry.