cmdtvt
cmdtvt

Reputation: 71

can't stop program randomizing. Pygame

Ye i know this is quite noob question but problem is this. i'm making a game and i wanna randomize stars to a huge space area

But results that i get are:

  1. The space keeps recaculating places of stars so everything moves.
  2. It Shows only 1 star on the upper left corner of window.

Here is the full code:

import os
import pygame
from pygame.locals import *
import random

gstars = 500
gstarmax = 0
red = (255,0,0)
yellow = (240,250,60)
timer = 0
size = [1600, 1000]
screen = pygame.display.set_mode((1600, 1000), HWSURFACE | DOUBLEBUF | RESIZABLE)
pygame.display.set_caption('planet system test')
clock = pygame.time.Clock()

area = pygame.image.load("screenMonitor.png")


done = False
while done == False:
    pygame.event.pump()
    mouse_x, mouse_y = pygame.mouse.get_pos()

    timer += 1
    if timer > 99:
        timer = 0
    screen.fill((0,0,0))
    pygame.draw.rect(screen, red, (20, 20, 1350, 480), 2)
    pygame.draw.rect(screen,yellow,(2,2,2,2),2)
    go = True
    if go == True:
        for i in range(gstars):
            s1 = random.randrange(1,1600)
            s2 = random.randrange(1,1000)
            colorSelect = random.randrange(0,5)


            if colorSelect == 1:
                yellow = (240,250,60)

            if colorSelect == 2:
                yellow = (249,173,60)

            if colorSelect == 3:
                yellow = (226,43,68)

            if colorSelect == 4:
                yellow = (52,173,84)

            go = False
            pygame.draw.rect(screen,yellow,(2+s1,2+s2,2,2),2)





    pygame.display.flip()

    clock.tick(30)
    pygame.quit()

Upvotes: 0

Views: 58

Answers (1)

simon LECLERC
simon LECLERC

Reputation: 28

The trouble is in the main/event loop.

You put the code for position your stars inside the main loop. Since it is randomize at every iteration, it will move.

I remove the go = False that probably cause the error to display only one star.

In the following code, I create a list of star that have the position in indices 0 and 1, and the tuple of the color in 2. The tuple of color is randomly choose using the random.choice(Sequence) function. https://docs.python.org/2/library/random.html

import pygame
from pygame import *
import random

gstars = 500
gstarmax = 0
red = (255,0,0)
yellow = (240,250,60)
timer = 0
size = [1600, 1000]

    pygame.init()    
    pygame.display.set_caption('planet system test')
    screen = pygame.display.set_mode((size[0], size[1]))
    clock = pygame.time.Clock()

    area = pygame.image.load("screenMonitor.png")

    color = ((240,250,60),(249,173,60),(226,43,68),(52,173,84))
    stars = []
    for i in range(gstars):
        s1 = random.randrange(1,1600)
        s2 = random.randrange(1,1000)
        starcolor = random.choice(color)
        stars.append([s1, s2, starcolor])

    done = False
    while done == False:

        for event in pygame.event.get():
            if event.type == pygame.QUIT: #Quit the game if X 
                done = False

        screen.fill(0)
        pygame.draw.rect(screen, red, (20, 20, 1350, 480), 2)
        pygame.draw.rect(screen,yellow,(2,2,2,2),2)
        for star in stars:
            pygame.draw.rect(screen,star[2],(2+star[0],2+star[1],2,2),2)


        pygame.display.flip()

        clock.tick(30)

EDIT : Correct the code following the advice of Ted Klein Bergman.

Upvotes: 1

Related Questions