From 0a796000de9da71ebc38ecff98fe0e37e8865b15 Mon Sep 17 00:00:00 2001 From: denismr Date: Sun, 3 Mar 2019 16:04:59 -0300 Subject: [PATCH] Add files via upload --- My_settings.h | 7 + README.MD | 25 +++ assets.h | 181 +++++++++++++++++ main.cpp | 546 ++++++++++++++++++++++++++++++++++++++++++++++++++ mbed_config.h | 1 + raquer.bin | Bin 0 -> 65140 bytes 6 files changed, 760 insertions(+) create mode 100644 My_settings.h create mode 100644 README.MD create mode 100644 assets.h create mode 100644 main.cpp create mode 100644 mbed_config.h create mode 100644 raquer.bin diff --git a/My_settings.h b/My_settings.h new file mode 100644 index 0000000..7c48b90 --- /dev/null +++ b/My_settings.h @@ -0,0 +1,7 @@ +#ifndef MY_SETTINGS_H +#define MY_SETTINGS_H + +#define PROJ_SCREENMODE 2 +#define PROJ_ENABLE_SOUND 0 + +#endif \ No newline at end of file diff --git a/README.MD b/README.MD new file mode 100644 index 0000000..19c668a --- /dev/null +++ b/README.MD @@ -0,0 +1,25 @@ +# Raquer * Mete + +It's a clone of the minigame [Hack*Match](https://www.youtube.com/watch?v=socMP6jpA_A) in the excellent [Exapunks](http://www.zachtronics.com/exapunks/), made for the [Pokitto](https://www.pokitto.com/). + +It's a rather faithful clone, including freezing time, combos, bombs, and same number of lines and columns. The most notable missing feature is the speed not increasing over time in this version. + +The game does not have sound, at least yet. I may add sfx later on. I may also fine-tune freenzing time, bomb rate, falling speed, the **color palette**, etc. + +You can find a video of the game running on the [emulator](https://github.com/felipemanga/PokittoEmu) with this [link](https://youtu.be/QAOuVoEG2bc) and on the **actual Pokitto** [here](https://youtu.be/mi8BovujRD0). + +Disclaimer about the name: it's a joke that only makes sense in Portuguese. + +**Have fun!** + +## Note +First, I coded this game exclusively for fun. + +This code is a *complete* mess and sure isn't a good depiction of the usual quality of my code. +I'll admit that I have almost null experience with embedding programming. I just *felt* (with some reasoning) like the right thing to do would be to avoid any and all use of the heap (especially for larger structures), and also that I should store the most heavy and the most used structures as globals (although I'm usually strongly against global variables in any circumstance). + +Then one bad thing thing leads to another, and at the end of the day, I was writing important literals like the number of rows and columns inline so that changing even this minor aspect now is a headache :) + +I'd rather not comment about the currently impossibility of writing unit tests for this. + +I'm sorry for that. It was nonetheless a fun day coding it, the game **works** on the Pokitto (and on the [emulator](https://github.com/felipemanga/PokittoEmu) as well) and I finally can play it anywhere. \ No newline at end of file diff --git a/assets.h b/assets.h new file mode 100644 index 0000000..044c21d --- /dev/null +++ b/assets.h @@ -0,0 +1,181 @@ +#ifndef ASSETS_H +#define ASSETS_H + +#include + +static const uint16_t game_palette[] = { + 0x18c3, 0xea06, 0x88a1, 0xf3a6, + 0x91c1, 0xffb3, 0x9440, 0x7e08, + 0x4b84, 0x0499, 0x0352, 0xce59, + 0x7bcf, 0x4a69, 0x80e7, 0x29aa, +}; + +static const uint8_t sprite_piece1[] = { + 8,8, + 0x01,0x11,0x11,0x00, + 0x11,0x11,0x11,0x10, + 0x11,0x21,0x21,0x12, + 0x12,0x22,0x22,0x12, + 0x11,0x22,0x21,0x12, + 0x11,0x12,0x11,0x12, + 0x01,0x11,0x11,0x22, + 0x00,0x22,0x22,0x20, +}; + +static const uint8_t sprite_piece2[] = { + 8,8, + 0x03,0x33,0x33,0x00, + 0x33,0x33,0x33,0x30, + 0x33,0x44,0x43,0x34, + 0x34,0x43,0x44,0x34, + 0x33,0x44,0x43,0x34, + 0x33,0x33,0x33,0x34, + 0x03,0x33,0x33,0x44, + 0x00,0x44,0x44,0x40, +}; + +static const uint8_t sprite_piece3[] = { + 8,8, + 0x05,0x55,0x55,0x00, + 0x55,0x55,0x55,0x50, + 0x55,0x65,0x65,0x56, + 0x55,0x55,0x55,0x56, + 0x56,0x66,0x66,0x56, + 0x55,0x66,0x65,0x56, + 0x05,0x55,0x55,0x66, + 0x00,0x66,0x66,0x60, +}; + +static const uint8_t sprite_piece4[] = { + 8,8, + 0x07,0x77,0x77,0x00, + 0x77,0x28,0x87,0x70, + 0x78,0x88,0x88,0x78, + 0x78,0x88,0x82,0x78, + 0x77,0x78,0x77,0x78, + 0x77,0x78,0x77,0x78, + 0x07,0x77,0x77,0x88, + 0x00,0x88,0x88,0x80, +}; + +static const uint8_t sprite_piece5[] = { + 8,8, + 0x09,0x99,0x99,0x00, + 0x99,0x9b,0x99,0x90, + 0x99,0xba,0xa9,0x9a, + 0x9a,0xaa,0xaa,0x9a, + 0x99,0xaa,0xa9,0x9a, + 0x99,0x9a,0x99,0x9a, + 0x09,0x99,0x99,0xaa, + 0x00,0xaa,0xaa,0xa0, +}; + +static const uint8_t sprite_pieceQ[] = { + 8,8, + 0x0b,0xbb,0xbb,0x00, + 0xbb,0xcc,0xcb,0xb0, + 0xbb,0xbb,0xcb,0xbc, + 0xbb,0xbc,0xcb,0xbc, + 0xbb,0xbb,0xbb,0xbc, + 0xbb,0xbc,0xbb,0xbc, + 0x0b,0xbb,0xbb,0xcc, + 0x00,0xcc,0xcc,0xc0, +}; + +static const uint8_t sprite_combo[] = { + 8,8, + 0x01,0x11,0x11,0x00, + 0x12,0x22,0x22,0x10, + 0x12,0x01,0x00,0x12, + 0x12,0x11,0x10,0x12, + 0x12,0x01,0x22,0x12, + 0x12,0x00,0x20,0x12, + 0x01,0x11,0x11,0x22, + 0x00,0x22,0x22,0x20, +}; + +static const uint8_t sprite_bomb1[] = { + 8,8, + 0x00,0xbb,0xb0,0x00, + 0x0b,0xbb,0xbb,0x00, + 0xbb,0x1b,0x1b,0xb0, + 0xb1,0x11,0x11,0xbc, + 0xbb,0x11,0x1b,0xbc, + 0x0b,0xb1,0xbb,0xcc, + 0x00,0xbb,0xbc,0xc0, + 0x00,0x0c,0xcc,0x00, +}; + +static const uint8_t sprite_bomb2[] = { + 8,8, + 0x00,0xbb,0xb0,0x00, + 0x0b,0xbb,0xbb,0x00, + 0xbb,0x33,0x3b,0xb0, + 0xb3,0x3b,0x33,0xbc, + 0xbb,0x33,0x3b,0xbc, + 0x0b,0xbb,0xbb,0xcc, + 0x00,0xbb,0xbc,0xc0, + 0x00,0x0c,0xcc,0x00, +}; + +static const uint8_t sprite_bomb3[] = { + 8,8, + 0x00,0xbb,0xb0,0x00, + 0x0b,0xbb,0xbb,0x00, + 0xbb,0x5b,0x5b,0xb0, + 0xbb,0xbb,0xbb,0xbc, + 0xb5,0x55,0x55,0xbc, + 0x0b,0x55,0x5b,0xcc, + 0x00,0xbb,0xbc,0xc0, + 0x00,0x0c,0xcc,0x00, +}; + +static const uint8_t sprite_bomb4[] = { + 8,8, + 0x00,0xbb,0xb0,0x00, + 0x0b,0x18,0x8b,0x00, + 0xb8,0x88,0x88,0xb0, + 0xb8,0x88,0x81,0xbc, + 0xbb,0xb8,0xbb,0xbc, + 0x0b,0xb8,0xbb,0xcc, + 0x00,0xbb,0xbc,0xc0, + 0x00,0x0c,0xcc,0x00, +}; + +static const uint8_t sprite_bomb5[] = { + 8,8, + 0x00,0xbb,0xb0,0x00, + 0x0b,0xb9,0xbb,0x00, + 0xbb,0x99,0x9b,0xb0, + 0xb9,0x9b,0x99,0xbc, + 0xbb,0x99,0x9b,0xbc, + 0x0b,0xb9,0xbb,0xcc, + 0x00,0xbb,0xbc,0xc0, + 0x00,0x0c,0xcc,0x00, +}; + +static const uint8_t sprite_marked[] = { + 8,8, + 0x01,0x11,0x11,0x00, + 0x12,0x22,0x22,0x10, + 0x12,0x00,0x00,0x12, + 0x12,0x00,0x00,0x12, + 0x12,0x00,0x00,0x12, + 0x12,0x00,0x00,0x12, + 0x01,0x11,0x11,0x22, + 0x00,0x22,0x22,0x20, +}; + +static const uint8_t sprite_grabber[] = { + 16,8, + 0x00,0x00,0xfb,0xff,0xff,0xbf,0x00,0x00, + 0x00,0x00,0xdb,0xbc,0xcb,0xbd,0x00,0x00, + 0x70,0x00,0xfd,0xc9,0x9c,0xdf,0x00,0x01, + 0x86,0x00,0xff,0xda,0xad,0xff,0x00,0x32, + 0xc6,0xc0,0xfc,0xbd,0xdb,0xcf,0x0c,0x4c, + 0x0c,0xdb,0xbb,0xbb,0xbb,0xbb,0xbd,0xc0, + 0x0d,0xdc,0xbb,0x42,0x86,0xbb,0xcd,0xd0, + 0x00,0xdd,0xdd,0xff,0xff,0xdd,0xdd,0x00, +}; + +#endif \ No newline at end of file diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..053c77c --- /dev/null +++ b/main.cpp @@ -0,0 +1,546 @@ +#include +#include "Pokitto.h" +#include "assets.h" + +// Display size: 110x88 + +// In the board, each cell has one byte with this +// representation (from least to most significant) +// 3 bits = color +// 1 bit = is bomb +// 2 bits = DFS visited status (alternate bits to fast clear) +// 1 bit = is giving combo score +// 1 bit = is locked due to matching + +// TRouBLe (255 = -1 for uint8_t) +const uint8_t directions[4][2] = { + {255, 0}, {0, 1}, {1, 0}, {0, 255} +}; + +const uint8_t mask_reset_v1 = 0b11101111; +const uint8_t mask_gset_v1 = 0b00010000; + +const uint8_t mask_reset_v2 = 0b11011111; +const uint8_t mask_gset_v2 = 0b00100000; + +const uint8_t mask_gset_lock = 0b10000000; +const uint8_t mask_gset_bonus = 0b01000000; + + +const uint8_t *sprites_pieces[] = { + sprite_piece1, + sprite_piece2, + sprite_piece3, + sprite_piece4, + sprite_piece5, + sprite_pieceQ, +}; + +const uint8_t *sprites_bombs[] = { + sprite_bomb1, + sprite_bomb2, + sprite_bomb3, + sprite_bomb4, + sprite_bomb5, +}; + +const uint8_t *sprites_lock[] = { + sprite_marked, + sprite_combo, +}; + +Pokitto::Core pokitto; +uint8_t _board[77]; +uint8_t *rows[11]; + +uint8_t restart_delay_value = 10; +uint8_t restart_freeze_value = 30; +uint8_t frozen = 0; +const uint8_t initial_delay = 20; +uint8_t remaining_delay = 20; +uint8_t remaining_shift = 8; + +uint8_t column_first_hole[7]; +uint8_t column_height[7]; +uint8_t hold = 0; +uint8_t robot_at = 3; +uint8_t paused = 0; +uint8_t gameover = 0; +uint8_t mainmenu = 1; + +int score = 0; +int highscore = 0; + +struct BtnHelder { + uint8_t frames; + uint8_t button; + + BtnHelder(uint8_t button) { + this->button = button; + } + + bool operator()() { + if (pokitto.buttons.repeat(button, 1)) { + frames ++; + return frames == 1 || frames == 6 || (frames >= 9 && frames & 1); + } else { + frames = 0; + return false; + } + } +}; + +BtnHelder btnHelderLeft(BTN_LEFT); +BtnHelder btnHelderRight(BTN_RIGHT); + +void drawPiece(uint8_t x, uint8_t y, uint8_t piece_type, const uint8_t * bitmap) { + uint8_t c[4] = {0, 0, 0, 11}; + const uint8_t * p = &bitmap[2]; + c[1] = (piece_type << 1) + 1; + c[2] = c[1] + 1; + uint8_t col; + for (uint8_t i = 0; i < (uint8_t) 8; i++, y++) { + for (uint8_t j = 0; j < (uint8_t) 4; j++, x++, p++) { + if ((col = c[(*p) >> 4])) + pokitto.display.drawPixel((int16_t) x, (int16_t) y, col); + x++; + if ((col = c[(*p) & 0xf])) + pokitto.display.drawPixel((int16_t) x, (int16_t) y, col); + } + x -= (uint8_t) 8; + } +} + +void drawPiece(uint8_t x, uint8_t y, const uint8_t * bitmap) { + const uint8_t * p = &bitmap[2]; + uint8_t col; + for (uint8_t i = 0; i < (uint8_t) 8; i++, y++) { + for (uint8_t j = 0; j < (uint8_t) 4; j++, x++, p++) { + if ((col = (*p) >> 4)) + pokitto.display.drawPixel((int16_t) x, (int16_t) y, col); + x++; + if ((col = (*p) & 0xf)) + pokitto.display.drawPixel((int16_t) x, (int16_t) y, col); + } + x -= (uint8_t) 8; + } +} + +void config() { + pokitto.begin(); + pokitto.setFrameRate(30); + srand(pokitto.getTime()); + pokitto.display.load565Palette(game_palette); + pokitto.display.bgcolor = 0; + pokitto.display.setFont(font3x5); + for (int i = 0; i < 11; i += 1) { + rows[i] = &_board[7 * i]; + } +} + +void resetVisitedWDFS(uint8_t i, uint8_t j, uint8_t col) { + rows[i][j] = (rows[i][j] & mask_reset_v1) | mask_gset_v2; + for (uint8_t d = 0; d < 4; d++) { + uint8_t ii = i + directions[d][0]; + uint8_t jj = j + directions[d][1]; + if (ii != 255 && jj != 255 && ii != 11 && jj != 7 + && (rows[ii][jj] & 0xf) == col + && !(rows[ii][jj] & mask_gset_v2)) { + resetVisitedWDFS(ii, jj, col); + } + } +} + +uint8_t _countConnEq(uint8_t i, uint8_t j, uint8_t col) { + uint8_t conn = 1; + rows[i][j] = (rows[i][j] & mask_reset_v2) | mask_gset_v1; + for (uint8_t d = 0; d < 4; d++) { + uint8_t ii = i + directions[d][0]; + uint8_t jj = j + directions[d][1]; + if (ii != 255 && jj != 255 && ii != 11 && jj != 7 + && (rows[ii][jj] & 0xf) == col + && !(rows[ii][jj] & mask_gset_v1)) { + conn += _countConnEq(ii, jj, col); + } + } + return conn; +} + +uint8_t countConnEq(uint8_t i, uint8_t j, uint8_t col) { + uint8_t ret = _countConnEq(i, j, col); + resetVisitedWDFS(i, j, col); + return ret; +} + +uint8_t lockPieces(uint8_t i, uint8_t j, uint8_t col, uint8_t acc = 0) { + acc++; + rows[i][j] |= mask_gset_lock; + if (acc > 4) { + rows[i][j] |= mask_gset_bonus; + } + for (uint8_t d = 0; d < 4; d++) { + uint8_t ii = i + directions[d][0]; + uint8_t jj = j + directions[d][1]; + if (ii != 255 && jj != 255 && ii != 11 && jj != 7 + && (rows[ii][jj] & 0xf) == col + && !(rows[ii][jj] & mask_gset_lock)) { + acc = lockPieces(ii, jj, col, acc); + } + } + return acc; +} + +void tryEarnAt(uint8_t i, uint8_t j) { + uint8_t val = rows[i][j]; + if (val & 0b1000) { + if (countConnEq(i, j, val & 0xf) > 1) { + lockPieces(i, j, val & 0xf, 0); + uint8_t typ = val & 0b0111; + for (int it = 0; it < 77; it++) { + if ((_board[it] & 0xf) == typ) { + _board[it] |= mask_gset_lock; + } + } + if (!frozen) { + frozen = 1; + remaining_delay = restart_freeze_value; + } + } + } else { + if (countConnEq(i, j, val & 0xf) >= 4) { + if (!frozen) { + frozen = 1; + remaining_delay = restart_freeze_value; + lockPieces(i, j, val & 0xf, 0); + } else { + lockPieces(i, j, val & 0xf, 4); + } + } + } +} + +template void shuffle (T* v, uint8_t n) { + for (int i = n - 1; i; i--) { + int j = random(0, i + 1); + std::swap(v[i], v[j]); + } +} + +bool _generateRow(uint8_t cur = 0) { + if (cur == 7) { + return true; + } + uint8_t tries[5] = {1, 2, 3, 4, 5}; + shuffle(tries, 5); + for (int t = 0; t < 5; t++) { + rows[0][cur] = tries[t]; + if (countConnEq(0, cur, tries[t]) < 4) { + if (_generateRow(cur + 1)) { + return true; + } + } + } + rows[0][cur] = 0; + return false; +} + +void generateRow() { + for (int i = 0; i < 7; i++) { + rows[0][i] = 0; + } + _generateRow(); +} + +void generateBomb() { + if (random(0, 3) == 0) { + int j = random(0, 7); + if (countConnEq(0, j, rows[0][j] | 0b1000) == 1) { + rows[0][j] |= 0b1000; + } + } +} + +void drawPlayer() { + pokitto.display.setColor(14); + pokitto.display.fillRectangle(0, 79, 110, 0); + + pokitto.display.setColor(15); + pokitto.display.fillRectangle(10 + 8 * robot_at, 0, 8, 88); + + pokitto.display.drawBitmap(6 + 8 * robot_at, 80, sprite_grabber); + + if (hold) { + if (hold & 0b1000) { + drawPiece(10 + 8 * robot_at, 83, sprites_bombs[(hold & 0b111) - 1]); + } else { + drawPiece(10 + 8 * robot_at, 83, sprites_pieces[(hold & 0b111) - 1]); + } + } +} + +void drawBoard() { + for (int col = 0; col < 7; col++) { + for (int row = 0; row < 11; row++) { + uint8_t val = rows[row][col]; + if (val) { + if (paused) val = 6; + if (val & mask_gset_lock) { + drawPiece(10 + 8 * col, row * 8 - remaining_shift - 8, (val & 0b111) - 1, sprites_lock[(val >> 6) & 1]); + } else if (val & 0b1000) { + drawPiece(10 + 8 * col, row * 8 - remaining_shift - 8, sprites_bombs[(val & 0b111) - 1]); + } else { + drawPiece(10 + 8 * col, row * 8 - remaining_shift - 8, sprites_pieces[(val & 0b111) - 1]); + } + } + } + } +} + +void rotateRows() { + for (int i = 10; i; i--) { + std::swap(rows[i], rows[i - 1]); + } +} + +void restartBoard() { + for (int i = 0; i < 11*7; i++) { + _board[i] = 0; + } + for (int i = 0; i < 4; i++) { + rotateRows(); + generateRow(); + } + robot_at = 3; + hold = 0; + score = 0; + remaining_delay = initial_delay; + remaining_shift = 8; + gameover = 0; + paused = 0; + mainmenu = 0; +} + +void checkInput() { + if (gameover) { + if (pokitto.buttons.pressed(BTN_C)) { + highscore = max(score, highscore); + mainmenu = 1; + } + return; + } else if (paused) { + if (pokitto.buttons.pressed(BTN_C)) { + paused = 0; + } + return; + } + if (btnHelderRight() && robot_at != 6) { + robot_at++; + } + if (btnHelderLeft() && robot_at != 0) { + robot_at--; + } + if (pokitto.buttons.pressed(BTN_B)) { + int i; + for (i = 10; i && rows[i][robot_at] == 0; i--); + if (i && !(rows[i][robot_at] & mask_gset_lock) + && !(rows[i - 1][robot_at] & mask_gset_lock)) { + std::swap(rows[i][robot_at], rows[i - 1][robot_at]); + tryEarnAt(i - 1, robot_at); + tryEarnAt(i, robot_at); + } + } else if (pokitto.buttons.pressed(BTN_A)) { + uint8_t i; + for (i = 10; i != 255 && rows[i][robot_at] == 0; i--); + if (hold) { + i++; + if (i != 11) { + rows[i][robot_at] = hold; + hold = 0; + tryEarnAt(i, robot_at); + } + } else { + if (i != 255 && !(rows[i][robot_at] & mask_gset_lock)) { + hold = rows[i][robot_at]; + rows[i][robot_at] = 0; + } + } + } else if (pokitto.buttons.pressed(BTN_C)) { + paused = 1; + } +} + +void compactBoard() { + for (int j = 0; j < 7; j++) { + column_first_hole[j] = 11; + for (int i = 0; i < 11; i++) { + if (rows[i][j] == 0) { + column_first_hole[j] = i; + break; + } + } + column_height[j] = column_first_hole[j]; + + for (int i = column_height[j]; i < 11; i++) { + if (rows[i][j] != 0) { + rows[column_height[j]][j] = rows[i][j]; + column_height[j]++; + rows[i][j] = 0; + } + } + } +} + +void finishFrozen() { + for (int i = 0; i < 77; i++) { + if (_board[i] >> 7) { + score += 10 + ((_board[i] & mask_gset_bonus) ? 10 : 0); + _board[i] = 0; + } + } + + compactBoard(); + for (int j = 0; j < 7; j++) { + for (int i = column_first_hole[j]; i < column_height[j]; i++) { + if (!(rows[i][j] & 0b1000) && !(rows[i][j] >> 6)) { + tryEarnAt(i, j); + } + } + } + + for (int j = 0; j < 7; j++) { + for (int i = column_first_hole[j]; i < column_height[j]; i++) { + if ((rows[i][j] & 0b1000) && !(rows[i][j] >> 6)) { + tryEarnAt(i, j); + } + } + } + + bool keepFrozen = false; + for (int i = 0; i < 77; i++) { + if (_board[i] >> 7) { + keepFrozen = true; + break; + } + } + + if (keepFrozen) { + remaining_delay = restart_freeze_value; + } else { + remaining_delay = restart_delay_value; + frozen = 0; + } + + // highscore = max(score, highscore); +} + +bool checkGameOver() { + for (int j = 0; j < 7; j++) { + if (rows[10][j]) return true; + } + return false; +} + +void ingame() { + checkInput(); + + if (!gameover && !paused) { + remaining_delay--; + } + if (!remaining_delay && !frozen) { + remaining_delay = restart_delay_value; + remaining_shift--; + } else if(!remaining_delay && frozen) { + finishFrozen(); + } + if (!remaining_shift) { + if (checkGameOver()) { + gameover = 1; + } else { + remaining_shift = 8; + rotateRows(); + generateRow(); + generateBomb(); + } + } + + pokitto.display.setColor(1); + pokitto.display.setCursor(76, 10); + pokitto.display.print("Score:"); + pokitto.display.setCursor(76, 18); + pokitto.display.print(score); + pokitto.display.setColor(3); + pokitto.display.setCursor(76, 26); + pokitto.display.print("HScore:"); + pokitto.display.setCursor(76, 34); + pokitto.display.print(highscore); + pokitto.display.setCursor(76, 44); + + if (!paused && !gameover) { + drawPlayer(); + } else if(gameover) { + pokitto.display.setColor(1); + pokitto.display.setCursor(0, 82); + pokitto.display.print(" GAME OVER (PRESS C)"); + } else { + pokitto.display.setColor(5); + pokitto.display.setCursor(0, 82); + pokitto.display.print(" PAUSED (PRESS C)"); + } + drawBoard(); +} + +char str_highscore[10]; +void inmainmenu() { + pokitto.display.setFont(fontAdventurer); + pokitto.display.setColor(1); + pokitto.display.setCursor(30, 10); + pokitto.display.print("Raquer"); + pokitto.display.setCursor(45, 30); + pokitto.display.print("Mete"); + pokitto.display.setColor(5); + pokitto.display.setCursor(32, 32); + pokitto.display.print("*"); + + pokitto.display.setFont(fontKoubit); + pokitto.display.setCursor(25, 50); + pokitto.display.setColor(3); + pokitto.display.print("High score"); + pokitto.display.setFont(fontDonut); + pokitto.display.setColor(5); + pokitto.display.setCursor(22, 58); + sprintf(str_highscore, "%9d", highscore); + for (int i = 0; str_highscore[i]; i++) { + if (str_highscore[i] == ' ') str_highscore[i] = '-'; + } + pokitto.display.print(str_highscore); + + pokitto.display.setFont(font3x5); + pokitto.display.setColor(11); + pokitto.display.setCursor(25, 82); + pokitto.display.write("PRESS TO PLAY"); + pokitto.display.setColor(7); + pokitto.display.setCursor(49, 82); + pokitto.display.write("C"); + + if (pokitto.buttons.pressed(BTN_C)) { + restartBoard(); + } +} + +int main() { + config(); + + while (pokitto.isRunning()) { + if (pokitto.update()) { + pokitto.display.clear(); + + if (mainmenu) { + inmainmenu(); + } else { + ingame(); + } + } + } + + return 0; +} \ No newline at end of file diff --git a/mbed_config.h b/mbed_config.h new file mode 100644 index 0000000..0a9721f --- /dev/null +++ b/mbed_config.h @@ -0,0 +1 @@ +// Nothing to see here \ No newline at end of file diff --git a/raquer.bin b/raquer.bin new file mode 100644 index 0000000000000000000000000000000000000000..aed9be75c979e7ff9628d007d44d6ab28393dc36 GIT binary patch literal 65140 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 literal 0 HcmV?d00001