• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Komenda screem.fill() nie odswieza obecnego ekranu.

Object Storage Arubacloud
0 głosów
106 wizyt
pytanie zadane 13 sierpnia 2019 w Python przez pZkaaa Nowicjusz (120 p.)

Witam, robie gierke w pygame I natrafilem na pewien problem. Komenda screen.fill() nie niszczy obecnych obiektow na ekranie. Dochodzi do sytuacji w ktorej po przegranej gierce(kolizji z przeciwnikiem) jak klikam spacje, ktora powinna resetowac cala gre, natychmiast przegrywam bo przeciez gracz jest w kolizji z przeciwnikiem.

import os
import random
import pygame

pygame.init()
pygame.display.set_caption('Biedronkaaa')
screen = pygame.display.set_mode((500, 500))
# background_menu = pygame.image.load("tlo-menu.jpg")
# background_game = pygame.image.load("tlo-gra.jpg")


def write(text, x, y, size):
    cz = pygame.font.SysFont("Arial", size)
    text = cz.render(text, 1, (204, 0, 0))
    screen.blit(text, (x, y))


class Biedronki():

    def __init__(self):
        self.x = random.randint(10, 100)
        self.y = random.randint(10, 100)
        self.vx = random.randint(-4, 4)
        self.vy = random.randint(-4, 4)
        self.graphic = pygame.image.load(os.path.join('biedrona.png'))
        self.size = 24

    def draw(self):
        screen.blit(self.graphic, (self.x, self.y))

    def moves(self):
        self.x += self.vx
        self.y += self.vy
        if self.x <= 0 or self.x >= 500 - self.size:
            self.vx = self.vx * -1
        if self.y <= 0 or self.y >= 500 - self.size:
            self.vy = self.vy * -1

    def collision(self, player):
        x_srodek = self.x + self.size / 2
        y_srodek = self.y + self.size / 2
        if player.collidepoint(x_srodek, y_srodek):
            return True
        else:
            return False


enemies = []
for i in range(20):
    enemies.append(Biedronki())

x_player = 450
y_player = 450
v = 20
player = pygame.Rect(x_player, y_player, 32, 32)
graphic_player = pygame.image.load(os.path.join('gracz.png'))

game = "menu"
points = 0

# mainloop
while True:
    screen.fill((0,0,0))
    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:
                if y_player - v > 0:
                    y_player -= v
            if event.key == pygame.K_DOWN:
                if y_player + v < 500 - 32:
                    y_player += v
            if event.key == pygame.K_RIGHT:
                if x_player + v < 500 - 32:
                    x_player += v
            if event.key == pygame.K_LEFT:
                if x_player - v > 0:
                    x_player -= v
            if event.key == pygame.K_SPACE:
                if game != "contest":
                    screen.blit(graphic_player, (x_player, y_player))
                    game = 'contest'
                    points = 0
            player = pygame.Rect(x_player, y_player, 32, 32)


    if game == "menu":
        screen.fill((50,50,50))
        write("Press space to run", 140, 250, 20)
    elif game == "contest":
        points += 1
        screen.fill((50, 50, 50))
        for biedroneczka in enemies:
            biedroneczka.moves()
            biedroneczka.draw()
            if biedroneczka.collision(player):
                game = "end"


        screen.blit(graphic_player, (x_player, y_player))
        write(str(points), 30, 30, 20)
        pygame.time.wait(15)


    elif game == "end":
        write("Niestety przegrywasz", 50, 290, 20)
        write("Aby zagrać ponownie, zrestartuj gre :)", 50, 350, 20)
        write("Twój wynik to: " + str(points), 50, 320, 20)
    pygame.display.update()

 

1 odpowiedź

+1 głos
odpowiedź 13 sierpnia 2019 przez Mr-root Gaduła (3,750 p.)

Cześć.

Zmieniłem lekko Twój kod tak aby po kliknięciu spacji od nowa tworzył przeciwników i przenosił gracza do pozycji początkowej [84 - 89] oraz [47]. 

import os
import random
import pygame

pygame.init()
pygame.display.set_caption('Biedronkaaa')
screen = pygame.display.set_mode((500, 500))
# background_menu = pygame.image.load("tlo-menu.jpg")
# background_game = pygame.image.load("tlo-gra.jpg")


def write(text, x, y, size):
	cz = pygame.font.SysFont("Arial", size)
	text = cz.render(text, 1, (204, 0, 0))
	screen.blit(text, (x, y))


class Biedronki():
	def __init__(self):
		self.x = random.randint(10, 100)
		self.y = random.randint(10, 100)
		self.vx = random.randint(-4, 4)
		self.vy = random.randint(-4, 4)
		self.graphic = pygame.image.load(os.path.join('biedrona.png'))
		self.size = 24

	def draw(self):
		screen.blit(self.graphic, (self.x, self.y))

	def moves(self):
		self.x += self.vx
		self.y += self.vy
		if self.x <= 0 or self.x >= 500 - self.size:
			self.vx = self.vx * -1
		if self.y <= 0 or self.y >= 500 - self.size:
			self.vy = self.vy * -1

	def collision(self, player):
		x_srodek = self.x + self.size / 2
		y_srodek = self.y + self.size / 2
		if player.collidepoint(x_srodek, y_srodek):
			return True
		else:
			return False


enemies = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]


x_player = 450
y_player = 450
v = 20
player = pygame.Rect(x_player, y_player, 32, 32)
graphic_player = pygame.image.load(os.path.join('gracz.png'))

game = "menu"
points = 0

# mainloop
while True:
	screen.fill((0,0,0))
	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:
				if y_player - v > 0:
					y_player -= v
			if event.key == pygame.K_DOWN:
				if y_player + v < 500 - 32:
					y_player += v
			if event.key == pygame.K_RIGHT:
				if x_player + v < 500 - 32:
					x_player += v
			if event.key == pygame.K_LEFT:
				if x_player - v > 0:
					x_player -= v
			if event.key == pygame.K_SPACE:
				if game != "contest":
					screen.blit(graphic_player, (x_player, y_player))
					game = 'contest'
					points = 0
					x_player = 450
					y_player = 450
					for _ in range(20):
						enemies.pop(0)
					for _ in range(20):
						enemies.append(Biedronki())
			player = pygame.Rect(x_player, y_player, 32, 32)


	if game == "menu":
		screen.fill((50,50,50))
		write("Press space to run", 140, 250, 20)
	elif game == "contest":
		points += 1
		screen.fill((50, 50, 50))
		for biedroneczka in enemies:
			biedroneczka.moves()
			biedroneczka.draw()
			if biedroneczka.collision(player):
				game = "end"


		screen.blit(graphic_player, (x_player, y_player))
		write(str(points), 30, 30, 20)
		pygame.time.wait(15)


	elif game == "end":
		write("Niestety przegrywasz", 50, 290, 20)
		write("Aby zagrać ponownie, zrestartuj gre :)", 50, 350, 20)
		write("Twój wynik to: " + str(points), 50, 320, 20)
	pygame.display.update()

Mam nadzieję, że pomogłem

Mr Root

komentarz 13 sierpnia 2019 przez pZkaaa Nowicjusz (120 p.)
Dziękuje bardzo. Temat do zamkniecia

Podobne pytania

0 głosów
0 odpowiedzi 57 wizyt
pytanie zadane 4 sierpnia 2023 w Python przez Kubas23 Użytkownik (630 p.)
0 głosów
0 odpowiedzi 280 wizyt
pytanie zadane 29 stycznia 2023 w Python przez Kubas23 Użytkownik (630 p.)
0 głosów
1 odpowiedź 451 wizyt
pytanie zadane 17 grudnia 2022 w Python przez Kubas23 Użytkownik (630 p.)

92,554 zapytań

141,399 odpowiedzi

319,536 komentarzy

61,938 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...