/* CARA BERMAIN PIN PONG ARDUINO
.PUSHBUTTON KUNING UNTUK ATAS
.PUSHBUTTON BIRU UNTUK BAWAH
SUMBER CODE :
TIKTOK : @vickyrnf
INSTAGRAM : @vickyrnf
****SELAMAT BERMAIN****
*/
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define BALL_SIZE 2
#define PADDLE_WIDTH 4
#define PADDLE_HEIGHT 16
#define PADDLE_SPEED 2
Adafruit_SSD1306 display(128, 64, &Wire, -1);
int bt1 = 2;
int bt2 = 3;
int ballX = 64, ballY = 32, ballDX = 1, ballDY = 1;
int paddleY = 32;
int score = 0;
void setup() {
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.print("Score: ");
display.setCursor(64, 0);
display.print(score);
display.display();
pinMode(bt1, INPUT_PULLUP);
pinMode(bt2, INPUT_PULLUP);
}
void loop() {
int ks1 =digitalRead(bt1);
int ks2 =digitalRead(bt2);
ballX += ballDX;
ballY += ballDY;
if (ballX < 0 || ballX > 127) {
if (ballX < 0) score++;
ballX = 64;
ballY = 32;
ballDX = -ballDX;
}
if (ballY < 0 || ballY + BALL_SIZE > 63) {
ballDY = -ballDY;
}
if (ballX < 16 + PADDLE_WIDTH && ballY + BALL_SIZE > paddleY && ballY < paddleY + PADDLE_HEIGHT) {
ballDX = -ballDX;
ballDY = (ballY + BALL_SIZE / 2) - (paddleY + PADDLE_HEIGHT / 2);
ballDY /= 4;
ballDX += random(-2, 2);
ballDY += random(-2, 2);
}
if(ks1 == LOW){
paddleY -= PADDLE_SPEED;
}
if(ks2 == LOW){
paddleY += PADDLE_SPEED;
}
if (paddleY < 0) paddleY = 0;
if (paddleY + PADDLE_HEIGHT > 63) paddleY = 63 - PADDLE_HEIGHT;
display.clearDisplay();
display.setCursor(0, 0);
display.print("Score: ");
display.setCursor(64, 0);
display.print(score);
display.fillRect(0, paddleY, PADDLE_WIDTH, PADDLE_HEIGHT, WHITE);
display.fillRect(ballX, ballY, BALL_SIZE, BALL_SIZE, WHITE);
display.display();
delay(10);
}