logo

Jak vyvinout hru v Pythonu

Nejpřizpůsobivějším jazykem je Python, který se používá téměř v každém odvětví, včetně vývoje her, vývoje webu, strojového učení, umělé inteligence a GUI aplikací.

Hra je vyvíjena pomocí balíčku pygame, který je vestavěnou funkcí Pythonu. Díky základní znalosti programování v Pythonu můžeme s využitím modulu pygame vytvářet vizuálně přitažlivé hry s vhodnou animací, zvukovými efekty a hudbou.

K vytváření videoher se používá multiplatformní knihovna s názvem Pygame. Má zvukové knihovny a počítačové vizuální prvky, které hráči poskytují typický herní zážitek.

Pete Shinners jej vyvíjí, aby nahradil PySDL.

Předpoklady pro Pygame

Abychom se naučili Pygame, musíme porozumět programovacímu jazyku Python.

řetězec na char java

Instalace Pygame

Chcete-li nainstalovat Pygame, otevřete terminál příkazového řádku a zadejte následující příkaz.

 pip install pygame 

Můžeme jej nainstalovat i přes IDE. Další instalační průvodce naleznete v našem kompletním tutoriálu pygame ( https://www.javatpoint.com/pygame ). Zde najdete všechna základní pygame vysvětlení.

Jednoduchý příklad Pygame

Zde je následující příklad vytvoření jednoduchého okna pygame.

algoritmus řazení haldy
 import pygame pygame.init() screen = pygame.display.set_mode((400,500)) done = False while not done: for event in pygame.event.get(): if event.type == pygame.QUIT: done = True pygame.display.flip() 

Výstup:

Jak vyvinout hru v Pythonu

Vysvětlení:

Dodaný kód otevře okno Pygame 400x500 pixelů a spustí smyčku, která neustále sleduje události. Cyklus změní proměnnou 'done' na True, což ukončí cyklus a ukončí program, pokud je detekována událost QUIT (obvykle když uživatel opustí okno). Aktualizuje zobrazení a zajistí, aby se všechny změny zobrazily na obrazovce pomocí metody 'pygame.display.flip()'. Stručně řečeno, kód vygeneruje malé okno Pygame, které zůstane aktivní, dokud ho uživatel nezavře, a zobrazí základní strukturu programu, která je řízena událostmi.

Veškerá grafika se vykreslí v okně pygame.

Pojďme pochopit základní syntaxi výše uvedeného programu.

    import pygame:Je to modul, který nám umožňuje přístup ke všem funkcím Pygame.teplo():Používá se k inicializaci každého z nezbytných modulů pygame.display.set_mode((šířka, výška)):Slouží k nastavení velikosti okna. Vrátí předmět na povrchu. Grafické akce se provádějí prostřednictvím objektu povrchu.event.get():Výsledkem je prázdná fronta událostí. Pokud to nezavoláme, operační systém bude hru vnímat jako nereagující a zprávy v okně se začnou hromadit.PŘESTAT:Když klikneme na tlačítko křížku v rohu okna, použije se k odmítnutí události.display.flip():Veškeré aktualizace hry se v ní projeví. Kdykoli provedeme nějaké změny, musíme kontaktovat displej. flip() je funkce.

Na povrch Pygame lze nakreslit jakoukoli formu, včetně krásných písem a obrázků. Četné vestavěné metody v Pygame umožňují kreslit geometrické tvary na obrazovku. Tyto formuláře představují první kroky při vytváření hry.

Podívejme se na následující ilustraci formuláře vykreslovaného na obrazovce.

číst soubory json

Příklad -

volání funkce javascript z html
 import pygame from math import pi pygame.init() # size variable is using for set screen size size = [400, 300] screen = pygame.display.set_mode(size) pygame.display.set_caption('Example program to draw geometry') # done variable is using as flag done = False clock = pygame.time.Clock() while not done: # clock.tick() limits the while loop to a max of 10 times per second. clock.tick(10) for event in pygame.event.get(): # User did something if event.type == pygame.QUIT: # If user clicked on close symbol done = True # done variable that we are complete, so we exit this loop # All drawing code occurs after the for loop and but # inside the main while done==False loop. # Clear the default screen background and set the white screen background screen.fill((0, 0, 0)) # Draw on the screen a green line which is 5 pixels wide. pygame.draw.line(screen, (0, 255, 0), [0, 0], [50, 30], 5) # Draw on the screen a green line which is 5 pixels wide. pygame.draw.lines(screen, (0, 0, 0), False, [[0, 80], [50, 90], [200, 80], [220, 30]], 5) # Draw a rectangle outline pygame.draw.rect(screen, (0, 0, 0), [75, 10, 50, 20], 2) # Draw a solid rectangle pygame.draw.rect(screen, (0, 0, 0), [150, 10, 50, 20]) # This draw an ellipse outline, using a rectangle as the outside boundaries pygame.draw.ellipse(screen, (255, 0, 0), [225, 10, 50, 20], 2) # This draw a solid ellipse, using a rectangle as the outside boundaries pygame.draw.ellipse(screen, (255, 0, 0), [300, 10, 50, 20]) # Draw a triangle using the polygon function pygame.draw.polygon(screen, (0, 0, 0), [[100, 100], [0, 200], [200, 200]], 5) # This draw a circle pygame.draw.circle(screen, (0, 0, 255), [60, 250], 40) # This draw an arc pygame.draw.arc(screen, (0, 0, 0), [210, 75, 150, 125], 0, pi / 2, 2) # This function must write after all the other drawing commands. pygame.display.flip() # Quite the execution when clicking on close pygame.quit() 

Výstup:

Jak vyvinout hru v Pythonu

Vysvětlení:

Daný program Python vytvoří pomocí balíku Pygame grafické okno s různými geometrickými tvary nakreslenými v něm. Program vytvoří okno Pygame o rozměrech 400 x 300 pixelů a poté spustí smyčku, která neustále sleduje události a zajišťuje, že okno zůstane otevřené, dokud jej uživatel neopustí. Na začátku této smyčky vyčistí obrazovku a poté použije kreslicí rutiny Pygame k vytvoření různých forem s různými barvami a šířkami čar. Tyto tvary zahrnují čáry, mnohoúhelníky, elipsy, kruhy a oblouky. Každý formulář má definované vlastní souřadnice a vlastnosti. Nakonec se k obnovení zobrazení používá 'pygame.display.flip()'. Program ukončí pygame po zavření okna.

Aplikace slouží jako příklad adaptability a rozmanitosti kreslicích schopností Pygame a poskytuje rámec pro vývoj interaktivních grafických aplikací. Vývojáři mohou vytvářet širokou škálu vizuálních komponent v grafickém prostředí Pygame úpravou parametrů, jako jsou souřadnice, barvy a šířky čar. To umožňuje konstrukci interaktivních multimediálních aplikací, her a simulací.

Příklad - Vývoj hry Snake pomocí Pygame

Program -

 # Snake Tutorial Using Pygame import math import random import pygame import tkinter as tk from tkinter import messagebox class cube(object): rows = 20 w = 500 def __init__(self, start, dirnx=1, dirny=0, color=(255, 0, 0)): self.pos = start self.dirnx = 1 self.dirny = 0 self.color = color def move(self, dirnx, dirny): self.dirnx = dirnx self.dirny = dirny self.pos = (self.pos[0] + self.dirnx, self.pos[1] + self.dirny) def draw(self, surface, eyes=False): dis = self.w // self.rows i = self.pos[0] j = self.pos[1] pygame.draw.rect(surface, self.color, (i * dis + 1, j * dis + 1, dis - 2, dis - 2)) if eyes: centre = dis // 2 radius = 3 circleMiddle = (i * dis + centre - radius, j * dis + 8) circleMiddle2 = (i * dis + dis - radius * 2, j * dis + 8) pygame.draw.circle(surface, (0, 0, 0), circleMiddle, radius) pygame.draw.circle(surface, (0, 0, 0), circleMiddle2, radius) # This class is defined for snake design and its movement class snake(object): body = [] turns = {} def __init__(self, color, pos): self.color = color self.head = cube(pos) self.body.append(self.head) self.dirnx = 0 self.dirny = 1 def move(self): for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() keys = pygame.key.get_pressed() # It will manage the keys movement for the snake for key in keys: if keys[pygame.K_LEFT]: self.dirnx = -1 self.dirny = 0 self.turns[self.head.pos[:]] = [self.dirnx, self.dirny] elif keys[pygame.K_RIGHT]: self.dirnx = 1 self.dirny = 0 self.turns[self.head.pos[:]] = [self.dirnx, self.dirny] elif keys[pygame.K_UP]: self.dirnx = 0 self.dirny = -1 self.turns[self.head.pos[:]] = [self.dirnx, self.dirny] elif keys[pygame.K_DOWN]: self.dirnx = 0 self.dirny = 1 self.turns[self.head.pos[:]] = [self.dirnx, self.dirny] # Snake when hit the boundary wall for i, c in enumerate(self.body): p = c.pos[:] if p in self.turns: turn = self.turns[p] c.move(turn[0], turn[1]) if i == len(self.body) - 1: self.turns.pop(p) else: if c.dirnx == -1 and c.pos[0] = c.rows - 1: c.pos = (0, c.pos[1]) elif c.dirny == 1 and c.pos[1] &gt;= c.rows - 1: c.pos = (c.pos[0], 0) elif c.dirny == -1 and c.pos[1] <= 0 1 0: c.pos="(c.pos[0]," c.rows - 1) else: c.move(c.dirnx, c.dirny) def reset(self, pos): self.head="cube(pos)" self.body="[]" self.body.append(self.head) self.turns="{}" self.dirnx="0" self.dirny="1" # it will add the new cube in snake tail after every successful score addcube(self): dx, dy="tail.dirnx," tail.dirny if dx="=" and self.body.append(cube((tail.pos[0] 1, tail.pos[1]))) elif -1 + 1: self.body.append(cube((tail.pos[0], tail.pos[1] 1))) -1: self.body[-1].dirnx="dx" self.body[-1].dirny="dy" draw(self, surface): for i, c enumerate(self.body): i="=" c.draw(surface, true) c.draw(surface) drawgrid(w, rows, sizebtwn="w" rows x="0" y="0" l range(rows): draw grid line pygame.draw.line(surface, (255, 255, 255), (x, 0), w)) (0, y), (w, y)) this class define game surface redrawwindow(surface): global width, s, snack is used to surface.fill((0, 0, 0)) s.draw(surface) snack.draw(surface) drawgrid(width, surface) pygame.display.update() randomsnack(rows, item): positions="item.body" while true: len(list(filter(lambda z: z.pos="=" positions)))> 0: continue else: break return (x, y) # Using Tkinter function to display message def message_box(subject, content): root = tk.Tk() root.attributes(&apos;-topmost&apos;, True) root.withdraw() messagebox.showinfo(subject, content) try: root.destroy() except: pass # main() function def main(): global width, rows, s, snack width = 500 rows = 20 win = pygame.display.set_mode((width, width)) s = snake((255, 0, 0), (10, 10)) snack = cube(randomSnack(rows, s), color=(0, 255, 0)) flag = True clock = pygame.time.Clock() while flag: pygame.time.delay(50) clock.tick(10) s.move() if s.body[0].pos == snack.pos: s.addCube() snack = cube(randomSnack(rows, s), color=(0, 255, 0)) for x in range(len(s.body)): if s.body[x].pos in list(map(lambda z: z.pos, s.body[x + 1:])): print(&apos;Score: 
&apos;, len(s.body)) message_box(&apos;You Lost!
&apos;, &apos;Play again...
&apos;) s.reset((10, 10)) break redrawWindow(win) pass main() </=>

Výstup:

Jak vyvinout hru v Pythonu

Pokud se had dotkne sám sebe, ukončí hru a zobrazí následující zprávu.

bash elf
Jak vyvinout hru v Pythonu

Chcete-li pokračovat, jednoduše klikněte na tlačítko OK. Terminál Pycharm zobrazuje naše skóre (použili jsme Pycharm IDE, ale můžete použít jakékoliv Python IDE).

Jak vyvinout hru v Pythonu

Vysvětlení:

Poskytnutý skript Python používá balíček Pygame k vytvoření jednoduché hry Snake. Zavádí třídy jak pro hada, tak pro samostatné kostky, které tvoří jeho tělo. Pygame se používá k nastavení herního okna, které obsahuje mřížkovou strukturu a pohybujícího se hada. Po snězení kostky „svačiny“ se had prodlouží, a pokud narazí do sebe nebo do hraničních zdí, hra je u konce.

Aby bylo možné řídit směr hada, generovat občerstvení v náhodných bodech na mřížce, detekovat kolize mezi hlavou a tělem hada, aktualizovat stav hry a překreslovat herní okno, musí herní logika zvládnout zadání uživatele. K ovládání herních interakcí a vizuálních aktualizací využívá skript metody zpracování událostí a kreslení Pygame. Má také základní funkci schránky zpráv, která používá Tkinter k zobrazení zpráv hráčům, například když prohraje hru. Celkově scénář ukazuje klíčové myšlenky v programování her Pygame a nabízí základní ztvárnění staré hry Snake.