Now with better graphics
This commit is contained in:
parent
dbc6e8c548
commit
226b65cb70
16
.vscode/c_cpp_properties.json
vendored
16
.vscode/c_cpp_properties.json
vendored
@ -10,6 +10,22 @@
|
|||||||
"cStandard": "c17",
|
"cStandard": "c17",
|
||||||
"cppStandard": "c++17",
|
"cppStandard": "c++17",
|
||||||
"intelliSenseMode": "linux-clang-x64"
|
"intelliSenseMode": "linux-clang-x64"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Arduino",
|
||||||
|
"includePath": [
|
||||||
|
"${workspaceFolder}/**",
|
||||||
|
"/home/bd/.arduino15/packages/arduino/hardware/avr/1.8.6/libraries/Wire/src",
|
||||||
|
"/home/bd/Arduino/libraries/Adafruit_SSD1306",
|
||||||
|
"/home/bd/Arduino/libraries/Adafruit_GFX_Library",
|
||||||
|
"/home/bd/Arduino/libraries/Adafruit_BusIO",
|
||||||
|
"/home/bd/.arduino15/packages/arduino/hardware/avr/1.8.6/libraries/SPI/src"
|
||||||
|
],
|
||||||
|
"forcedInclude": [],
|
||||||
|
"intelliSenseMode": "gcc-x64",
|
||||||
|
"compilerPath": "/usr/bin/avr-gcc",
|
||||||
|
"cStandard": "c11",
|
||||||
|
"cppStandard": "c++17"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"version": 4
|
"version": 4
|
||||||
|
119
strontgame.ino
119
strontgame.ino
@ -34,30 +34,111 @@ const unsigned long updateInterval = 1000; // ms
|
|||||||
void drawBars() {
|
void drawBars() {
|
||||||
// Draw yellow background for status area
|
// Draw yellow background for status area
|
||||||
display.fillRect(0, 0, SCREEN_WIDTH, YELLOW_BAR_HEIGHT, SSD1306_WHITE);
|
display.fillRect(0, 0, SCREEN_WIDTH, YELLOW_BAR_HEIGHT, SSD1306_WHITE);
|
||||||
// Draw Food bar label (F)
|
// Draw Food bar label
|
||||||
display.setTextColor(SSD1306_BLACK);
|
display.setTextColor(SSD1306_BLACK);
|
||||||
display.setCursor(BAR_LABEL_X, FOOD_BAR_Y);
|
display.setTextSize(1);
|
||||||
display.print("F");
|
display.setCursor(BAR_X, FOOD_BAR_Y);
|
||||||
// Draw Poop bar label (P)
|
display.print("FOOD");
|
||||||
display.setCursor(BAR_LABEL_X, POOP_BAR_Y);
|
// Draw Poop bar label
|
||||||
display.print("P");
|
display.setCursor(BAR_X, POOP_BAR_Y);
|
||||||
|
display.print("POOP");
|
||||||
// Draw Food bar
|
// Draw Food bar
|
||||||
int foodBarLen = (food * BAR_WIDTH) / MAX_FOOD;
|
int foodBarLen = (food * (BAR_WIDTH - 30)) / MAX_FOOD; // leave space for label
|
||||||
display.fillRect(BAR_X, FOOD_BAR_Y, foodBarLen, BAR_HEIGHT, SSD1306_BLACK);
|
display.fillRect(BAR_X + 34, FOOD_BAR_Y, foodBarLen, BAR_HEIGHT, SSD1306_BLACK);
|
||||||
display.drawRect(BAR_X, FOOD_BAR_Y, BAR_WIDTH, BAR_HEIGHT, SSD1306_BLACK);
|
display.drawRect(BAR_X + 34, FOOD_BAR_Y, BAR_WIDTH - 30, BAR_HEIGHT, SSD1306_BLACK);
|
||||||
// Draw Poop bar
|
// Draw Poop bar
|
||||||
int poopBarLen = (poop * BAR_WIDTH) / MAX_POOP;
|
int poopBarLen = (poop * (BAR_WIDTH - 30)) / MAX_POOP;
|
||||||
display.fillRect(BAR_X, POOP_BAR_Y, poopBarLen, BAR_HEIGHT, SSD1306_BLACK);
|
display.fillRect(BAR_X + 34, POOP_BAR_Y, poopBarLen, BAR_HEIGHT, SSD1306_BLACK);
|
||||||
display.drawRect(BAR_X, POOP_BAR_Y, BAR_WIDTH, BAR_HEIGHT, SSD1306_BLACK);
|
display.drawRect(BAR_X + 34, POOP_BAR_Y, BAR_WIDTH - 30, BAR_HEIGHT, SSD1306_BLACK);
|
||||||
|
display.setTextSize(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void drawStickFigure(int frame) {
|
||||||
|
// Draw a simple stick figure in the blue area (below yellow bar)
|
||||||
|
int baseY = 24;
|
||||||
|
int centerX = SCREEN_WIDTH / 2;
|
||||||
|
// Head
|
||||||
|
display.drawCircle(centerX, baseY, 6, SSD1306_WHITE);
|
||||||
|
// Body
|
||||||
|
display.drawLine(centerX, baseY + 6, centerX, baseY + 24, SSD1306_WHITE);
|
||||||
|
// Arms (simple animation)
|
||||||
|
if (frame % 2 == 0) {
|
||||||
|
display.drawLine(centerX, baseY + 10, centerX - 10, baseY + 18, SSD1306_WHITE);
|
||||||
|
display.drawLine(centerX, baseY + 10, centerX + 10, baseY + 18, SSD1306_WHITE);
|
||||||
|
} else {
|
||||||
|
display.drawLine(centerX, baseY + 10, centerX - 14, baseY + 14, SSD1306_WHITE);
|
||||||
|
display.drawLine(centerX, baseY + 10, centerX + 14, baseY + 14, SSD1306_WHITE);
|
||||||
|
}
|
||||||
|
// Legs
|
||||||
|
display.drawLine(centerX, baseY + 24, centerX - 10, baseY + 40, SSD1306_WHITE);
|
||||||
|
display.drawLine(centerX, baseY + 24, centerX + 10, baseY + 40, SSD1306_WHITE);
|
||||||
|
}
|
||||||
|
|
||||||
|
void drawStinkyPoop() {
|
||||||
|
// Draw a simple stinky poop in the blue area
|
||||||
|
int baseY = 32;
|
||||||
|
int centerX = SCREEN_WIDTH / 2;
|
||||||
|
// Poop base
|
||||||
|
display.fillCircle(centerX, baseY + 16, 8, SSD1306_WHITE);
|
||||||
|
display.fillCircle(centerX, baseY + 8, 6, SSD1306_WHITE);
|
||||||
|
display.fillCircle(centerX, baseY, 4, SSD1306_WHITE);
|
||||||
|
// Stink lines
|
||||||
|
display.drawLine(centerX - 6, baseY - 4, centerX - 6, baseY - 12, SSD1306_WHITE);
|
||||||
|
display.drawLine(centerX, baseY - 6, centerX, baseY - 16, SSD1306_WHITE);
|
||||||
|
display.drawLine(centerX + 6, baseY - 4, centerX + 6, baseY - 12, SSD1306_WHITE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void drawGameOver(const char* message) {
|
void drawGameOver(const char* message) {
|
||||||
display.clearDisplay();
|
display.clearDisplay();
|
||||||
display.setTextColor(SSD1306_WHITE);
|
// Draw yellow status bar with game over message
|
||||||
display.setCursor(0, 24);
|
display.fillRect(0, 0, SCREEN_WIDTH, YELLOW_BAR_HEIGHT, SSD1306_WHITE);
|
||||||
|
display.setTextColor(SSD1306_BLACK);
|
||||||
display.setTextSize(1);
|
display.setTextSize(1);
|
||||||
display.println("GAME OVER!");
|
display.setCursor(2, 0);
|
||||||
display.println(message);
|
display.print("GAME OVER!");
|
||||||
|
display.setCursor(2, 8);
|
||||||
|
display.print(message);
|
||||||
|
// Draw relevant icon in blue area
|
||||||
|
if (strcmp(message, "Poop explosion!") == 0) {
|
||||||
|
drawStinkyPoop();
|
||||||
|
} else if (strcmp(message, "Starved!") == 0) {
|
||||||
|
// Draw a sad stick figure
|
||||||
|
int baseY = 32;
|
||||||
|
int centerX = SCREEN_WIDTH / 2;
|
||||||
|
display.drawCircle(centerX, baseY, 6, SSD1306_WHITE);
|
||||||
|
display.drawLine(centerX, baseY + 6, centerX, baseY + 24, SSD1306_WHITE);
|
||||||
|
display.drawLine(centerX, baseY + 10, centerX - 10, baseY + 18, SSD1306_WHITE);
|
||||||
|
display.drawLine(centerX, baseY + 10, centerX + 10, baseY + 18, SSD1306_WHITE);
|
||||||
|
display.drawLine(centerX, baseY + 24, centerX - 10, baseY + 40, SSD1306_WHITE);
|
||||||
|
display.drawLine(centerX, baseY + 24, centerX + 10, baseY + 40, SSD1306_WHITE);
|
||||||
|
// Sad mouth (simple frown)
|
||||||
|
display.drawLine(centerX - 3, baseY + 6, centerX + 3, baseY + 6, SSD1306_WHITE);
|
||||||
|
} else if (strcmp(message, "Overate! Exploded!") == 0) {
|
||||||
|
// Draw a stick figure with a big belly
|
||||||
|
int baseY = 32;
|
||||||
|
int centerX = SCREEN_WIDTH / 2;
|
||||||
|
display.drawCircle(centerX, baseY, 6, SSD1306_WHITE);
|
||||||
|
display.drawLine(centerX, baseY + 6, centerX, baseY + 24, SSD1306_WHITE);
|
||||||
|
display.drawLine(centerX, baseY + 10, centerX - 10, baseY + 18, SSD1306_WHITE);
|
||||||
|
display.drawLine(centerX, baseY + 10, centerX + 10, baseY + 18, SSD1306_WHITE);
|
||||||
|
display.drawLine(centerX, baseY + 24, centerX - 10, baseY + 40, SSD1306_WHITE);
|
||||||
|
display.drawLine(centerX, baseY + 24, centerX + 10, baseY + 40, SSD1306_WHITE);
|
||||||
|
// Big belly
|
||||||
|
display.drawCircle(centerX, baseY + 18, 8, SSD1306_WHITE);
|
||||||
|
} else if (strcmp(message, "Constipation!") == 0) {
|
||||||
|
// Draw a stick figure with a pained face
|
||||||
|
int baseY = 32;
|
||||||
|
int centerX = SCREEN_WIDTH / 2;
|
||||||
|
display.drawCircle(centerX, baseY, 6, SSD1306_WHITE);
|
||||||
|
display.drawLine(centerX, baseY + 6, centerX, baseY + 24, SSD1306_WHITE);
|
||||||
|
display.drawLine(centerX, baseY + 10, centerX - 10, baseY + 18, SSD1306_WHITE);
|
||||||
|
display.drawLine(centerX, baseY + 10, centerX + 10, baseY + 18, SSD1306_WHITE);
|
||||||
|
display.drawLine(centerX, baseY + 24, centerX - 10, baseY + 40, SSD1306_WHITE);
|
||||||
|
display.drawLine(centerX, baseY + 24, centerX + 10, baseY + 40, SSD1306_WHITE);
|
||||||
|
// Pained mouth (zigzag)
|
||||||
|
display.drawLine(centerX - 2, baseY + 5, centerX, baseY + 7, SSD1306_WHITE);
|
||||||
|
display.drawLine(centerX, baseY + 7, centerX + 2, baseY + 5, SSD1306_WHITE);
|
||||||
|
}
|
||||||
display.display();
|
display.display();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -130,6 +211,10 @@ void loop() {
|
|||||||
// Redraw bars
|
// Redraw bars
|
||||||
display.clearDisplay();
|
display.clearDisplay();
|
||||||
drawBars();
|
drawBars();
|
||||||
|
// Animate stick figure in blue area
|
||||||
|
static int frame = 0;
|
||||||
|
drawStickFigure(frame);
|
||||||
|
frame = (frame + 1) % 2;
|
||||||
display.display();
|
display.display();
|
||||||
delay(50);
|
delay(100);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user