Увеличение пигамов - PullRequest
0 голосов
/ 03 мая 2020

Я хочу сделать маленькую игру с пигмеем. Я не знаю, как я могу заставить шар увеличиваться со временем, и скорость появления мячей увеличивается. Это будет так: https://www.youtube.com/watch?v=DCQp1Q8ANCM (0:31)

#ball.py
import pygame
import random
YELLOW = (225, 225, 0)

class balls:
    def draw_ball(screen, tickrate, i):
        x = random.randint(0,500)
        y = random.randint(0,500)
        first_range = 10
        range = 10

        print(i)
        if i >= 100 :
            ball = pygame.draw.circle(screen, YELLOW, (x, y), range)
#Main.py
import pygame
import os
import random
import ball
import threading
import sys
from timeit import Timer

pygame.init()
game_screen = pygame.display.set_mode((800, 600))
x = 100
y = 100
os.environ['Sp_VIDEO_WINDOW_POS'] = "%d,%d" % (x,y)
size = [500, 500]
screen = pygame.display.set_mode(size)
pygame.display.set_caption("Reaction")
background = pygame.image.load("images\\background.jpg")
background_rect = background.get_rect(bottomright = (500,500))
background.set_colorkey((255,255,255)) #прозрачный слой фона
screen.blit(background,background_rect)
pygame.display.update()
run_game = True #флаг игрового цикла
clock = pygame.time.Clock()
FPS = 60
starttime=pygame.time.get_ticks()
#timer = Timer(0.05, ball.balls.draw_ball(screen)) # 50 миллисекунд
i = 1

def quit():
            rungame = False
            pygame.quit()
            sys.exit()

while run_game: #игровой цикл
    #timer.start()
    tickrate = clock.tick(FPS)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            quit()
    ball.balls.draw_ball(screen,tickrate,i)
    pygame.display.update()
    if i == 100:
        i = 0
    i+=1
pygame.display.flip()

Ответы [ 3 ]

2 голосов
/ 03 мая 2020

Вы оказываете небольшую помощь любому, кто хочет ответить на ваш вопрос, поскольку вы не предоставляете код.

Я предполагаю, что у вас есть объект Ball, такой как:

class Ball:
    def __init__(self, radius):
        self.radius = radius

Ваша пигмейка в то время как я oop может выглядеть примерно так

ball = Ball(some_radius)
while 1:
    # Do pygame stuff

    ball.radius += some_number
    pygame.draw.circle(screen, color, pos, ball.radius)

Это, конечно, предполагает, что у вас есть подходящие значения для some_radius, some_number, screen, color и pos.

0 голосов
/ 03 мая 2020

Создать класс Ball. Класс имеет 3 атрибута. Позиция (self.x, self.y) и текущий размер (self.size). Призыв к методам. change_size изменяет размер шара и draw_ball др aws мяч:

class Ball:
    def __init__(self):
        self.x = random.randint(0,500)
        self.y = random.randint(0,500)
        self.size = 1

    def change_size(self):
        self.size += 1
        if self.size > 100:
            self.size = 1

    def draw_ball(self, screen):
        pygame.draw.circle(screen, YELLOW, (self.x, self.y), self.size)

Создайте экземпляр Ball, измените размер шара и нарисуйте шар в поле. заявка l oop:

ball = Ball()
run_game = True
while run_game:

    tickrate = clock.tick(FPS)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            quit()

    screen.blit(background,background_rect)
    ball.change_size()
    ball.draw_ball(screen)
    pygame.display.update()
0 голосов
/ 03 мая 2020

Вот что я бы сделал:

Сначала определите класс с переменными x, y и размером:

class GreenBall:               # Your class
    def __init__(self, x, y, size):  # The function that creates a ball at a given x and y position
        self.x = x
        self.y = y 
        self.size = size

    def grow():                   # Every time this function is called, your ball will grow
        self.size += 1

    def render():
        pygame.draw.circle(gameSurface, (0,255,0), (self.x,self.y), size)


Каждый раз, когда вы хотите создать новый GreenBall, вы может вызвать функцию, подобную этой:

ballList = []

def newBall(x, y):       # Initialize a new greenBall at x and y
    global ballList
    ballList.append( GreenBall( x, y, 1 ) )

Теперь, чтобы рисовать круги каждый тик, мы должны сказать им, чтобы они отображались сами.

for i in ballList:
    i.render()

Надеюсь, эти куски кода помогут !


Редактировать: Поразмыслив немного, я придумал эту программу:

import pygame
import random
import math
import sys

pygame.init()

clock = pygame.time.Clock()

gameSize = (1200,800)

gameSurface = pygame.display.set_mode(gameSize)
pygame.display.set_caption('Green Balls!')



class GreenBall:               # Your class
    def __init__(self, x, y, size):  # The function that creates a ball at a given x and y position
        self.x = x
        self.y = y 
        self.size = size

    def grow(self):        # Every time this function is called, your ball will grow
        self.size += 1

    def render(self):
        pygame.draw.circle(gameSurface, (0,255,0), (self.x,self.y), (self.size))



ballList = []

def newBall(x, y):       # Initialize a new greenBall at x and y
    global ballList
    ballList.append( GreenBall( x, y, 1 ))





timer = 0

spawnBallTime = 30

while True:      #game loop
    gameSurface.fill((0,0,0))

    for i in ballList:
        i.grow()
        i.render()

    if timer == spawnBallTime:
        newBallX = random.randint(100, gameSize[0]-100)
        newBallY = random.randint(100, gameSize[1]-100)

        newBall(newBallX, newBallY)

        spawnBallTime -= 1
        timer = 0

    timer += 1

    clock.tick(20)

    pygame.display.update()

    event = pygame.event.get()
    for e in event:
        if e.type == pygame.QUIT:
            pygame.display.quit()
            sys.exit()

Я не хочу портить вам веселье написания забавной игры, но вот базовая c установка, которую я создал. Не стесняйтесь задавать мне вопросы о том, что это значит: D

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...