Pygame
Conditions d’achèvement
3. Pygame hra
3.2. Skákanie
Udalosť na ohraničenie pohybu ku krajom obrazovky
while spustena:
#...
if klávesy[pygame.K_LEFT] and x > posun:
x -= posun
if klávesy[pygame.K_RIGHT] and x < 500 - posun - sirka:
x += posun
if klávesy[pygame.K_UP] and y > posun:
y -= posun
if klávesy[pygame.K_DOWN] and y < 500 - height - vyska:
y += posun
#...
Skákanie
vytvoríme nové premenné, ktoré budú uchovávať stav, či sme vo výskoku a o koľko vyskočíme. Premenné vytvoríme mimo hernej slučky.
V hernej slucke upravime podmienky s pohybom
while spustena:
#...x,y,sirka, vyska, posun
jeVoVyskoku = False
skokPocet = 10
while spustena:
#...
if klavesy[pygame.K_LEFT] and x > posun:
x -= posun
if klavesy[pygame.K_RIGHT] and x < 500 - posun - sirka:
x += posun
if not(jeVoVyskoku):
if klavesy[pygame.K_UP] and y > posun:
y -= posun
if klavesy[pygame.K_DOWN] and y < 500 - vyska - posun:
y += posun
if klavesy[pygame.K_SPACE]:
jeVoVyskoku = True
else:
# co sa stane ked skaceme
Do časti else pridáme, čo sa stane, keď skáčeme
else:
if skokPocet >= -10:
y -= (skokPocet * abs(skokPocet)) * 0.5
skokPocet -= 1
else:
skokPocet = 10
jeVoVyskoku = False
Celý kód:
import pygame
pygame.init()
okno = pygame.display.set_mode((500,500))
pygame.display.set_caption("Prvá hra")
x = 50
y = 50
sirka = 40
vyska = 60
posun = 5
jeVoVyskoku = False
skokPocet = 10
spustena = True
while spustena:
pygame.time.delay(100)
for event in pygame.event.get():
if event.type == pygame.QUIT:
spustena = False
klávesy = pygame.key.get_pressed()
if klávesy[pygame.K_LEFT] and x > posun: :
x -= posun
if klávesy[pygame.K_RIGHT] and x < 500 - posun - sirka: :
x += posun
if not(jeVoVyskoku):
if klávesy[pygame.K_UP] and y > posun:
y -= posun
if klávesy[pygame.K_DOWN] and y < 500 - vyska - posun:
y += posun
if klávesy[pygame.K_SPACE]:
jeVoVyskoku = True
else:
if skokPocet >= -10:
y -= (skokPocet * abs(skokPocet)) * 0.5
skokPocet -= 1
else:
skokPocet = 10
jeVoVyskoku = False
okno.fill((0,0,0))
pygame.draw.rect(okno, (255,0,0), (x, y, width, height))
pygame.display.update()
pygame.quit()