from machine import Pin, I2C
import ssd1306
import time
import random
# ESP32 Pin assignment
i2c = I2C(0, scl=Pin(22), sda=Pin(21))
oled_width = 128
oled_height = 64
oled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c)
axis_x = 10
# class for different shapes
# class for game_map
class Map:
def __init__(self, width, height):
self.width = width
self.height = height
self.game_map = [[0 for _ in range(self.width)] for _ in range(self.height)]
def range_randomizer(self):
r1 = random.uniform(0.1, 0.45)
#print(f"randomized: {r1}")
height_bottom_range = round(self.height * r1)
height_top_range = self.height - round(self.height * r1)
#print(f"Map SetUp: height_bot-{height_bottom_range} height_top-{height_top_range}")
return (height_bottom_range, height_top_range)
def map_randomize(self):
range_tuple = self.range_randomizer()
# replace bottom
for bot in range(0, range_tuple[0]):
self.game_map[bot] = [1 for _ in range(self.width)]
# replace up
for up in range(range_tuple[1], self.height):
self.game_map[up] = [1 for _ in range(self.width)]
def add_new_frame(self, probability = 0.5):
range_tuple = self.range_randomizer()
for y in range(0, self.height):
self.game_map[y].pop(0)
self.game_map[y].pop(0)
self.game_map[y].pop(0)
# add new frame at the end
if y <= range_tuple[0] or y >= range_tuple[1]:
if random.random() < probability:
self.game_map[y].append(1)
self.game_map[y].append(1)
self.game_map[y].append(1)
else:
self.game_map[y].append(0)
self.game_map[y].append(0)
self.game_map[y].append(0)
else:
self.game_map[y].append(0)
self.game_map[y].append(0)
self.game_map[y].append(0)
# class for the player
class Player:
map = Map(oled_width, oled_height)
map.map_randomize()
while True:
for y in range(0, len(map.game_map)):
for x in range(0, len(map.game_map[y])):
oled.pixel(x, y, map.game_map[y][x])
oled.show()
map.add_new_frame(0.2)
oled.show()