Sähköpostiosoitettasi ei julkaista. pakolliset kentät on merkitty *
#sisältää
#sisältää
#sisältää
#sisältää
#define SCREEN_WIDTH 128 // OLED-näytön leveys kuvapisteinä
#define SCREEN_HEIGHT 64 // OLED-näytön korkeus kuvapisteinä
#define OLED_RESET 4 // Nollaa nasta # (tai -1, jos jaat Arduinon nollaustapin)
Adafruit_SSD1306-näyttö (SCREEN_WIDTH, SCREEN_HEIGHT, & Wire, OLED_RESET); // Ilmoitus IDC: hen kytketystä SSD1306-näytöstä (SDA, SCL-nastat)
intresoluutio [2] = {SCREEN_WIDTH, SCREEN_HEIGHT}
, pallo [2] = {20, (resoluutio [1] / 2)};
const int PIXEL_SIZE = 8
, WALL_WIDTH = 4
, PADDLE_WIDTH = 4
, BALL_SIZE = 4
, NOPEUS = 3;
int pelaajaScore = 0
, aiScore = 0
, pelaajaPos = 0
, aiPos = 0;
char ballDirectionHori = 'R'
, ballDirectionVerti = 'S';
boolean inProgress = true;
// Prototipo das funcoes
void movePlayer ();
tyhjä siirtoAi ();
void drawScore ();
tyhjä tyhjennysScore ();
void drawNet ();
void drawPixel (int posX, int posY, int mitat);
void erasePixel (int posX, int posY, int mitat);
void drawPlayerPaddle (int-rivi);
void erasePlayerPaddle (int-rivi);
void drawAiPaddle (int-rivi);
tyhjä tyhjennysAiPaddle (int-rivi);
tyhjä vetopallo (int x, int y);
tyhjä tyhjennyspallo (int x, int y);
tyhjä asennus () {
Serial.begin (9600);
// SSD1306_SWITCHCAPVCC = tuottaa näyttöjännitteen 3,3 V: n sisäisesti
if (! display.begin (SSD1306_SWITCHCAPVCC, 0x3C)) {// Osoite 0x3D 128x64: lle
Serial.println (F ("SSD1306-allokointi epäonnistui"));
varten (;;); // Älä jatka, silmukka ikuisesti
}
display.display ();
viive (2000); // Tauko 2 sekunniksi
// Poista puskuri
display.clearDisplay ();
}
tyhjä silmukka () {
if (aiScore> 3 || playerScore> 3) {// tarkista pelitila
inProgress = väärä;
// joku on voittanut
display.clearDisplay ();
display.setTextSize (4);
display.setTextColor (WHITE);
display.setCursor (0, 0); // selvittää kuka
if (aiScore> playerScore)
display.println ("menetät!");
muuten jos (playerScore> aiScore)
display.println ("VOIT VOIT!");
}
if (inProgress) {
eraseScore ();
eraseBall (pallo [0], pallo [1]);
if (ballDirectionVerti == 'U') // siirrä palloa ylöspäin vinottain
pallo [1] = pallo [1] - NOPEUS;
if (ballDirectionVerti == 'D') // siirrä palloa alaspäin vinottain
pallo [1] = pallo [1] + NOPEUS;
if (pallo [1] = resoluutio [1]) // pomppaa pallo pohjasta
ballDirectionVerti = 'U';
if (ballDirectionHori == 'R') {
pallo [0] = pallo [0] + NOPEUS; // siirtää palloa
if (pallo [0]> = (tarkkuus [0] - 6)) {// pallo on näytön AI-reunassa
if ((aiPos + 12)> = pallo [1] && (aiPos - 12) (aiPos + 2)) // ohjaa pallo alas
ballDirectionVerti = 'D';
muuten jos (pallo [1] ballDirectionVerti = 'U';
else // taivuta pallo suoraan
ballDirectionVerti = 'S';
ballDirectionHori = 'L'; // muuttaa pallon suuntaa
} muuta {// TAVOITE!
pallo [0] = 6; // siirrä pallo näytön toiselle puolelle
ballDirectionVerti = 'S'; // palauta pallo suoriin matkoihin
pallo [1] = erotuskyky [1] / 2; // siirrä pallo näytön keskelle
++ playerScore; // lisää pelaajan pisteet
}
}
}
if (ballDirectionHori == 'L') {
pallo [0] = pallo [0] - NOPEUS; // siirtää palloa
if (pallo [0] = pallo [1] && (playerPos - 12) (playerPos + 2)) // ohjaa pallo alas
ballDirectionVerti = 'D';
muuten jos (pallo [1] aiPos)
++ aiPos;
muuten jos (pallo [1]
drawAiPaddle (aiPos);
}
void drawScore () {// Piirrä AI ja pelaajien tulokset
display.setTextSize (2);
display.setTextColor (WHITE);
display.setCursor (45, 0);
display.println (playerScore);
display.setCursor (75, 0);
display.println (aiScore);
}
void eraseScore () {// Poista AI ja pelaajien tulokset
display.setTextSize (2);
display.setTextColor (MUSTA);
display.setCursor (45, 0);
display.println (playerScore);
display.setCursor (75, 0);
display.println (aiScore);
}
void drawNet () {// Piirrä viivakenttä
varten (int i = 0; i drawPixel (((resoluutio [0] / 2) - 1), i * (WALL_WIDTH) + (WALL_WIDTH * i), WALL_WIDTH);
}
void drawPixel (int posX, int posY, int mitat) {// Piirrä pikseliryhmä
for (int x = 0; x
}
void erasePixel (int posX, int posY, int mitat) {// Poista pikseliryhmä
for (int x = 0; x
}
void drawPlayerPaddle (int-rivi) {
drawPixel (0, rivi - (PADDLE_WIDTH * 2), PADDLE_WIDTH);
drawPixel (0, rivi - PADDLE_WIDTH, PADDLE_WIDTH);
drawPixel (0, rivi, PADDLE_WIDTH);
drawPixel (0, rivi + PADDLE_WIDTH, PADDLE_WIDTH);
drawPixel (0, rivi + (PADDLE_WIDTH + 2), PADDLE_WIDTH);
}
tyhjä erasePlayerPaddle (int-rivi) {
erasePixel (0, rivi - (PADDLE_WIDTH * 2), PADDLE_WIDTH);
erasePixel (0, rivi - PADDLE_WIDTH, PADDLE_WIDTH);
erasePixel (0, rivi, PADDLE_WIDTH);
erasePixel (0, rivi + PADDLE_WIDTH, PADDLE_WIDTH);
erasePixel (0, rivi + (PADDLE_WIDTH + 2), PADDLE_WIDTH);
}
void drawAiPaddle (int-rivi) {
int-sarake = resoluutio [0] - PADDLE_WIDTH;
drawPixel (sarake, rivi - (PADDLE_WIDTH * 2), PADDLE_WIDTH);
drawPixel (sarake, rivi - PADDLE_WIDTH, PADDLE_WIDTH);
drawPixel (sarake, rivi, PADDLE_WIDTH);
drawPixel (sarake, rivi + PADDLE_WIDTH, PADDLE_WIDTH);
drawPixel (sarake, rivi + (PADDLE_WIDTH * 2), PADDLE_WIDTH);
}
tyhjä eraseAiPaddle (int-rivi) {
int-sarake = resoluutio [0] - PADDLE_WIDTH;
erasePixel (sarake, rivi - (PADDLE_WIDTH * 2), PADDLE_WIDTH);
erasePixel (sarake, rivi - PADDLE_WIDTH, PADDLE_WIDTH);
erasePixel (sarake, rivi, PADDLE_WIDTH);
erasePixel (sarake, rivi + PADDLE_WIDTH, PADDLE_WIDTH);
erasePixel (sarake, rivi + (PADDLE_WIDTH * 2), PADDLE_WIDTH);
}
void drawBall (int x, int y) {
display.drawCircle (x, y, BALL_SIZE, WHITE);
}
void eraseBall (int x, int y) {
display.drawCircle (x, y, BALL_SIZE, BLACK);
}