#include <Arduino.h>
#include <U8x8lib.h>
U8X8_SSD1306_128X64_NONAME_SW_I2C u8x8(4, 3, U8X8_PIN_NONE);
unsigned char epd_bitmap__tile_dice_empty [] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
unsigned char epd_bitmap__tile_dice_dot [] = {
0x00, 0x3c, 0x7e, 0x7e, 0x7e, 0x7e, 0x3c, 0x00
};
unsigned char epd_bitmap__tile_outline_left [] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff
};
unsigned char epd_bitmap__tile_outline_right [] = {
0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
unsigned char epd_bitmap__tile_outline_bottom [] = {
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01
};
unsigned char epd_bitmap__tile_outline_top [] = {
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80
};
byte dice_tile_lookup[7][9] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 1, 0, 0, 0, 0 },
{ 1, 0, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 0, 0, 0, 1, 0, 0, 0, 1 },
{ 1, 0, 1, 0, 0, 0, 1, 0, 1 },
{ 1, 0, 1, 0, 1, 0, 1, 0, 1 },
{ 1, 0, 1, 1, 0, 1, 1, 0, 1 }
};
void setup(void)
{
u8x8.begin();
u8x8.setPowerSave(0);
u8x8.drawTile(3, 2, 1, epd_bitmap__tile_outline_top);
u8x8.drawTile(4, 2, 1, epd_bitmap__tile_outline_top);
u8x8.drawTile(5, 2, 1, epd_bitmap__tile_outline_top);
u8x8.drawTile(6, 3, 1, epd_bitmap__tile_outline_right);
u8x8.drawTile(6, 4, 1, epd_bitmap__tile_outline_right);
u8x8.drawTile(6, 5, 1, epd_bitmap__tile_outline_right);
u8x8.drawTile(5, 6, 1, epd_bitmap__tile_outline_bottom);
u8x8.drawTile(4, 6, 1, epd_bitmap__tile_outline_bottom);
u8x8.drawTile(3, 6, 1, epd_bitmap__tile_outline_bottom);
u8x8.drawTile(2, 5, 1, epd_bitmap__tile_outline_left);
u8x8.drawTile(2, 4, 1, epd_bitmap__tile_outline_left);
u8x8.drawTile(2, 3, 1, epd_bitmap__tile_outline_left);
u8x8.drawTile(10, 2, 1, epd_bitmap__tile_outline_top);
u8x8.drawTile(11, 2, 1, epd_bitmap__tile_outline_top);
u8x8.drawTile(12, 2, 1, epd_bitmap__tile_outline_top);
u8x8.drawTile(13, 3, 1, epd_bitmap__tile_outline_right);
u8x8.drawTile(13, 4, 1, epd_bitmap__tile_outline_right);
u8x8.drawTile(13, 5, 1, epd_bitmap__tile_outline_right);
u8x8.drawTile(12, 6, 1, epd_bitmap__tile_outline_bottom);
u8x8.drawTile(11, 6, 1, epd_bitmap__tile_outline_bottom);
u8x8.drawTile(10, 6, 1, epd_bitmap__tile_outline_bottom);
u8x8.drawTile(9, 5, 1, epd_bitmap__tile_outline_left);
u8x8.drawTile(9, 4, 1, epd_bitmap__tile_outline_left);
u8x8.drawTile(9, 3, 1, epd_bitmap__tile_outline_left);
u8x8.setFont(u8x8_font_chroma48medium8_r);
u8x8.drawString(0, 1, " Dice Game! ");
pinMode(0, INPUT);
}
void draw_dice(byte xoffset, byte yoffset, byte dice_number, byte dice_number_previous) {
for (byte i = 0; i < 9; i++) {
if ((dice_tile_lookup[dice_number][i] == 1) && (dice_tile_lookup[dice_number_previous][i] != 1)) {
u8x8.drawTile(xoffset + (i % 3), yoffset + (i / 3), 1, epd_bitmap__tile_dice_dot);
}
else if ((dice_tile_lookup[dice_number][i] == 0) && (dice_tile_lookup[dice_number_previous][i] != 0)) {
u8x8.drawTile(xoffset + (i % 3), yoffset + (i / 3), 1, epd_bitmap__tile_dice_empty);
}
}
}
byte dice_left = 0;
byte dice_right = 0;
byte dice_left_prev = 0;
byte dice_right_prev = 0;
unsigned long elapsed_time_millis;
unsigned long elapsed_time_millis_prev;
byte game_status = 0;
void loop(void)
{
if (game_status == 1) {
elapsed_time_millis = millis();
if ((elapsed_time_millis - elapsed_time_millis_prev) > 500) {
dice_left = random(1, 6);
dice_right = random(1, 6);
draw_dice(3, 3, dice_left, dice_left_prev);
draw_dice(10, 3, dice_right, dice_right_prev);
dice_left_prev = dice_left;
dice_right_prev = dice_right;
elapsed_time_millis_prev = elapsed_time_millis;
}
}
if (digitalRead(0) == HIGH) {
if (game_status == 0) {
u8x8.drawString(0, 1, "Press btn = stop");
game_status = 1;
} else if (game_status == 1) {
if (dice_left == dice_right) {
u8x8.drawString(0, 1, " Winner!! ");
} else {
u8x8.drawString(0, 1, "Sorry not winner");
}
game_status = 2;
} else if (game_status == 2) {
dice_left = 0;
dice_right = 0;
draw_dice(3, 3, dice_left, dice_left_prev);
draw_dice(10, 3, dice_right, dice_right_prev);
dice_left_prev = dice_left;
dice_right_prev = dice_right;
u8x8.drawString(0, 1, " Dice Game! ");
game_status = 0;
}
delay(50);
}
}