from machine import Pin, I2C
import machine
import ssd1306
import utime
from random import randrange
# ESP32 Pin assignment (pantalla)
i2c = I2C(0, scl=Pin(22), sda=Pin(21))
# Button Pin assignment
BotonUP = Pin(26, Pin.IN, machine.Pin.PULL_UP)
BotonDown = Pin(14, Pin.IN, machine.Pin.PULL_UP)
BotonReset = Pin(27, Pin.IN, machine.Pin.PULL_UP)
# Pantalla Config
oled_width = 128
oled_height = 64
oled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c)
# DEFINICION DE VARIABLES INICIALES
CHARX = 0 #Posicion personaje en x
CHARY = 35 #Posicion personaje en y
ObstX = oled_width
ObstY = randrange(51)
vel = 10 #Velocidad de obstaculos
#Control de Fases
GameIntro = 1
GamePlay = 0
ResetGame = 0
CHAR = [
[ 0,0,1,1,1,0,0],
[ 0,1,0,0,0,1,0],
[ 0,1,0,0,0,1,0],
[ 0,1,0,0,0,1,0],
[ 0,0,1,1,1,0,0],
[ 0,0,0,1,0,0,0],
[ 0,0,1,1,1,0,0],
[ 0,1,0,1,0,1,0],
[ 1,0,0,1,0,0,1],
[ 0,0,0,1,0,0,0],
[ 0,0,1,0,1,0,0],
[ 0,1,0,0,0,1,0],
[ 0,1,0,0,0,1,0],
]
OBSTACULO = [
[ 0,0,0,0,0,1,1,0,0,0,0,0],
[ 0,0,0,0,1,1,1,1,0,0,0,0],
[ 0,0,0,1,1,1,1,1,1,0,0,0],
[ 0,0,1,1,1,1,1,1,1,1,0,0],
[ 0,1,1,1,1,1,1,1,1,1,1,0],
[ 1,1,1,1,1,1,1,1,1,1,1,1],
[ 1,1,1,1,1,1,1,1,1,1,1,1],
[ 1,1,1,1,1,1,1,1,1,1,1,1],
[ 1,1,1,1,1,1,1,1,1,1,1,1],
[ 0,1,1,1,1,1,1,1,1,1,1,0],
[ 0,0,0,0,0,1,1,0,0,0,0,0],
]
while True:
while GameIntro == 1:
oled.fill(0)
oled.text('Hola Mundo!', 20, 10)
for y, row in enumerate(CHAR):
for x, c in enumerate(row):
CHARXPos=x+CHARX
CHARYPos=y+CHARY
oled.pixel(CHARXPos, CHARYPos, c)
oled.show()
CHARX = CHARX + 5
utime.sleep_ms(10)
if (CHARXPos > 139):
oled.fill(0)
oled.show()
CHARX = 0
GameIntro = 0
GamePlay = 1
while GamePlay == 1:
oled.fill(0)
#OBSTACULOS
for y, row in enumerate(OBSTACULO):
for x, c in enumerate(row):
ObstXPos=x+ObstX
ObstYPos=y+ObstY
oled.pixel(ObstXPos, ObstYPos, c)
ObstX = ObstX - vel
if ObstXPos < 0:
ObstX = oled_width
ObstY = randrange(51)
#PERSONAJE
for y, row in enumerate(CHAR):
for x, c in enumerate(row):
CHARXPos=x+CHARX
CHARYPos=y+CHARY
oled.pixel(CHARXPos, CHARYPos, c)
oled.show()
#MOVIMIENTO
if (BotonUP.value() == 0):
CHARY = CHARY - 6
if CHARY < -15:
CHARY = 65
if (BotonDown.value() == 0):
CHARY = CHARY + 6
if CHARY > 65:
CHARY = 0
#COLISION
if CHARYPos > ObstYPos:
if abs(CHARYPos - ObstYPos) < 13 and ObstXPos < 16:
GamePlay = 0
ResetGame = 1
else:
if abs(CHARYPos - ObstYPos) < 12 and ObstXPos < 16:
GamePlay = 0
ResetGame = 1
#RESET
while ResetGame == 1:
oled.fill(0)
oled.text("Game Over!", 25, 10)
oled.text("Press R to reset", 2, 25)
oled.show()
if (BotonReset.value() == 0):
CHARX = 0
CHARY = 35
ObstX = oled_width
ObstY = randrange(51)
oled.fill(0)
ResetGame = 0
GameIntro = 1