Найти - Пользователи
Полная версия: игра
Начало » Python для новичков » игра
1
Khudya
смысл в том, чтобы уворачиваться от красных квадратиков. Но я смог сделать только один.
подскажите как их количество увеличить.


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





PEHDOM
Khudya если я вам скажу что вам нужно переписывать всю логику приложения вы сильно огорчитесь?
Вам нужен список в котором будут все spider-ы и соотвевенно все что вы делаете для одного spider-а, вам нужно будет делать для каждого из этого списка.
Khudya
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
хотелось бы, чтобы когда красный красный квадратик доходил до конца экрана, то он перемещался на верх за пределы экрана (так я смог сделать) и при этом добавлялся новый квадратик (тоже наверху за пределами экрана с рандомными координатами по х)
PEHDOM
Khudya
на вот такое изменил, но не совсем понимаю как дальше их количество увеличивать
Ну вот отлчно все, вот у вас в коде:
 ...
fill_arr(spider_arr)
...
вызовите fill_arr(spider_arr) два раза и у вас будет 2 “паука” , n раз - n пауков.

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


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

вот так сейчас код выглядит
PEHDOM
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()
Khudya
PEHDOM
спасибо большое, добавлял её до того как поместил класс в главный цикл, но не подумал, что таким образом массив обнуляю
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB