mercredi 26 avril 2017

randint() only generating high values and not drawing enough objects

For this project, I need to draw 400 different squares at random spots, and are all at least 5 pixels away from eachother. Currently, boxes are mostly drawn on the bottom of the window, and only about half are drawn before the program freezes. I've consulted my professors, and they are stumped.

#Importing things I need
 import random
 from graphics import *

 def enterValue(used_spots, y_spots, corner1, corner2):
     #enters the value where our square starts into the array, if it's a 
 valid value.
     used_spots.append(corner1)
     y_spots.append(corner2)

 def checkPlace(used_spots,y_spots,corner1,corner2):
     #checks the placement of every square to see if our new one is valid.
     # the total size of a square is 20px edge + 5 px Border + 3 px width.  
     # So we need to check based on that number.
     slot=0
     check=0
     for slot in range(0,len(used_spots)):
         #if the distance between the squares is more than 28 pixels, return 
         # true. Else, stop checking and return false
         if abs(corner1-used_spots[slot])<28 and abs(corner2-y_spots[slot]<28):
             check=0
             break
         else:
             check=1
     return check

 def randomCorners():
     #gets us a random variable for x and y of a box's corner
     corner1=random.randint(3,1800-28)
     corner2=random.randint(3,900-28)
     return corner1, corner2

 def drawBox(corner1,corner2,EDGE,WIDTH,colors,win):
     #Draws the box
     point1=Point(corner1,corner2)
     point2=Point(corner1+EDGE,corner2+EDGE)
     square=Rectangle(point1,point2)
     square.setWidth(WIDTH)
     square.setFill(random.choice(colors))
     square.draw(win)

 def main():
     #delcaring variables
     corner1=0
     corner2=0
     used_spots=[]
     y_spots=[]
     WIDTH=3
     EDGE=20
     colors=["red","orange","yellow","blue","pink","green"]
     win=GraphWin("MAINWINDOW",1800,900)
     win.setBackground("white")

     #Draws a random box at a random spot, then makes a spot for a new potential box and tests it
     corner1,corner2=randomCorners()
     drawBox(corner1,corner2,EDGE,WIDTH,colors,win)
     enterValue(used_spots,y_spots,corner1,corner2)
     corner1,corner2=randomCorners()

     while len(used_spots) < 400:
         #If we can draw a box there, draw it and add coords to the lists, 
         #then generates a new set of coordinates.
         if checkPlace(used_spots,y_spots,corner1,corner2)==1:
             drawBox(corner1,corner2,EDGE,WIDTH,colors,win)
             enterValue(used_spots,y_spots,corner1,corner2)

          #otherwise, make a new coordinate and try again.
         corner1,corner2=randomCorners()


 main()




Aucun commentaire:

Enregistrer un commentaire