1
2
3
4
5
6#include <Adafruit_SSD1306.h>
7
8#define BUTTON_PIN 7
9
10bool isJumping = false;
11int dinoY = 40;
12int velocity = 0;
13const int gravity = 2;
14const int groundY = 40;
15int cactusX = 128;
16
17Adafruit_SSD1306 display(128, 64, &Wire, -1);
18
19void setup() {
20 pinMode(BUTTON_PIN, INPUT);
21
22 if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
23 while (1);
24 }
25
26 display.clearDisplay();
27}
28
29void loop() {
30 static bool buttonPressed = false;
31
32
33 if (digitalRead(BUTTON_PIN) == HIGH && !buttonPressed) {
34 buttonPressed = true;
35 isJumping = true;
36 velocity = -10;
37 delay(50);
38 }
39
40 if (digitalRead(BUTTON_PIN) == LOW) {
41 buttonPressed = false;
42 }
43
44
45 if (isJumping) {
46 dinoY += velocity;
47 velocity += gravity;
48 if (dinoY >= groundY) {
49 dinoY = groundY;
50 isJumping = false;
51 }
52 }
53
54
55 cactusX -= 3;
56 if (cactusX < -10) cactusX = 128;
57
58
59 display.clearDisplay();
60 display.fillRect(10, dinoY, 10, 10, SSD1306_WHITE);
61 display.fillRect(cactusX, groundY, 10, 15, SSD1306_WHITE);
62 display.drawLine(0, 58, 128, 58, SSD1306_WHITE);
63 display.display();
64
65
66 if (cactusX < 20 && cactusX > 5 && dinoY == groundY) {
67 display.clearDisplay();
68 display.setTextSize(2);
69 display.setTextColor(SSD1306_WHITE);
70 display.setCursor(20, 20);
71 display.print("Game Over");
72 display.display();
73 while (1);
74 }
75
76 delay(50);
77}