简体   繁体   English

限制生成的圆圈数量

[英]Limiting the amount of circles that spawn in

im fairly new to coding and python, i was messing around with pygame and i was wondering if theres a way i could limit the amount of circles that spawn in this game im making?我对编码和 python 相当陌生,我在玩 pygame,我想知道是否有办法限制我正在制作的这个游戏中产生的圆圈数量? when i run the code, it just spawns in circles all over the place really fast.当我运行代码时,它只是在整个地方快速生成圆圈。 i tried doing the time.sleep thing, but all it does is slow down the entire game.我尝试做 time.sleep 的事情,但它所做的只是减慢了整个游戏的速度。

import pygame
import random
import time

pygame.init()
y = 0
x = 0
point = 0
is_blue = True
WHITE = (255, 255, 255)
clock = pygame.time.Clock()
screen = pygame.display.set_mode([500, 500])



def food():
    pygame.draw.circle(screen, WHITE, (random.randint(1, 400), random.randint(1, 400)), 5)


done = False
while not done:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            done = True
        if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
            is_blue = not is_blue

    pygame.display.set_caption("Collect the balls to win!")

    pressed = pygame.key.get_pressed()
    if pressed[pygame.K_UP]:
        y -= 3
    if pressed[pygame.K_DOWN]:
        y += 3
    if pressed[pygame.K_LEFT]:
        x -= 3
    if pressed[pygame.K_RIGHT]:
        x += 3

    if x <= -1:
        x = 0
    if x >= 441:
        x = 440
    if y <= -1:
        y = 0
    if y >= 441:
        y = 440

    screen.fill((0, 0, 0))
    if is_blue:
        color = (0, 128, 255)
    else:
        color = (255, 100, 0)

    pygame.draw.rect(screen, color, pygame.Rect(x, y, 30, 30))
    food()
    pygame.display.flip()
    clock.tick(144)

You have to use a list.你必须使用一个列表。 Create a list for the food positions:为食物位置创建一个列表:

food_list = []

Fill the list in a loop:在循环中填充列表:

while len(food_list) < 10:
    food_list.append((random.randint(1, 400), random.randint(1, 400)))

Draw the foods in the list in a loop:循环绘制列表中的食物:

for food_pos in food_list:
        pygame.draw.circle(screen, WHITE, food_pos, 5)

You can also spawn the food with an time interval.您还可以按时间间隔生成食物。 Usepygame.time.get_ticks() to measure the time.使用pygame.time.get_ticks()来测量时间。 Define a time interval after which a new object should appear.定义一个时间间隔,在此之后新对象应出现。 Create an object when the point in time is reached and calculate the point in time for the next object:当到达时间点时创建一个对象并计算下一个对象的时间点:

food_list = []
time_interval = 1000 # 1000 milliseconds == 1 seconds
next_food_time = pygame.time.get_ticks() 

done = False
while not done:
    # [...]

    current_time = pygame.time.get_ticks()
    if current_time > next_food_time and len(food_list) < 10:
        next_food_time += time_interval
        food_list.append((random.randint(1, 400), random.randint(1, 400)))

See also Spawning multiple instances of the same object concurrently in python另请参阅在 python 中同时生成同一对象的多个实例


Complete example:完整示例:

import pygame
import random
import time

pygame.init()
y = 0
x = 0
point = 0
is_blue = True
WHITE = (255, 255, 255)
clock = pygame.time.Clock()
screen = pygame.display.set_mode([500, 500])


food_list = []
time_interval = 1000 # 1000 milliseconds == 1 seconds
next_food_time = pygame.time.get_ticks() 

done = False
while not done:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            done = True
        if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
            is_blue = not is_blue

    pygame.display.set_caption("Collect the balls to win!")

    pressed = pygame.key.get_pressed()
    if pressed[pygame.K_UP]:
        y -= 3
    if pressed[pygame.K_DOWN]:
        y += 3
    if pressed[pygame.K_LEFT]:
        x -= 3
    if pressed[pygame.K_RIGHT]:
        x += 3

    if x <= -1:
        x = 0
    if x >= 441:
        x = 440
    if y <= -1:
        y = 0
    if y >= 441:
        y = 440

    current_time = pygame.time.get_ticks()
    if current_time > next_food_time and len(food_list) < 10:
        next_food_time += time_interval
        food_list.append((random.randint(1, 400), random.randint(1, 400)))

    screen.fill((0, 0, 0))
    if is_blue:
        color = (0, 128, 255)
    else:
        color = (255, 100, 0)

    pygame.draw.rect(screen, color, pygame.Rect(x, y, 30, 30))
    for food_pos in food_list:
        pygame.draw.circle(screen, WHITE, food_pos, 5)
    pygame.display.flip()
    clock.tick(144)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM