Witam! Podczas tworzenia gry napotkałem 2 problemy.
- Postać po naciśnięciu klawisza page up lub page down brnie w jednym kierunku. Można go skierować w drugą stronę, jednak jest to za trudne, bo postać porusza się zbyt szybko, aby ją opanować. Chciałbym, aby postać poruszała się tak długo, jak przyciska się dany klawisz.
- Punkty są zbierane nie poprzez ruch postaci w prawo, lecz gdy postać poruszy się w górę lub w dół. Zanim dodałem kolejne wiersze w programie, działało to porwane.
Z góry dziękuję za pomoc!
import pygame
import os
import random
import math
pygame.init()
szer = 800
wys = 600
screen = pygame.display.set_mode((szer,wys))
def napisz(tekst, x, y, rozmiar):
cz = pygame.font.SysFont ("Arial", rozmiar)
rend = cz.render(tekst, 1, (0,148,255))
screen.blit(rend, (x,y))
copokazuje = "menu"
class Przeszkoda():
def __init__(self, x, szerokosc):
self.x = x
self.szerokosc = szerokosc
self.y_gora = 0
self.wys_gora = random.randint(150,250)
self.odstep = 200
self.y_dol = self.wys_gora + self.odstep
self.wys_dol = wys - self.y_dol
self.kolor = (127, 51, 0)
self.ksztalt_gora = pygame.Rect(self.x, self.y_gora, self.szerokosc, self.wys_gora)
self.ksztalt_dol = pygame.Rect(self.x, self.y_dol, self.szerokosc, self.wys_dol)
def rysuj(self):
pygame.draw.rect(screen, self.kolor, self.ksztalt_gora, 0)
pygame.draw.rect(screen, self.kolor, self.ksztalt_dol, 0)
def ruch(self, v):
self.x = self.x - v
self.ksztalt_gora = pygame.Rect(self.x, self.y_gora, self.szerokosc, self.wys_gora)
self.ksztalt_dol = pygame.Rect(self.x, self.y_dol, self.szerokosc, self.wys_dol)
def kolizja(self, player):
if self.ksztalt_gora.colliderect(player) or self.ksztalt_dol.colliderect(player):
return True
else:
return False
class Mis():
def __init__(self, x, y):
self.x = y
self.y = y
self.wysokosc = 42
self.szerokosc = 100
self.ksztalt = pygame.Rect(self.x, self.y, self.szerokosc, self.wysokosc)
self.grafika = pygame.image.load(os.path.join('panmisio.png'))
def rysuj (self):
screen.blit(self.grafika, (self.x,self.y))
def ruch(self, v):
self.y = self.y + v
self.ksztalt = pygame.Rect(self.x, self.y, self.szerokosc, self.wysokosc)
przeszkody = []
for i in range(21):
przeszkody.append(Przeszkoda(i*szer/20,szer/20))
gracz = Mis(250,275)
dy = 0
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
dy = -1
if event.key == pygame.K_DOWN:
dy = 1
if event.key == pygame.K_SPACE:
if copokazuje != "rozgrywka":
gracz = Mis(250,275)
dy = 0
copokazuje = "rozgrywka"
punkty = 0
screen.fill((76,30,0))
if copokazuje == "menu":
napisz("Naciśnij spację, aby rozpocząć grę", 150, 400, 30)
grafika = pygame.image.load(os.path.join('tytuł1.png'))
screen.blit(grafika, (0,50))
elif copokazuje == "rozgrywka":
for p in przeszkody:
p.ruch(1)
p.rysuj()
if p.kolizja(gracz.ksztalt):
copokazuje = "koniec"
for p in przeszkody:
if p.x <= -p.szerokosc:
przeszkody.remove(p)
przeszkody.append((Przeszkoda(szer,szer/20)))
punkty = punkty + math.fabs(dy)
gracz.rysuj()
gracz.ruch(dy)
napisz(str(punkty), 700, 30,40)
elif copokazuje == "koniec":
grafika = pygame.image.load(os.path.join('koniec.png'))
screen.blit(grafika, (0,50))
napisz("Naciśnij spację, aby zagrać jeszcze raz", 150, 500, 30)
napisz("Twój wynik: " + str(punkty), 150, 300,40)
pygame.display.update()