From 0c71bcd37162f3f96f27012f5f558033f6689a96 Mon Sep 17 00:00:00 2001 From: esensar Date: Wed, 20 Dec 2017 17:56:20 +0100 Subject: [PATCH] Add a simple ncurses implementation of the display --- README.md | 4 +- ncurses-implementation/a.out | Bin 0 -> 56000 bytes ncurses-implementation/main.cpp | 1252 +++++++++++++++++++++++++++++++ 3 files changed, 1254 insertions(+), 2 deletions(-) create mode 100755 ncurses-implementation/a.out create mode 100644 ncurses-implementation/main.cpp diff --git a/README.md b/README.md index d0e30a4..5393155 100644 --- a/README.md +++ b/README.md @@ -36,8 +36,8 @@ but I wanted to leave the code in its original state. At that point we were sati ## TODO - Cleaning up the repository - [x] Upload to GitHub from mbed -- [ ] Add windows console adaptation -- [ ] Add unix console adaptation +- [x] Add windows console adaptation +- [x] Add unix console adaptation - [ ] Translate parts of code not written in english - [x] Add a more detailed documentation with images - [ ] Explain codes of block diff --git a/ncurses-implementation/a.out b/ncurses-implementation/a.out new file mode 100755 index 0000000000000000000000000000000000000000..7c9d28b7a83967b24d9be73ea5dc430d32ce317a GIT binary patch literal 56000 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 H(fI!W5p|&F literal 0 HcmV?d00001 diff --git a/ncurses-implementation/main.cpp b/ncurses-implementation/main.cpp new file mode 100644 index 0000000..0b9ff06 --- /dev/null +++ b/ncurses-implementation/main.cpp @@ -0,0 +1,1252 @@ +#include // std::this_thread::sleep_for +#include // std::chrono::seconds +#include +#include +#include +#define XMAX 16 +#define YMAX 9 + +class ConsoleLCD +{ +private: + bool pixels[84][48]; + WINDOW* win; +public: + void init() + { + initscr(); + noecho(); + win = newwin(48, 84, 0, 0); + clear(); + } + + void clear() + { + for (int i = 0; i < 84; i++) + { + for (int j = 0; j < 48; j++) + { + pixels[i][j] = false; + } + } + + } + + void refresh() + { + for (int i = 0; i < 48; i++) + { + for (int j = 0; j < 84; j++) + { + if (pixels[j][i]) + { + mvwaddch(win, i, j, char(178)); + } + else + { + mvwaddch(win, i, j, ' '); + } + } + } + wrefresh(win); + } + + void setPixel(int x, int y) + { + if(x >= 0 && x < 84 && y >= 0 && y < 48) + { + pixels[x][48 - y] = true; + } + } + + void printString(std::string string, int x, int y) { + std::cout << string << std::endl; + } +}; + +ConsoleLCD lcd; + +float Ox; +float Oy; +bool SW; + + + +void wait(float time) +{ + std::this_thread::sleep_for(std::chrono::milliseconds(long(time * 1000))); +} + + +void readInput() { + while (1) + { + + Ox = 0.5; + Oy = 0.5; + SW = false; + + char input = getch(); + + switch (input) + { + case ' ': + SW = true; + break; + case 'w': + Oy = 1; + break; + case 's': + Oy = 0; + break; + case 'a': + Ox = 0; + break; + case 'd': + Ox = 1; + break; + default: + break; + } + + wait(0.1); + } +} + +char mapa[9][16][4] = { + { { '1','0','1','1' },{ '0','1','1','0' },{ '0','0','1','1' },{ '1','0','1','0' },{ '1','0','1','0' },{ '1','0','1','0' },{ '0','1','1','0' },{ '0','1','1','1' },{ '0','0','1','1' },{ '1','0','1','0' },{ '1','1','1','0' },{ '0','0','1','1' },{ '0','1','1','0' },{ '0','0','1','1' },{ '0','0','1','0' },{ '1','1','1','0' } }, + { { '0','1','1','1' },{ '0','1','0','1' },{ '1','0','0','1' },{ '1','0','1','0' },{ '0','1','1','0' },{ '0','1','1','1' },{ '0','1','0','1' },{ '0','1','0','1' },{ '0','1','0','1' },{ '0','0','1','1' },{ '1','0','1','0' },{ '1','1','0','0' },{ '0','1','0','1' },{ '0','1','0','1' },{ '0','1','0','1' },{ '0','0','1','1' } }, + { { '0','0','0','1' },{ '1','0','0','0' },{ '1','0','1','0' },{ '0','1','1','0' },{ '0','1','0','1' },{ '0','1','0','1' },{ '0','1','0','1' },{ '1','0','0','1' },{ '0','0','0','0' },{ '0','0','0','0' },{ '1','0','1','0' },{ '0','1','1','0' },{ '0','1','0','1' },{ '0','1','0','1' },{ '0','1','0','1' },{ '0','1','0','1' } }, + { { '0','1','0','1' },{ '0','0','1','1' },{ '0','1','1','0' },{ '0','1','0','1' },{ '0','1','0','1' },{ '0','1','0','1' },{ '1','0','0','1' },{ '0','1','1','0' },{ '0','1','0','1' },{ '0','1','0','1' },{ '0','0','1','1' },{ '0','1','0','0' },{ '0','1','0','1' },{ '0','1','0','1' },{ '0','1','0','1' },{ '0','1','0','1' } }, + { { '0','1','0','1' },{ '0','1','0','1' },{ '1','0','0','1' },{ '1','1','0','0' },{ '1','0','0','1' },{ '1','0','0','0' },{ '1','1','1','0' },{ '0','1','0','1' },{ '0','1','0','1' },{ '0','1','0','1' },{ '0','1','0','1' },{ '0','1','0','1' },{ '0','1','0','1' },{ '0','1','0','1' },{ '1','1','0','1' },{ '0','1','0','1' } }, + { { '0','1','0','1' },{ '0','0','0','1' },{ '1','0','1','0' },{ '1','0','1','0' },{ '1','0','1','0' },{ '0','1','1','0' },{ '0','0','1','1' },{ '0','1','0','0' },{ '0','1','0','1' },{ '0','1','0','1' },{ '0','1','0','1' },{ '0','1','0','1' },{ '1','0','0','1' },{ '1','0','0','0' },{ '1','0','0','0' },{ '1','1','0','0' } }, + { { '0','1','0','1' },{ '0','0','0','1' },{ '0','0','1','0' },{ '1','0','1','0' },{ '0','1','1','0' },{ '0','1','0','1' },{ '1','1','0','1' },{ '0','1','0','1' },{ '1','1','0','1' },{ '0','1','0','1' },{ '0','1','0','1' },{ '0','1','0','1' },{ '0','0','1','1' },{ '1','0','1','0' },{ '1','0','1','0' },{ '0','1','1','0' } }, + { { '1','1','0','1' },{ '0','1','0','1' },{ '1','0','0','1' },{ '1','1','1','0' },{ '0','1','0','1' },{ '1','0','0','1' },{ '1','0','1','0' },{ '1','0','0','0' },{ '1','0','1','0' },{ '1','1','0','0' },{ '1','0','0','1' },{ '1','1','0','0' },{ '0','1','0','1' },{ '0','0','1','1' },{ '1','1','1','0' },{ '0','1','0','1' } }, + { { '1','0','1','0' },{ '1','0','0','0' },{ '1','0','1','0' },{ '1','0','1','0' },{ '1','0','0','0' },{ '1','0','1','0' },{ '1','0','1','0' },{ '1','0','1','0' },{ '1','0','1','0' },{ '1','0','1','0' },{ '1','0','1','0' },{ '1','0','1','0' },{ '1','0','0','1' },{ '1','0','0','1' },{ '1','0','1','0' },{ '1','1','0','0' } } +}; + +char x = 0, y = 8; // pozicija igraca +char orijentacija = 1; // 0-3 + +class Timer +{ +private: + unsigned long begTime; + unsigned long endTime = 0; +public: + void start() + { + begTime = clock(); + } + + unsigned long read_ms() + { + if (endTime == 0) + { + return ((unsigned long)clock() - begTime) / CLOCKS_PER_SEC; + } + else { + return(endTime - begTime) / CLOCKS_PER_SEC; + } + } + + void stop() + { + endTime = clock(); + } +}; + +void crtaj2D() +{ + lcd.clear(); + for (int i = 0; i<9; i++) + for (int j = 0; j<16; j++) + { + + if (mapa[8 - i][j][2] == '1') + { + for (int k = 0; k<5; k++) + lcd.setPixel(j * 5 + k, (i + 1) * 5); + } + if (mapa[8 - i][j][1] == '1') + { + for (int k = 0; k<5; k++) + lcd.setPixel((j + 1) * 5, i * 5 + k); + } + if (mapa[8 - i][j][0] == '1') + { + for (int k = 0; k<5; k++) + lcd.setPixel(j * 5 + k, i * 5); + } + if (mapa[8 - i][j][3] == '1') + { + for (int k = 0; k<5; k++) + lcd.setPixel(j * 5, i * 5 + k); + } + } + int py = 8 - y; + switch (orijentacija) + { + case 2: + for (int j = 0; j < 5; j++) + lcd.setPixel(x * 5 + 2, py * 5 + j); + lcd.setPixel(x * 5 + 4, py * 5 + 2); + lcd.setPixel(x * 5 + 3, py * 5 + 3); + lcd.setPixel(x * 5 + 1, py * 5 + 3); + lcd.setPixel(x * 5 + 0, py * 5 + 2); + break; + case 1: + for (int i = 0; i < 5; i++) + lcd.setPixel(x * 5 + i, py * 5 + 2); + lcd.setPixel(x * 5 + 2, py * 5 + 4); + lcd.setPixel(x * 5 + 3, py * 5 + 3); + lcd.setPixel(x * 5 + 3, py * 5 + 1); + lcd.setPixel(x * 5 + 2, py * 5 + 0); + break; + case 0: + for (int j = 0; j < 5; j++) + lcd.setPixel(x * 5 + 2, py * 5 + j); + lcd.setPixel(x * 5 + 4, py * 5 + 2); + lcd.setPixel(x * 5 + 3, py * 5 + 1); + lcd.setPixel(x * 5 + 1, py * 5 + 1); + lcd.setPixel(x * 5 + 0, py * 5 + 2); + break; + case 3: + for (int i = 0; i < 5; i++) + lcd.setPixel(x * 5 + i, py * 5 + 2); + lcd.setPixel(x * 5 + 2, py * 5 + 4); + lcd.setPixel(x * 5 + 1, py * 5 + 3); + lcd.setPixel(x * 5 + 1, py * 5 + 1); + lcd.setPixel(x * 5 + 2, py * 5 + 0); + break; + } + lcd.refresh(); +} + + +void rotirajDesno() +{ + orijentacija++; + if (orijentacija > 3) + orijentacija = 0; +} + +void rotirajLijevo() +{ + if (orijentacija == 0) + orijentacija = 3; + else + orijentacija--; +} + +bool mozePravo() +{ + switch (orijentacija) + { + case 0: + if (y == YMAX) + return false; + if (mapa[y][x][0] == '0' && mapa[y + 1][x][2] == '0') + return true; + break; + case 1: + if (x == XMAX) + return false; + if (mapa[y][x][1] == '0' && mapa[y][x + 1][3] == '0') + return true; + break; + case 2: + if (y == 0) + return false; + if (mapa[y][x][2] == '0' && mapa[y - 1][x][0] == '0') + return true; + break; + case 3: + if (x == 0) + return false; + if (mapa[y][x][3] == '0' && mapa[y][x - 1][1] == '0') + return true; + break; + } + return true; +} + +void pravo() +{ + switch (orijentacija) + { + case 0: + if (y == YMAX) + break; + if (mapa[y][x][0] == '0' && mapa[y + 1][x][2] == '0') + y++; + break; + case 1: + if (x == XMAX) + break; + if (mapa[y][x][1] == '0' && mapa[y][x + 1][3] == '0') + x++; + break; + case 2: + if (y == 0) + break; + if (mapa[y][x][2] == '0' && mapa[y - 1][x][0] == '0') + y--; + break; + case 3: + if (x == 0) + break; + if (mapa[y][x][3] == '0' && mapa[y][x - 1][1] == '0') + x--; + break; + } +} + +void linije() +{ + for (int i = 0; i<28; i++) + for (int j = 0; j < 36; j++) + if (36.0 / 28.0*i - j < 1 && 36.0 / 28.0*i - j > -1) + lcd.setPixel(i, j); + for (int i = 0; i < 28; i++) + for (int j = 0; j < 36; j++) + if (-36.0 / 28.0*(i - 28) - j < 1 && -36.0 / 28.0*(i - 28) - j > -1) + lcd.setPixel(i + 56, j); + for (int i = 0; i < 84; i++) + lcd.setPixel(i, 24); + for (int j = 24; j<48; j++) + { + lcd.setPixel(18, j); + lcd.setPixel(66, j); + } + for (int j = 36; j < 48; j++) + { + lcd.setPixel(28, j); + lcd.setPixel(56, j); + } + for (int i = 28; i < 56; i++) + lcd.setPixel(i, 36); +} + +void desni() +{ + for (int i = 0; i < 18; i++) + for (int j = 0; j < 24; j++) + if (36.0 / 28.0*i - j < 1) + lcd.setPixel(i, j); + for (int j = 24; j<48; j++) + for (int i = 0; i < 18; i++) + lcd.setPixel(i, j); +} + +void lijevi() +{ + for (int i = 0; i < 28; i++) + for (int j = 0; j < 24; j++) + if (-36.0 / 28.0*(i - 28) - j < 1) + lcd.setPixel(i + 56, j); + for (int j = 24; j<48; j++) + for (int i = 0; i < 18; i++) + lcd.setPixel(i + 66, j); +} + +void skriveniDesni() +{ + for (int j = 24; j<48; j++) + for (int i = 0; i < 18; i++) + lcd.setPixel(i, j); +} + +void skriveniLijevi() +{ + for (int j = 24; j<48; j++) + for (int i = 0; i < 18; i++) + lcd.setPixel(i + 66, j); +} + +void daljiDesni() +{ + for (int i = 18; i<28; i++) + for (int j = 24; j < 36; j++) + if (36.0 / 28.0*i - j < 1) + lcd.setPixel(i, j); + for (int j = 36; j<48; j++) + for (int i = 18; i < 28; i++) + lcd.setPixel(i, j); +} + +void daljiLijevi() +{ + for (int i = 0; i < 10; i++) + for (int j = 24; j < 36; j++) + if (-36.0 / 28.0*(i - 28) - j < 1) + lcd.setPixel(i + 56, j); + for (int j = 36; j<48; j++) + for (int i = 0; i < 10; i++) + lcd.setPixel(i + 56, j); +} + +void blizi() +{ + for (int i = 18; i < 66; i++) + for (int j = 24; j < 48; j++) + lcd.setPixel(i, j); +} + +void dalji() +{ + for (int i = 28; i < 56; i++) + for (int j = 36; j < 48; j++) + lcd.setPixel(i, j); +} + +void linijeSkretanje() +{ + for (int i = 0; i<74; i++) + for (int j = 6; j < 32; j++) + if (24.0 / 74.0*i + 6 - j < 1 && 24.0 / 74.0*i + 6 - j > -1) + lcd.setPixel(i, j); + for (int i = 0; i < 74; i++) + for (int j = 6; j < 32; j++) + if (-24.0 / 74.0*(i - 74) + 6 - j < 1 && -24.0 / 74.0*(i - 74) + 6 - j > -1) + lcd.setPixel(i + 10, j); + for (int i = 0; i < 42; i++) + for (int j = 28; j < 42; j++) + if (14.0 / 42.0*i + 28 - j < 1 && 14.0 / 42.0*i + 28 - j > -1) + lcd.setPixel(i, j); + for (int i = 0; i < 42; i++) + for (int j = 28; j < 42; j++) + if (-14.0 / 42.0*(i - 42) + 28 - j < 1 && -14.0 / 42.0*(i - 42) + 28 - j > -1) + lcd.setPixel(i + 42, j); + for (int j = 30; j < 48; j++) + { + lcd.setPixel(10, j); + lcd.setPixel(74, j); + } + for (int j = 20; j < 48; j++) + lcd.setPixel(42, j); +} + +void daljaDesno() +{ + for (int i = 0; i<10; i++) + for (int j = 6; j < 48; j++) + if (14.0 / 48.0*i + 28 - j <1) + lcd.setPixel(i, j); +} + +void daljaLijevo() +{ + for (int i = 74; i < 84; i++) + for (int j = 6; j < 48; j++) + if (-14.0 / 48.0*(i - 48) + 28 - j <1) + lcd.setPixel(i, j + 12); +} + +void blizaDesno() +{ + for (int i = 0; i<42; i++) + for (int j = 6; j < 48; j++) + if (24.0 / 74.0*i + 6 - j <1) + lcd.setPixel(i, j); +} + +void blizaLijevo() +{ + for (int i = 42; i < 84; i++) + for (int j = 0; j < 48; j++) + if (-24.0 / 74.0*(i - 74) + 6 - j < 1) + lcd.setPixel(i, j + 4); +} + +void drugaDesno() +{ + for (int i = 10; i < 42; i++) + for (int j = 10; j < 48; j++) + if (-24.0 / 74.0*(i - 74) + 6 - j < 1) + lcd.setPixel(i, j + 4); +} + +void drugaLijevo() +{ + for (int i = 42; i<74; i++) + for (int j = 10; j < 48; j++) + if (24.0 / 74.0*i + 6 - j <1) + lcd.setPixel(i, j); +} + +void izaDesno() +{ + for (int i = 10; i<42; i++) + for (int j = 6; j < 48; j++) + if (14.0 / 42.0*i + 28 - j <1) + lcd.setPixel(i, j); +} + +void izaLijevo() +{ + for (int i = 42; i < 74; i++) + for (int j = 6; j < 48; j++) + if (-14.0 / 42.0*(i - 42) + 28 - j <1) + lcd.setPixel(i, j + 14); +} + +void linijeNaprijed() +{ + for (int i = 0; i < 30; i++) + for (int j = 0; j < 30; j++) + if (i - j<1 && i - j>-1) + lcd.setPixel(i, j); + for (int i = 54; i < 84; i++) + for (int j = 0; j < 30; j++) + if (-(i - 84) - j < 1 && -(i - 84) - j > -1) + lcd.setPixel(i, j); + for (int i = 30; i < 54; i++) + lcd.setPixel(i, 30); + for (int i = 0; i < 84; i++) + lcd.setPixel(i, 8); + for (int j = 30; j < 48; j++) + { + lcd.setPixel(30, j); + lcd.setPixel(54, j); + } + for (int j = 8; j < 48; j++) + { + lcd.setPixel(8, j); + lcd.setPixel(76, j); + } +} + +void naprijedDalji() +{ + for (int i = 30; i < 54; i++) + for (int j = 30; j < 48; j++) + lcd.setPixel(i, j); +} + +void naprijedLijevi() +{ + for (int i = 76; i < 84; i++) + for (int j = 0; j < 48; j++) + if (-(i - 84) - j < 1) + lcd.setPixel(i, j); +} + + +void naprijedDesni() +{ + for (int i = 0; i < 8; i++) + for (int j = 0; j < 48; j++) + if (i - j<1) + lcd.setPixel(i, j); +} + +void naprijedDaljiLijevi() +{ + for (int i = 54; i < 76; i++) + for (int j = 8; j < 48; j++) + if (-(i - 84) - j <1) + lcd.setPixel(i, j); +} + +void naprijedDaljiDesni() +{ + for (int i = 8; i < 30; i++) + for (int j = 8; j < 48; j++) + if (i - j<1) + lcd.setPixel(i, j); +} + +void naprijedSkriveniLijevi() +{ + for (int i = 76; i<84; i++) + for (int j = 8; j < 48; j++) + lcd.setPixel(i, j); +} + +void naprijedSkriveniDesni() +{ + for (int i = 0; i<8; i++) + for (int j = 8; j < 48; j++) + lcd.setPixel(i, j); +} + +void crtaj() +{ + lcd.clear(); + linije(); + switch (orijentacija) + { + case 0: + if (y0) + { + if (mapa[y + 1][x - 1][2] == '1' || mapa[y][x - 1][0] == '1') + skriveniLijevi(); + } + if (x0) + if (mapa[y][x - 1][0] == '1') + skriveniLijevi(); + } + if (mapa[y][x][1] == '1') + desni(); + if (mapa[y][x][3] == '1') + lijevi(); + break; + case 1: + if (x0) + { + if (mapa[y - 1][x + 1][3] == '1' || mapa[y - 1][x][1] == '1') + skriveniDesni(); + } + if (y0) + if (mapa[y - 1][x][1] == '1') + skriveniDesni(); + if (y0) + { + if (mapa[y - 1][x][2] == '1') + dalji(); + if (mapa[y - 1][x][1] == '1') + daljiLijevi(); + if (mapa[y - 1][x][3] == '1') + daljiDesni(); + if (mapa[y - 1][x][0] == '1' || mapa[y][x][2] == '1') + blizi(); + if (x>0) + { + if (mapa[y - 1][x - 1][0] == '1' || mapa[y][x - 1][2] == '1') + skriveniDesni(); + } + if (x0) + if (mapa[y][x - 1][2] == '1') + skriveniDesni(); + if (x0) + { + if (mapa[y][x - 1][3] == '1') + dalji(); + if (mapa[y][x - 1][2] == '1') + daljiLijevi(); + if (mapa[y][x - 1][0] == '1') + daljiDesni(); + if (mapa[y][x - 1][1] == '1' || mapa[y][x][3] == '1') + blizi(); + if (y0) + { + if (mapa[y - 1][x - 1][1] == '1' || mapa[y - 1][x][3] == '1') + skriveniLijevi(); + } + } + else + { + if (mapa[y][x][3] == '1') + blizi(); + if (y>0) + if (mapa[y - 1][x][3] == '1') + skriveniLijevi(); + if (y0) + { + if (mapa[y + 1][x - 1][0] == '1') + izaDesno(); + } + } + if (mapa[y][x][3] == '1') + blizaLijevo(); + if (x>0) + { + if (mapa[y][x - 1][0] == '1') + drugaLijevo(); + if (mapa[y][x - 1][3] == '1') + daljaLijevo(); + if (y0) + { + if (mapa[y - 1][x][1] == '1') + drugaDesno(); + if (mapa[y - 1][x][2] == '1') + daljaDesno(); + if (x0) + { + if (mapa[y - 1][x + 1][1] == '1') + izaLijevo(); + } + } + if (mapa[y][x][2] == '1') + blizaDesno(); + break; + case 3: + if (x>0) + { + if (mapa[y][x - 1][2] == '1') + drugaDesno(); + if (mapa[y][x - 1][3] == '1') + daljaDesno(); + if (y>0) + { + if (mapa[y - 1][x - 1][3] == '1') + izaDesno(); + } + } + if (mapa[y][x][2] == '1') + blizaLijevo(); + if (y>0) + { + if (mapa[y - 1][x][3] == '1') + drugaLijevo(); + if (mapa[y - 1][x][2] == '1') + daljaLijevo(); + if (x>0) + { + if (mapa[y - 1][x - 1][2] == '1') + izaLijevo(); + } + } + if (mapa[y][x][3] == '1') + blizaDesno(); + break; + } + lcd.refresh(); +} + +void crtajRotacijaLijevo() +{ + lcd.clear(); + linijeSkretanje(); + switch (orijentacija) + { + case 0: + if (y0) + { + if (mapa[y - 1][x + 1][1] == '1') + izaLijevo(); + } + } + if (mapa[y][x][2] == '1') + blizaDesno(); + if (y>0) + { + if (mapa[y - 1][x][1] == '1') + drugaDesno(); + if (mapa[y - 1][x][2] == '1') + daljaDesno(); + if (x0) + { + if (mapa[y - 1][x][3] == '1') + drugaLijevo(); + if (mapa[y - 1][x][2] == '1') + daljaLijevo(); + if (x>0) + { + if (mapa[y - 1][x - 1][2] == '1') + izaLijevo(); + } + } + if (mapa[y][x][3] == '1') + blizaDesno(); + if (x>0) + { + if (mapa[y][x - 1][2] == '1') + drugaDesno(); + if (mapa[y][x - 1][3] == '1') + daljaDesno(); + if (y>0) + { + if (mapa[y - 1][x - 1][3] == '1') + izaDesno(); + } + } + if (mapa[y][x][2] == '1') + blizaLijevo(); + break; + case 3: + if (x>0) + { + if (mapa[y][x - 1][0] == '1') + drugaLijevo(); + if (mapa[y][x - 1][3] == '1') + daljaLijevo(); + if (y0) + { + if (mapa[y + 1][x - 1][0] == '1') + izaDesno(); + } + } + if (mapa[y][x][3] == '1') + blizaLijevo(); + break; + } + lcd.refresh(); +} + +void crtajNaprijed() +{ + lcd.clear(); + linijeNaprijed(); + switch (orijentacija) + { + case 0: + if (mapa[y][x][0] == '1') + naprijedDalji(); + if (mapa[y][x][3] == '1') + naprijedDaljiLijevi(); + if (mapa[y][x][1] == '1') + naprijedDaljiDesni(); + if (y>0) + { + if (mapa[y - 1][x][3] == '1') + naprijedLijevi(); + if (mapa[y - 1][x][1] == '1') + naprijedDesni(); + if (x>0) + if (mapa[y - 1][x - 1][0] == '1') + naprijedSkriveniLijevi(); + if (x0) + { + if (mapa[y][x - 1][0] == '1') + naprijedLijevi(); + if (mapa[y][x - 1][2] == '1') + naprijedDesni(); + if (y>0) + if (mapa[y - 1][x - 1][1] == '1') + naprijedSkriveniDesni(); + if (y0) + if (mapa[y + 1][x - 1][2] == '1') + naprijedSkriveniDesni(); + if (x0) + if (mapa[y - 1][x + 1][3] == '1') + naprijedSkriveniLijevi(); + if (y 99) + { + minute = 99; + sekunde = 99; + } + int i = 4; + while (sekunde > 0) + { + int cifra = sekunde % 10; + vrijeme[i] = '0' + cifra; + sekunde /= 10; + i--; + } + if (i == 4) + { + vrijeme[i] = '0'; + i--; + } + if (i == 3) + { + vrijeme[i] = '0'; + i--; + } + if (i == 2) + { + vrijeme[i] = ':'; + i--; + } + while (minute > 0) + { + int cifra = minute % 10; + vrijeme[i] = '0' + cifra; + i--; + minute /= 10; + } + if (i == 1) + { + vrijeme[i] = '0'; + i--; + } + if (i == 0) + { + vrijeme[i] = '0'; + i--; + } + return vrijeme; +} + +void citajJoystick() +{ + t.start(); + crtaj(); + while (1) + { + if (Ox>0.75) + { + rotirajLijevo(); + crtajRotacijaLijevo(); + wait(0.49); + crtaj(); + } + else if (Ox<0.25) + { + rotirajDesno(); + crtajRotacijaDesno(); + wait(0.49); + crtaj(); + } + else if (Oy<0.25) + { + crtaj2D(); + wait(0.49); + } + else if (Oy>0.75) + { + pravo(); + if (mozePravo()) + crtajNaprijed(); + wait(0.49); + crtaj(); + } + wait(0.25); + if (x == 15 && y == 1) + { + t.stop(); + lcd.clear(); + lcd.printString("KRAJ!", 28, 1); + lcd.printString("VRIJEME:", 20, 2); + lcd.printString(dajVrijeme(), 28, 3); + lcd.refresh(); + while (1); + } + + } + + +} + +int main() { + lcd.init(); + nodelay(stdscr, TRUE); + std::thread first(readInput); + + int i = 0; + while (1) { + lcd.clear(); + linije(); + switch (i) + { + case 0: + desni(); + break; + case 1: + lijevi(); + break; + case 2: + daljiDesni(); + break; + case 3: + daljiLijevi(); + break; + case 4: + skriveniDesni(); + break; + case 5: + skriveniLijevi(); + break; + case 6: + dalji(); + break; + case 7: + blizi(); + break; + case 8: + desni(); + lijevi(); + break; + case 9: + daljiDesni(); + daljiLijevi(); + break; + case 10: + blizi(); + skriveniDesni(); + skriveniLijevi(); + break; + case 11: + i = 0; + } + lcd.refresh(); + if (SW == true) + citajJoystick(); + i++; + wait(0.5); + } +}