# Bubbletree

This program falls into the category ‘fancy, but not usefull’. It basically starts with one circle, which spawns in new ones. The maximum number of circles is 100, their color is a gray tone (rgb between 50 and 100).

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

``````# gets the scaled mouse position
def getMousePos():
p = pygame.mouse.get_pos()
return [
p[0] / main.SCALE, p[1] / main.SCALE
]

# gets the distance between two points
def getDistance(p1, p2):
return int(
math.sqrt((p2[0] - p1[0])**2 + (p2[1] - p1[1])**2)
)

# 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'
# circle radius                           : '_radius'
# angle from center to point on the circle: '_angle'
def getCirclePos(_pos, _radius, _angle):
return [
int(_pos[0] + _radius * math.cos(math.radians(_angle))),
int(_pos[1] + _radius * math.sin(math.radians(_angle)))
]

# swaps a boolean
def boolSwap(_bool):
if _bool:
return False
else:
return True

class bubble():
def __init__(self, _pos, _size):
self.pos = _pos
self.size = _size
self.color = [
colorValid(main.TICKS, 50, 100),
colorValid(main.TICKS, 50, 100),
colorValid(main.TICKS, 50, 100)
]
self.spawnDelay = 5
self.done = False
self.dead = False

if self.pos[0] < 0:
self.pos[0] = 0
if self.pos[0] > main.WIDTH:
self.pos[0] = main.WIDTH

if self.pos[1] < 0:
self.pos[1] = 0
if self.pos[1] > main.HEIGHT:
self.pos[1] = main.HEIGHT

def tick(self):
self.spawnDelay -= 1
if not self.done and main.TICKS % 10 == 0 and self.spawnDelay <= 0:

for _ in range(0, random.randint(1, 2)):
s = random.randint(10, 50)
main.BUBBLES.append(
bubble(
getCirclePos(self.pos, self.size, random.randint(0, 360)),
s
)
)

self.done = True

#if self.spawnDelay <= -10:
#	self.dead = True

def render(self, _surface):
pygame.draw.circle(_surface, self.color, self.pos, self.size)

# tick function
def tick():
# handle events
for event in pygame.event.get():
# quit
if event.type == pygame.QUIT:
sys.exit()

# 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)

while len(main.BUBBLES) > 100:
main.BUBBLES.pop(random.randint(0, len(main.BUBBLES) - 1))

for _ in main.BUBBLES:
_.tick()
if _.dead:
main.BUBBLES.remove(_)

# render function
def render():
# fill
main.SCREEN.fill(main.BACKGROUNDCOLOR)
if main.FILL:
main.SURF.fill(main.COLOR)

for _ in main.BUBBLES:
_.render(main.SURF)

# blit and flip
main.SCREEN.blit(pygame.transform.scale(main.SURF, [int(main.WIDTH * main.SCALE), int(main.HEIGHT * main.SCALE)]), [0, 0])
pygame.display.flip()

# 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

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

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

# main dummy
main = dummy()
main.TICKS = 0

main.RES = 1
main.WIDTH = 1080 / main.RES
main.HEIGHT = 720 / main.RES
main.SIZE = [main.WIDTH, main.HEIGHT]
main.CENTER = [main.WIDTH / 2, main.HEIGHT / 2]
main.CENTERFLOAT = [main.WIDTH / 2.0, main.HEIGHT / 2.0]

main.SCALE = 1 * main.RES
main.SCALEDSIZE = [int(main.WIDTH * main.SCALE), int(main.HEIGHT * main.SCALE)]
main.SCALEDSIZEFLOAT = [main.WIDTH * main.SCALE, main.HEIGHT * main.SCALE]

main.SURF = pygame.Surface(main.SIZE)

main.SCREEN = pygame.display.set_mode(main.SCALEDSIZE)
pygame.display.set_caption("Bubbletree")

main.BACKGROUNDCOLOR = [0, 0, 0]
main.COLOR = [150, 0, 0]
main.FILL = True

main.KEYSDOWN = []
main.BUBBLES = [bubble(main.CENTER, 50)]

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