# Boxes

Inspired by a pattern on a storage box I own I decided to try program something simulating it. This program shows variously colored boxes with a black gap in between. You can adjust the box size, the gap size and even how many boxes will appear on the screen (all changeable in the code).
The pattern will be newly generated every half a second.

``````# Python 2.7.7 Code
# Pygame 1.9.1 (for Python 2.7.7)
# Jonathan Frech 28th of May, 2015``````

``````# importing needed modules
import pygame, sys, time, math, os, random

""" CLASSES """
# dummy class for global variables
class dummy():
pass

""" FUNCTIONS """
# gets the mouse position
def getMousePos():
p = pygame.mouse.get_pos()
return [p[0], p[1]]

# validates color integer
# extra feature: _min and _max implementation
def colorValid(_color, _min = 0, _max = 255):
newColor = math.fabs(_color)
n = _max - _min
if newColor > n:
if int(newColor / n) % 2 == 0:
newColor = newColor % n
else:
newColor = n - (newColor % n)

return int(newColor) + _min

# gets the position on a circle
# circle center                           : '_pos'
# angle from center to point on the circle: '_angle'
return [
]

# returns an integer version of given positon
def intpos(_pos):
return [int(_pos[0]), int(_pos[1])]

# basic vector functions
def vecConvert(p1, p2):
return [p2[0] - p1[0], p2[1] - p1[1]]
def vecLen(vec):
return math.sqrt( (vec[0]**2) + (vec[1]**2) )
def vecMultiply(vec, n):
return [vec[0] * n, vec[1] * n]
def vecGetPoint(vec, point):
return [point[0] + vec[0], point[1] + vec[1]]
return [vec1[0] + vec2[0], vec1[1] + vec2[1]]

# calculates distance between given positions
def posDistance(p1, p2):
return math.sqrt( (p2[0] - p1[0])**2 + (p2[1] - p1[1])**2 )

# quits the program
def quit():
sys.exit()

""" TICK; RENDER """
# tick function
def tick():
# handle events
for event in pygame.event.get():
# quit
if event.type == pygame.QUIT:
quit()

# keyup
if event.type == pygame.KEYUP:
# handle 'main.KEYSDOWN'
if event.key in main.KEYSDOWN:
main.KEYSDOWN.remove(event.key)

# keydown
if event.type == pygame.KEYDOWN:
# handle 'main.KEYSDOWN'
if event.key not in main.KEYSDOWN:
main.KEYSDOWN.append(event.key)

# render function
def render():
if main.TICKS <= 1 or main.TICKS % 30 == 0:
main.SURF.fill(main.COLOR)

# draw boxes
for x in range(0, main.WIDTH / main.total[0]):
for y in range(0, main.HEIGHT / main.total[1]):
# calculate position
pos = [
x*main.total[0] + main.cut[0],
y*main.total[1] + main.cut[1]
]
# calculate color
c = [random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)]
if random.randint(0, 1) != 0:
c = [0, 0, 0]
# draw
pygame.draw.rect(main.SURF, c, [pos[0], pos[1], main.box[0], main.box[1]])

# blit and flip
main.SCREEN.blit(main.SURF, [0, 0])
pygame.display.flip()

""" INIT """
# initialize program
def init():
# box init

# black gap size
main.cut = [10, 10]
# colorful box size
main.box = [30, 30]
# box count
main.boxes = [20, 15]

main.total = [main.cut[0] + main.box[0], main.cut[1] + main.box[1]]
main.WIDTH, main.HEIGHT = main.total[0]*main.boxes[0]+main.cut[0], main.total[1]*main.boxes[1]+main.cut[1]

main.SIZE = [main.WIDTH, main.HEIGHT]
main.CENTER = [main.WIDTH / 2., main.HEIGHT / 2.]

main.SCREEN = pygame.display.set_mode(main.SIZE)

main.SURF = pygame.Surface(main.SIZE)
main.COLOR = [0, 0, 0]

main.TICKS = 0
main.KEYSDOWN = []
main.CAPTION = "Boxes"

# functions
pygame.display.set_caption(main.CAPTION)

""" RUN """
# run function (uses tick() and render())
def run():
ticksPerSecond = 60
lastTime = time.time() * 1000000000
nsPerTick =  1000000000.0 / float(ticksPerSecond)

ticks = 0
frames = 0

lastTimer = time.time() * 1000
delta = 0.0

while True:
now = time.time() * 1000000000
delta += float(now - lastTime) / float(nsPerTick)
lastTime = now
shouldRender = False

while delta >= 1:
ticks += 1
main.TICKS += 1
tick()
delta -= 1
shouldRender = True

if shouldRender:
frames += 1
render()

if time.time() * 1000 - lastTimer >= 1000:
lastTimer += 1000

# debug
# print("Frames: " + str(frames) + ", ticks: " + str(ticks))

frames = 0
ticks = 0

# main variable
main = dummy()
init()

# start program
run()``````