Форум сайта python.su
смысл в том, чтобы уворачиваться от красных квадратиков. Но я смог сделать только один.
подскажите как их количество увеличить.
import pygame from random import randrange WIDTH, HEIGHT = 1400, 700 fps = 60 # fly settings fly_w = 20 fly_h = 20 fly_speed = 15 fly = pygame.Rect(WIDTH//2 - fly_w // 2, HEIGHT - fly_h - 10, fly_w, fly_h) # spider settings spider_wh = 20 spider_speed = 6 sc = pygame.display.set_mode((WIDTH, HEIGHT)) clock = pygame.time.Clock() # images img = pygame.image.load('1.jpg').convert() img2 = pygame.image.load('2.jpg').convert() # colors aqua = (0, 255, 255) # морская волна black = (0, 0, 0) # черный blue = (0, 0, 255) # синий fuchsia = (255, 0, 255) # фуксия gray = (128, 128, 128) # серый green = (0, 128, 0) # зеленый lime = (0, 255, 0) # цвет лайма maroon = (128, 0, 0) # темно-бордовый navy_blue = (0, 0, 128) # темно-синий olive = (128, 128, 0) # оливковый purple = (128, 0, 128) # фиолетовый red = (255, 0, 0) # красный silver = (192, 192, 192) # серебряный teal = (0, 128, 128) # зелено-голубой white = (255, 255, 255) # белый yellow = (255, 255, 0) # желтый def keys(c): pygame.font.init() pygame.display.flip() # sc.fill(pygame.Color('blue')) p1 = pygame.font.SysFont('Arial', 30) text1 = p1.render('press f to pay respect', True, white) sc.blit(text1, (10, 60)) p2 = pygame.font.SysFont('Arial', 30) text2 = p2.render('press space to play', True, white) sc.blit(text2, (10, 10)) p3 = pygame.font.SysFont('Arial', 30) text3 = p3.render('press esc to exit', True, white) sc.blit(text3, (10, 110)) c = pygame.key.get_pressed() return c def play(fps): spider = pygame.Rect(randrange(spider_wh, WIDTH - spider_wh), (randrange(spider_wh, HEIGHT-spider_wh)), spider_wh, spider_wh) while True: for event in pygame.event.get(): if event.type == pygame.QUIT: exit() sc.fill(pygame.Color('BLACK')) # drawing world pygame.draw.rect(sc, pygame.Color('cyan'), fly) pygame.draw.rect(sc, pygame.Color('red'), spider) if spider.centerx < fly.centerx: spider.x += spider_speed if spider.centery < fly.centery: spider.y += spider_speed if spider.centerx > fly.centerx: spider.x -= spider_speed if spider.centery > fly.centery: spider.y -= spider_speed # win, game over if spider.colliderect(fly): sc.blit(img2, (0, 0)) keys(0) return False # control key = pygame.key.get_pressed() if key[pygame.K_LEFT] and fly.left > 0+fly_w: fly.left -= fly_speed if key[pygame.K_RIGHT] and fly.right < WIDTH-fly_w: fly.right += fly_speed if key[pygame.K_UP] and fly.top > 0+fly_h: fly.top -= fly_speed if key[pygame.K_DOWN] and fly.bottom < HEIGHT-fly_h: fly.bottom += fly_speed # update screen pygame.display.flip() clock.tick(fps) while True: for event in pygame.event.get(): if event.type == pygame.QUIT: exit() v = keys(0) if v[pygame.K_SPACE]: play(60) if v[pygame.K_f]: sc.blit(img, (0, 0)) if v[pygame.K_ESCAPE]: exit()
Офлайн
Khudya если я вам скажу что вам нужно переписывать всю логику приложения вы сильно огорчитесь?
Вам нужен список в котором будут все spider-ы и соотвевенно все что вы делаете для одного spider-а, вам нужно будет делать для каждого из этого списка.
[code python][/code]
Отредактировано PEHDOM (Май 17, 2021 14:17:37)
Офлайн
PEHDOM
Khudya если я вам скажу что вам нужно переписывать всю логику приложения вы сильно огорчитесь?Вам нужен список в котором будут все spider-ы и соотвевенно все что вы делаете для одного spider-а, вам нужно будет делать для каждого из этого списка.
import pygame as pg import sys import random as rnd width = 1400 height = 700 sc = pg.display.set_mode((width, height)) class Spider: def __init__(self, x, y, size, speed): self.x = x self.y = y self.size = size self.speed = speed def move(self): spider = pg.Rect(self.x, self.y, self.size, self.size) pg.draw.rect(sc, pg.Color('red'), spider) if self.y <= height: self.y += self.speed else: self.y = rnd.randrange(-1000, -50) self.x = rnd.randrange(0, width - 50) def run(): fly = pg.Rect(500, 500, 50, 50) spider_arr = [] fill_arr(spider_arr) clock = pg.time.Clock() while True: key = pg.key.get_pressed() sc.fill('black') draw_arr(spider_arr) pg.draw.rect(sc, pg.Color('white'), fly) if key[pg.K_UP] and fly.top >= 5: fly.y -= 10 if key[pg.K_DOWN] and fly.bottom <= height - 5: fly.y += 10 if key[pg.K_LEFT] and fly.left >= 5: fly.x -= 10 if key[pg.K_RIGHT] and fly.right <= width - 5: fly.x += 10 clock.tick(120) for event in pg.event.get(): if event.type == pg.QUIT: sys.exit() pg.display.flip() def fill_arr(array): array.append(Spider(rnd.randrange(0, width-50), rnd.randrange(-1000, -50), 50, 9)) def draw_arr(array): for spider in array: spider.move() run()
Офлайн
хотелось бы, чтобы когда красный красный квадратик доходил до конца экрана, то он перемещался на верх за пределы экрана (так я смог сделать) и при этом добавлялся новый квадратик (тоже наверху за пределами экрана с рандомными координатами по х)
Офлайн
KhudyaНу вот отлчно все, вот у вас в коде:
на вот такое изменил, но не совсем понимаю как дальше их количество увеличивать
... fill_arr(spider_arr) ...
Khudyaну вот там где вы проверяете “когда красный красный квадратик доходил до конца экрана” вызывайте fill_arr(spider_arr) когда таки он дойдет.
при этом добавлялся новый квадратик (тоже наверху за пределами экрана с рандомными координатами по х)
[code python][/code]
Отредактировано PEHDOM (Май 25, 2021 12:41:38)
Офлайн
PEHDOM
Офлайн
import pygame as pg import sys import random as rnd width = 1400 height = 700 sc = pg.display.set_mode((width, height)) def run(): fly = pg.Rect(500, 500, 50, 50) spider_arr = [] class Spider: def __init__(self, x, y, size, speed): self.x = x self.y = y self.size = size self.speed = speed def move(self): spider_arr = [] spider = pg.Rect(self.x, self.y, self.size, self.size) pg.draw.rect(sc, pg.Color('red'), spider) if self.y <= height: self.y += self.speed else: self.y = rnd.randrange(-1000, -50) self.x = rnd.randrange(0, width - 50) fill_arr(spider_arr) def fill_arr(array): array.append(Spider(rnd.randrange(0, width - 50), rnd.randrange(-100, -50), 50, 9)) array.append(Spider(rnd.randrange(0, width - 50), rnd.randrange(-100, -50), 50, 9)) def draw_arr(array): for spider in array: spider.move() fill_arr(spider_arr) clock = pg.time.Clock() while True: key = pg.key.get_pressed() sc.fill('black') draw_arr(spider_arr) pg.draw.rect(sc, pg.Color('white'), fly) if key[pg.K_UP] and fly.top >= 5: fly.y -= 10 if key[pg.K_DOWN] and fly.bottom <= height - 5: fly.y += 10 if key[pg.K_LEFT] and fly.left >= 5: fly.x -= 10 if key[pg.K_RIGHT] and fly.right <= width - 5: fly.x += 10 clock.tick(120) for event in pg.event.get(): if event.type == pg.QUIT: sys.exit() pg.display.flip() run()
Офлайн
Khudyaочевидно что всетаки не понимаете, я удалил всего одну строчку из вашего кода(кроме array.append(…) ), тепер пауки спаунятся в геометрической прогресси:
это я понимаю, но у меня красный квадратик добавляется, только если в функции fill_arr несколько раз прописать его добавление (array.append), а я ожидал, что сама эта функция будет добавлять новый квадратик
import pygame as pg import sys import random as rnd width = 1400 height = 700 sc = pg.display.set_mode((width, height)) def run(): fly = pg.Rect(500, 500, 50, 50) spider_arr = [] class Spider: def __init__(self, x, y, size, speed): self.x = x self.y = y self.size = size self.speed = speed def move(self): spider = pg.Rect(self.x, self.y, self.size, self.size) pg.draw.rect(sc, pg.Color('red'), spider) if self.y <= height: self.y += self.speed else: self.y = rnd.randrange(-1000, -50) self.x = rnd.randrange(0, width - 50) fill_arr(spider_arr) def fill_arr(array): array.append(Spider(rnd.randrange(0, width - 50), rnd.randrange(-100, -50), 50, 9)) def draw_arr(array): for spider in array: spider.move() fill_arr(spider_arr) clock = pg.time.Clock() while True: key = pg.key.get_pressed() sc.fill((0,0,0)) draw_arr(spider_arr) pg.draw.rect(sc, pg.Color('white'), fly) if key[pg.K_UP] and fly.top >= 5: fly.y -= 10 if key[pg.K_DOWN] and fly.bottom <= height - 5: fly.y += 10 if key[pg.K_LEFT] and fly.left >= 5: fly.x -= 10 if key[pg.K_RIGHT] and fly.right <= width - 5: fly.x += 10 clock.tick(120) for event in pg.event.get(): if event.type == pg.QUIT: sys.exit() pg.display.flip() run()
[code python][/code]
Отредактировано PEHDOM (Май 27, 2021 22:07:49)
Офлайн
PEHDOMспасибо большое, добавлял её до того как поместил класс в главный цикл, но не подумал, что таким образом массив обнуляю
Офлайн