Alamat email Anda tidak akan dipublikasikan. Bidang yang harus diisi ditandai *
#termasuk
#termasuk
#termasuk
#termasuk
#define SCREEN_WIDTH 128 // Lebar tampilan OLED, dalam piksel
#define SCREEN_HEIGHT 64 // Tinggi tampilan OLED, dalam piksel
#define OLED_RESET 4 // Atur ulang pin # (atau -1 jika berbagi pin atur ulang Arduino)
Tampilan Adafruit_SSD1306 (SCREEN_WIDTH, SCREEN_HEIGHT, & Kawat, OLED_RESET); // Deklarasi untuk tampilan SSD1306 yang terhubung ke I2C (SDA, pin SCL)
resolusi int [2] = {SCREEN_WIDTH, SCREEN_HEIGHT}
, bola [2] = {20, (resolusi [1] / 2)};
const int PIXEL_SIZE = 8
, WALL_WIDTH = 4
, PADDLE_WIDTH = 4
, BALL_SIZE = 4
, SPEED = 3;
int playerScore = 0
, aiScore = 0
, playerPos = 0
, aiPos = 0;
char ballDirectionHori = 'R'
, ballDirectionVerti = 'S';
boolean inProgress = true;
// Prototipo das funcoes
membatalkan movePlayer ();
membatalkan moveAi ();
batal drawScore ();
membatalkan eraseScore ();
membatalkan drawNet ();
membatalkan drawPixel (int posX, int postY, int dimensi);
membatalkan erasePixel (int posX, int posY, int dimensi);
membatalkan drawPlayerPaddle (baris int);
membatalkan erasePlayerPaddle (baris int);
batal drawAiPaddle (baris int);
membatalkan eraseAiPaddle (baris int);
membatalkan drawBall (int x, int y);
void eraseBall (int x, int y);
pengaturan batal () {
Serial.begin (9600);
// SSD1306_SWITCHCAPVCC = hasilkan tegangan tampilan dari 3.3V secara internal
if (! display.begin (SSD1306_SWITCHCAPVCC, 0x3C)) {// Alamat 0x3D untuk 128x64
Serial.println (F ("Alokasi SSD1306 gagal"));
untuk (;;); // Jangan lanjutkan, ulangi selamanya
}
display.display ();
delay (2000); // Diam selama 2 detik
// Kosongkan buffer
display.clearDisplay ();
}
void loop () {
if (aiScore> 3 || playerScore> 3) {// periksa kondisi permainan
inProgress = false;
// seseorang telah menang
display.clearDisplay ();
display.setTextSize (4);
display.setTextColor (WHITE);
display.setCursor (0, 0); // cari tahu siapa
if (aiScore> playerScore)
display.println ("YOU LOSE!");
lain jika (playerScore> aiScore)
display.println ("ANDA MENANG!");
}
if (inProgress) {
eraseScore ();
eraseBall (bola [0], bola [1]);
if (ballDirectionVerti == 'U') // pindahkan bola ke atas secara diagonal
ball [1] = ball [1] - SPEED;
if (ballDirectionVerti == 'D') // pindahkan bola ke bawah secara diagonal
ball [1] = ball [1] + SPEED;
if (ball [1] = resolusi [1]) // memantulkan bola dari bawah
ballDirectionVerti = 'U';
if (ballDirectionHori == 'R') {
ball [0] = ball [0] + SPEED; // pindahkan bola
if (bola [0]> = (resolusi [0] - 6)) {// bola ada di tepi AI layar
if ((aiPos + 12)> = ball [1] && (aiPos - 12) (aiPos + 2)) // membelokkan bola ke bawah
ballDirectionVerti = 'D';
lain jika (bola [1] ballDirectionVerti = 'U';
selain itu // membelokkan bola lurus
ballDirectionVerti = 'S';
ballDirectionHori = 'L'; // ubah arah bola
} else {// GOAL!
bola [0] = 6; // pindahkan bola ke sisi lain layar
ballDirectionVerti = 'S'; // atur ulang bola ke straight travel
bola [1] = resolusi [1] / 2; // pindahkan bola ke tengah layar
++ pemainScore; // tingkatkan skor pemain
}
}
}
if (ballDirectionHori == 'L') {
ball [0] = ball [0] - SPEED; // pindahkan bola
if (ball [0] = ball [1] && (playerPos - 12) (playerPos + 2)) // membelokkan bola ke bawah
ballDirectionVerti = 'D';
lain jika (bola [1] aiPos)
++ aiPos;
lain jika (bola [1]
drawAiPaddle (aiPos);
}
membatalkan drawScore () {// Menggambar skor AI dan pemain
display.setTextSize (2);
display.setTextColor (WHITE);
display.setCursor (45, 0);
display.println (playerScore);
display.setCursor (75, 0);
display.println (aiScore);
}
void eraseScore () {// Hapus skor AI dan pemain
display.setTextSize (2);
display.setTextColor (BLACK);
display.setCursor (45, 0);
display.println (playerScore);
display.setCursor (75, 0);
display.println (aiScore);
}
membatalkan drawNet () {// Gambar bidang garis
untuk (int i = 0; i drawPixel (((resolusi [0] / 2) - 1), i * (WALL_WIDTH) + (WALL_WIDTH * i), WALL_WIDTH);
}
membatalkan drawPixel (int posX, int postY, dimensi int) {// Gambar grup piksel
untuk (int x = 0; x
}
void erasePixel (int posX, int posY, dimensi int) {// Hapus grup piksel
untuk (int x = 0; x
}
membatalkan drawPlayerPaddle (baris int) {
drawPixel (0, baris - (PADDLE_WIDTH * 2), PADDLE_WIDTH);
drawPixel (0, baris - PADDLE_WIDTH, PADDLE_WIDTH);
drawPixel (0, baris, PADDLE_WIDTH);
drawPixel (0, baris + PADDLE_WIDTH, PADDLE_WIDTH);
drawPixel (0, baris + (PADDLE_WIDTH + 2), PADDLE_WIDTH);
}
void erasePlayerPaddle (baris int) {
erasePixel (0, baris - (PADDLE_WIDTH * 2), PADDLE_WIDTH);
erasePixel (0, baris - PADDLE_WIDTH, PADDLE_WIDTH);
erasePixel (0, baris, PADDLE_WIDTH);
erasePixel (0, baris + PADDLE_WIDTH, PADDLE_WIDTH);
erasePixel (0, baris + (PADDLE_WIDTH + 2), PADDLE_WIDTH);
}
batal drawAiPaddle (baris int) {
int kolom = resolusi [0] - PADDLE_WIDTH;
drawPixel (kolom, baris - (PADDLE_WIDTH * 2), PADDLE_WIDTH);
drawPixel (kolom, baris - PADDLE_WIDTH, PADDLE_WIDTH);
drawPixel (kolom, baris, PADDLE_WIDTH);
drawPixel (kolom, baris + PADDLE_WIDTH, PADDLE_WIDTH);
drawPixel (kolom, baris + (PADDLE_WIDTH * 2), PADDLE_WIDTH);
}
void eraseAiPaddle (baris int) {
int kolom = resolusi [0] - PADDLE_WIDTH;
erasePixel (kolom, baris - (PADDLE_WIDTH * 2), PADDLE_WIDTH);
erasePixel (kolom, baris - PADDLE_WIDTH, PADDLE_WIDTH);
erasePixel (kolom, baris, PADDLE_WIDTH);
erasePixel (kolom, baris + PADDLE_WIDTH, PADDLE_WIDTH);
erasePixel (kolom, baris + (PADDLE_WIDTH * 2), PADDLE_WIDTH);
}
membatalkan 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);
}