Pong della Polistil |
Questo progettino e' fatto soltanto per divertirsi e per imparare ad usare l'SSD1306, non c'e' nessuna pretesa di giocabilita'
Come sul pong originale il controllo della racchetta avviene mediante un potenziometro.
Via via che il gioco va avanti la velocita' della palla aumenta
// -------------------------------------------------------------------------------------
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
int x;
int y;
int dx = 2;
int dy = 2;
int yb = 0;
int punteggio;
int contatore;
int ritardo;
#if (SSD1306_LCDHEIGHT != 32)
#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif
void setup() {
Serial.begin(9600);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.display();
delay(200);
punteggio = 48; //codice ASCII per il numero zero
x = 64;
y = random(30);
contatore = 0;
ritardo = 40;
randomSeed(analogRead(0));
}
void loop() {
x = x + dx;
y = y + dy;
display.clearDisplay();
// disegna il punto
display.drawPixel(x, y, WHITE);
//disegna il punteggio
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(120,0);
display.write(punteggio);
//display.display();
//legge il potenziometro
int pot = analogRead(A2);
Serial.println(pot);
yb = round(pot/25);
// disegna il rettangolo
display.fillRect(1, yb, 2, 7, 1);
display.display();
// se trova una parete rimbalza
if (x >= 127) dx = -dx;
if (y >= 31) dy = -dy;
//if (x <= 1) dx = -dx;
if (y <= 1) dy = -dy;
// se e' sulla parete di destra controlla la posizione
// della barra
// se rimbalza inverte la direzione
if (x < 7)
{
if ((y >= yb) && (y <= yb+7))
{
dx = -dx;
// dopo 10 rimbalzi consecutivi il gioco si fa piu' veloce
contatore = contatore + 1;
if (contatore == 3)
{
contatore = 0;
ritardo = ritardo = ritardo - 3;
}
}
else
{
punteggio = punteggio + 1;
delay(500);
x = 64;
y = random(30);
dx = 2;
dy = 2;
ritardo = 40;
contatore = 0;
}
}
delay(ritardo);
}