from machine import Pin, I2C, ADC
from ssd1306 import SSD1306_I2C
import time
import random
# Configuración de la pantalla OLED
from machine import I2C, Pin
from ssd1306 import SSD1306_I2C
# Definir las dimensiones de la pantalla OLED
from machine import I2C, Pin
from ssd1306 import SSD1306_I2C
# Definir las dimensiones de la pantalla OLED
ancho = 128
alto = 64
# Inicializar la comunicación I2C
i2c = I2C(0, scl=Pin(22), sda=Pin(23))
# Inicializar el objeto OLED
oled = SSD1306_I2C(ancho, alto, i2c)
# Dibujar líneas en el límite de la pantalla
oled.hline(0, 0, ancho - 1, 1) # Línea superior
oled.hline(0, alto - 1, ancho - 1, 1) # Línea inferior
oled.vline(0, 0, alto - 1, 1) # Línea izquierda
oled.vline(ancho - 1, 0, alto - 1, 1) # Línea derecha
# Actualizar la pantalla
oled.show()
# Configura el joystick
joy_x_pin = ADC(Pin(35))
joy_y_pin = ADC(Pin(32))
# Inicializa la serpiente
snake = [(64, 32)]
direccion = (1, 0)
comida = (random.randint(0, 15) * 8, random.randint(0, 7) * 8)
velocidad = 0.3 # Controla la velocidad del juego
def mover_serpiente():
global snake, direccion, comida # Declarar como globales
nueva_cabeza = (snake[0][0] + direccion[0] * 8, snake[0][1] + direccion[1] * 8)
snake.insert(0, nueva_cabeza)
# Verifica si ha comido la comida
if snake[0] == comida:
comida = (random.randint(0, 15) * 8, random.randint(0, 7) * 8)
else:
snake.pop()
# Verifica las colisiones con las paredes
if (
nueva_cabeza[0] < 0
or nueva_cabeza[0] >= ancho
or nueva_cabeza[1] < 0
or nueva_cabeza[1] >= alto
):
return False
return True
while True:
# Leer los valores del joystick
joy_x = joy_x_pin.read_u16()
joy_y = joy_y_pin.read_u16()
if joy_x < 20000:
direccion = (1, 0) # Izquierda
elif joy_x > 45000:
direccion = (-1, 0) # Derecha
elif joy_y < 20000:
direccion = (0, 1) # Arriba
elif joy_y > 45000:
direccion = (0, -1) # Abajo
if not mover_serpiente():
break # El juego ha terminado
oled.fill(0)
oled.fill_rect(snake[0][0], snake[0][1], 8, 8, 1) # Dibuja la cabeza
for segmento in snake[1:]:
oled.fill_rect(segmento[0], segmento[1], 8, 8, 1) # Dibuja el cuerpo
oled.fill_rect(comida[0], comida[1], 8, 8, 1) # Dibuja la comida
oled.show()
time.sleep(velocidad)
# Juego terminado
oled.fill(0)
oled.text("GAME OVER", 10, alto // 2 - 10)
oled.show()