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",
|
||||
"cppStandard": "c++17",
|
||||
"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
|
||||
|
119
strontgame.ino
119
strontgame.ino
@ -34,30 +34,111 @@ const unsigned long updateInterval = 1000; // ms
|
||||
void drawBars() {
|
||||
// Draw yellow background for status area
|
||||
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.setCursor(BAR_LABEL_X, FOOD_BAR_Y);
|
||||
display.print("F");
|
||||
// Draw Poop bar label (P)
|
||||
display.setCursor(BAR_LABEL_X, POOP_BAR_Y);
|
||||
display.print("P");
|
||||
display.setTextSize(1);
|
||||
display.setCursor(BAR_X, FOOD_BAR_Y);
|
||||
display.print("FOOD");
|
||||
// Draw Poop bar label
|
||||
display.setCursor(BAR_X, POOP_BAR_Y);
|
||||
display.print("POOP");
|
||||
// Draw Food bar
|
||||
int foodBarLen = (food * BAR_WIDTH) / MAX_FOOD;
|
||||
display.fillRect(BAR_X, FOOD_BAR_Y, foodBarLen, BAR_HEIGHT, SSD1306_BLACK);
|
||||
display.drawRect(BAR_X, FOOD_BAR_Y, BAR_WIDTH, BAR_HEIGHT, SSD1306_BLACK);
|
||||
int foodBarLen = (food * (BAR_WIDTH - 30)) / MAX_FOOD; // leave space for label
|
||||
display.fillRect(BAR_X + 34, FOOD_BAR_Y, foodBarLen, BAR_HEIGHT, SSD1306_BLACK);
|
||||
display.drawRect(BAR_X + 34, FOOD_BAR_Y, BAR_WIDTH - 30, BAR_HEIGHT, SSD1306_BLACK);
|
||||
// Draw Poop bar
|
||||
int poopBarLen = (poop * BAR_WIDTH) / MAX_POOP;
|
||||
display.fillRect(BAR_X, POOP_BAR_Y, poopBarLen, BAR_HEIGHT, SSD1306_BLACK);
|
||||
display.drawRect(BAR_X, POOP_BAR_Y, BAR_WIDTH, BAR_HEIGHT, SSD1306_BLACK);
|
||||
int poopBarLen = (poop * (BAR_WIDTH - 30)) / MAX_POOP;
|
||||
display.fillRect(BAR_X + 34, POOP_BAR_Y, poopBarLen, 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) {
|
||||
display.clearDisplay();
|
||||
display.setTextColor(SSD1306_WHITE);
|
||||
display.setCursor(0, 24);
|
||||
// Draw yellow status bar with game over message
|
||||
display.fillRect(0, 0, SCREEN_WIDTH, YELLOW_BAR_HEIGHT, SSD1306_WHITE);
|
||||
display.setTextColor(SSD1306_BLACK);
|
||||
display.setTextSize(1);
|
||||
display.println("GAME OVER!");
|
||||
display.println(message);
|
||||
display.setCursor(2, 0);
|
||||
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();
|
||||
}
|
||||
|
||||
@ -130,6 +211,10 @@ void loop() {
|
||||
// Redraw bars
|
||||
display.clearDisplay();
|
||||
drawBars();
|
||||
// Animate stick figure in blue area
|
||||
static int frame = 0;
|
||||
drawStickFigure(frame);
|
||||
frame = (frame + 1) % 2;
|
||||
display.display();
|
||||
delay(50);
|
||||
delay(100);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user