Уведомления

Группа в Telegram: @pythonsu

#1 Май 15, 2021 15:38:30

Khudya
Зарегистрирован: 2021-05-04
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

игра

смысл в том, чтобы уворачиваться от красных квадратиков. Но я смог сделать только один.
подскажите как их количество увеличить.


 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()





Офлайн

#2 Май 17, 2021 14:14:03

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

игра

Khudya если я вам скажу что вам нужно переписывать всю логику приложения вы сильно огорчитесь?
Вам нужен список в котором будут все spider-ы и соотвевенно все что вы делаете для одного spider-а, вам нужно будет делать для каждого из этого списка.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Май 17, 2021 14:17:37)

Офлайн

#3 Май 22, 2021 18:48:58

Khudya
Зарегистрирован: 2021-05-04
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

игра

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()


на вот такое изменил, но не совсем понимаю как дальше их количество увеличивать

Офлайн

#4 Май 22, 2021 18:52:43

Khudya
Зарегистрирован: 2021-05-04
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

игра

хотелось бы, чтобы когда красный красный квадратик доходил до конца экрана, то он перемещался на верх за пределы экрана (так я смог сделать) и при этом добавлялся новый квадратик (тоже наверху за пределами экрана с рандомными координатами по х)

Офлайн

#5 Май 25, 2021 12:37:25

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

игра

Khudya
на вот такое изменил, но не совсем понимаю как дальше их количество увеличивать
Ну вот отлчно все, вот у вас в коде:
 ...
fill_arr(spider_arr)
...
вызовите fill_arr(spider_arr) два раза и у вас будет 2 “паука” , n раз - n пауков.

Khudya
при этом добавлялся новый квадратик (тоже наверху за пределами экрана с рандомными координатами по х)
ну вот там где вы проверяете “когда красный красный квадратик доходил до конца экрана” вызывайте fill_arr(spider_arr) когда таки он дойдет.
ЗЫ fill_arr название “неправильное”, если бы вы назвали его ,например , add_spider, вы бы сами догадались как добавить еще одного “паука”.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Май 25, 2021 12:41:38)

Офлайн

#6 Май 27, 2021 21:18:41

Khudya
Зарегистрирован: 2021-05-04
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

игра

PEHDOM


это я понимаю, но у меня красный квадратик добавляется, только если в функции fill_arr несколько раз прописать его добавление (array.append), а я ожидал, что сама эта функция будет добавлять новый квадратик

Офлайн

#7 Май 27, 2021 21:19:54

Khudya
Зарегистрирован: 2021-05-04
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

игра

 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()

вот так сейчас код выглядит

Офлайн

#8 Май 27, 2021 22:05:34

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

игра

Khudya
это я понимаю, но у меня красный квадратик добавляется, только если в функции fill_arr несколько раз прописать его добавление (array.append), а я ожидал, что сама эта функция будет добавлять новый квадратик
очевидно что всетаки не понимаете, я удалил всего одну строчку из вашего кода(кроме 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)

Офлайн

#9 Май 27, 2021 22:53:34

Khudya
Зарегистрирован: 2021-05-04
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

игра

PEHDOM
спасибо большое, добавлял её до того как поместил класс в главный цикл, но не подумал, что таким образом массив обнуляю

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version