mr. bug
mr. bug

Reputation: 309

What is the quickest way to draw multiple circles in pygame?

I am making an agario clone for a project and I was wondering what the quickest way to draw many dots in pygame.

from pygame import *
import random as rd 

x = rd.randint(100, 700)
y = rd.randint(100, 500)


# I would like to draw about 50 dots of this type. 
dot = draw.circle(screen, (0, 0, 0), (x, y), 5)

Upvotes: 1

Views: 2564

Answers (4)

Peyman Majidi
Peyman Majidi

Reputation: 1985

I made a class for dots:

class Dot():
    SIZE = 5
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def draw(self):
        draw.circle(screen, self.color, (self.x, self.y), Dot.SIZE)

Then I made an array and generate NUMBER_OF_DOTS like this:

dots = []

for i in range(NUMBER_OF_DOTS):
    x = rd.randint(100, 700)
    y = rd.randint(100, 500)
    dots.append(Dot(x,y))

and in the while loop and redraw after filling the whole scene by white color:

while True: screen.fill((255, 255, 255)) ... for dot in dots: dot.draw()

The whole source:

from pygame import *
import random as rd

SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
NUMBER_OF_DOTS = 300

class Dot():
    SIZE = 5
    def __init__(self, x, y):
        self.x = x
        self.y = y
        self.color = random_color()

    def draw(self):
        draw.circle(screen, self.color, (self.x, self.y), Dot.SIZE)
    
def random_color():
    r = rd.randint(0, 255)
    g = rd.randint(0, 255)
    b = rd.randint(0, 255)
    return (r, g, b)


init()
screen = display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))

dots = []

# generate random dots all over the screen
for i in range(NUMBER_OF_DOTS):
    x = rd.randint(100, 700)
    y = rd.randint(100, 500)
    dots.append(Dot(x,y))


# main while loop
while True:
    screen.fill((255, 255, 255))
    
    for dot in dots:
        dot.draw()


    display.update()
    time.delay(1) # Speed down

enter image description here

Upvotes: 1

Rabbid76
Rabbid76

Reputation: 210909

If you want to draw the same circles continuously in the main application loop, then you've to generate a list of random positions:

import pygame as pg
import random as rd 

pg.init()
screen = pg.display.set_mode((800,600))

cpts = []
for i in range(25):
    x = rd.randint(100, 700)
    y = rd.randint(100, 500)
    cpts.append((x, y))
    
run = True
while run: 
    for event in pg.event.get(): 
        if event.type == pg.QUIT: 
            run = False

    for cpt in cpts: 
        pg.draw.circle(screen, (255, 255, 255), cpt, 15)
    pg.display.update()

See the answer to Pygame unresponsive display for a minimum pygame application.

Upvotes: 0

Mike67
Mike67

Reputation: 11342

Here's some basic code to draw circles using pygame:

import pygame as pg
import random as rd 

pg.init()  # initialize pygame  
screen = pg.display.set_mode((500,500))  # create main screen

for ctr in range(25):  # 25 circles
    x = rd.randint(50, 450)
    y = rd.randint(50, 450)
   
    # I would like to draw about 50 dots of this type. 
    dot = pg.draw.circle(screen, (100, 200, 100), (x, y), 15)
    pg.display.update()  # update screen
    
while True:  # main pygame loop, always include this
    for event in pg.event.get(): # required for OS events
      if event.type == pg.QUIT:  # user closed window
         pg.quit()

Output

Circles

Upvotes: 2

Kingsley
Kingsley

Reputation: 14906

Any easy way to do this to use a simple python "for" loop with a "range":

As the loop iterates, it executes the content of the loop body, with the variable i incrementing from 0 to N-1 (i.e. 49). The variable i could be any valid variable name, but for simple numbered loops, i, j & k are commonly used.

from pygame import *
import random as rd 

# Draw 50 dots 
for i in range( 0, 50 ):
    x = rd.randint(100, 700)
    y = rd.randint(100, 500)
    dot = draw.circle(screen, (0, 0, 0), (x, y), 5)

Upvotes: 1

Related Questions