Gra Pong na Ekranie Oled ssd1306 i esp8266

Typ_projektu
microPython
Zdjecie główne
grapong
Krótki opis projektu

Projekt polegał na utworzeniu gry pong dla dwóch graczy przy użyciu modułu ESP8266 i płytki do gier "game console" od sic.edu.

Niezbędne elementy

1. Płytka Arduino ESP8266

2. Game console od sic.edu

3. kabel mikro USB - USB

4. Ekran OLED SSD1306 (132x64)

Sprzęt

Do zaimplementowania kodu, poza niezbędnymi elementami będziemy potrzebowali Komputera, z wejściem USB i z wgranym sterownikiem CP210x, bez którego płytka nie będzie wykrywana. Do implementacji kodu napisanego w microPython'nie użyjemy programu Thonny.
 

Opis projektu

Podłączamy nasze elementy ze sobą zgodnie z oznaczeniami (zwrócić uwagę na pin "SDA" ekranu OLED i piny ESP8266). Podłączamy płytkę ESP do komputera przez mikro usb i instalujemy na naszym komputerze niezbędny sterownik CP210x. Jeśli dobrze wykonaliśmy  ten krok to płytka, powinna być wykrywana przez komputer w programie Thonny. Wklejamy i wgrywamy nasz kod, i gra powinna działać.

Zdjęcia
kod programu
from machine import Pin, I2C
import ssd1306
import time

# Inicjalizacja OLED
i2c = I2C(scl=Pin(5), sda=Pin(4))  # Dostosuj, jeśli używasz innych pinów
oled = ssd1306.SSD1306_I2C(128, 64, i2c)

# Inicjalizacja przycisków
button_up_left = Pin(12, Pin.IN, Pin.PULL_UP)
button_down_left = Pin(13, Pin.IN, Pin.PULL_UP)
button_up_right = Pin(2, Pin.IN, Pin.PULL_UP)
button_down_right = Pin(14, Pin.IN, Pin.PULL_UP)

# Parametry gry
paddle_height = 16
game_speed = 0.02

# Funkcja do resetu gry
def reset_game():
    global paddle_left_y, paddle_right_y, ball_x, ball_y, ball_dx, ball_dy
    # Paletki
    paddle_left_y = 26
    paddle_right_y = 26
    # Piłka
    ball_x = 64
    ball_y = 32
    ball_dx = 2
    ball_dy = 2

# Funkcja do rysowania stanu gry
def draw_game():
    oled.fill(0)  # Wyczyść ekran
    # Rysuj paletkę lewą
    oled.fill_rect(2, paddle_left_y, 3, paddle_height, 1)
    # Rysuj paletkę prawą
    oled.fill_rect(123, paddle_right_y, 3, paddle_height, 1)
    # Rysuj piłkę
    oled.fill_rect(ball_x, ball_y, 3, 3, 1)
    # Wyświetl zmiany
    oled.show()

# Reset gry na początku
reset_game()

# Główna pętla gry
while True:
    # Sterowanie paletką lewą
    if not button_up_left.value() and paddle_left_y > 0:
        paddle_left_y -= 2
    if not button_down_left.value() and paddle_left_y < (64 - paddle_height):
        paddle_left_y += 2

    # Sterowanie paletką prawą
    if not button_up_right.value() and paddle_right_y > 0:
        paddle_right_y -= 2
    if not button_down_right.value() and paddle_right_y < (64 - paddle_height):
        paddle_right_y += 2

    # Ruch piłki
    ball_x += ball_dx
    ball_y += ball_dy

    # Odbicia piłki od górnej i dolnej ściany
    if ball_y <= 0 or ball_y >= 61:
        ball_dy *= -1

    # Odbicia od paletki lewej
    if ball_x <= 5 and paddle_left_y <= ball_y <= paddle_left_y + paddle_height:
        ball_dx *= -1

    # Odbicia od paletki prawej
    if ball_x >= 120 and paddle_right_y <= ball_y <= paddle_right_y + paddle_height:
        ball_dx *= -1

    # Sprawdzenie, czy piłka wyszła poza ekran
    if ball_x < 0 or ball_x > 127:
        oled.fill(0)
        oled.text("Game Over!", 30, 24, 1)
        oled.show()
        time.sleep(3)  # Wyświetlenie komunikatu przez 3 sekundy
        reset_game()  # Restart gry
        continue

    # Narysuj stan gry
    draw_game()
    time.sleep(game_speed)

Pliki_projektu
Youtube
Tagi
#esp8266 #pong #gry #ssd1306 #microPython #gameconsole