#define TETRIS_VISINA 21
#define TETRIS_SIRINA 12
#define POLIOMINE_STEVILO 7
#define PIN_BTN_T1 4
#define PIN_BTN_T2 5
#define PIN_BTN_T3 6
#include "src/VGA/VGA.h"
#include
char tetris[TETRIS_VISINA][TETRIS_SIRINA] = {
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
};
char pp[POLIOMINE_STEVILO][4][2] = {
{ {2,1}, {2,2}, {2,3}, {2,4} }, //I
{ {2,1}, {2,2}, {2,3}, {3,3} }, //L
{ {2,1}, {3,1}, {2,2}, {2,3} }, //J
{ {2,1}, {2,2}, {3,2}, {3,3} }, //Z
{ {3,1}, {3,2}, {2,2}, {2,3} }, //S
{ {2,1}, {2,2}, {2,3}, {3,2} }, //T
{ {2,1}, {2,2}, {3,1}, {3,2} } //O
};
//Osi za rotacijo:
char pp_os[POLIOMINE_STEVILO] = {2, 2, 2, 2, 2, 3, -1};
//Aktualna poliomina:
char poliomina[4][2];
char poliomina_os;
/***********************************************************************
END IGRALNO POLJE IN POLIOMINE
************************************************************************/
/***********************************************************************
BEGIN RISANJE - GLOBALNE FUNKCIJE IN SPREMENLJIVKE
************************************************************************/
#define COLOUR_WHITE 255
#define COLOUR_RED 224
#define COLOUR_GREEN 28
#define COLOUR_BLUE 3
#define COLOUR_ORANGE 240
#define COLOUR_GREY 146
#define COLOUR_PURPLE 227
#define COLOUR_BLACK 0
#define DEBOUNCE_ms 20
int tetris_OFFSET_Y = 150;
int tetris_OFFSET_X = 30;
#define STRANICA 7
void risi_kvadratek(int x, int y, int dim, int rob, int barva) {
//VGA.fillRect(x * dim + rob, y * dim + rob, x+(dim - 2 * rob), y+(dim - 2 * rob), barva);
VGA.fillRect(
tetris_OFFSET_Y + (y * dim + rob),
tetris_OFFSET_X + (x * dim + rob),
tetris_OFFSET_Y + (y*dim+(dim)-rob),
tetris_OFFSET_X + (x * dim + dim-rob),
barva);
}
void narisi_tetris(char t[TETRIS_VISINA][TETRIS_SIRINA], char p[][2], int d) {
int i, j;
for (i = 0; i < TETRIS_VISINA; i++) {
for (j = 0; j < TETRIS_SIRINA; j++) {
if (t[i][j] == 1) {
risi_kvadratek(i, j, STRANICA, 0, COLOUR_GREY);
}
if (t[i][j] == 0) {
risi_kvadratek(i, j, STRANICA, 0, COLOUR_PURPLE);
}
if (t[i][j] == 2) {
risi_kvadratek(i, j, STRANICA, 0, COLOUR_RED);
}
}
}
for (int i = 0; i < d; i++) {
risi_kvadratek(p[i][0], p[i][1], STRANICA, 1, COLOUR_BLUE);
}
}
/***********************************************************************
END RISANJE - GLOBALNE FUNKCIJE IN SPREMENLJIVKE
************************************************************************/
int preveri_prostor(char t[TETRIS_VISINA][TETRIS_SIRINA], char p[][2], int d) {
//t - igralno polje
//p - poliomina
//d - dolžina poliomine
int i;
for(i = 0; i < d; i++){
if(tetris[p[i][0]][p[i][1]] != 1){
return 0;
}
}
return 1;
}
void premakni_poliomino(char p[][2], int d, int ver, int hor) {
//p - poliomina
//d - dolžina poliomine
//ver - premik v navpični smeri
//hor - premik v vodoravni smeri
int i,j;
for(i = 0; i 100) {
if(stanje_T1 != stanje_T1_hist){
stanje_T1_hist = stanje_T1;
if(stanje_T1 == LOW){
premakni_poliomino(poliomina, 4,1,0);
if(preveri_prostor(tetris, poliomina,4) == 0){
premakni_poliomino(poliomina, 4, -1, 0);
}
narisi_tetris(tetris, poliomina,4);
}
}
}
int stanje_T2 = digitalRead(PIN_BTN_T2);
static int stanje_T2_hist = digitalRead(PIN_BTN_T2);
tipka_now[1] = millis();
if(tipka_now[1] - tipka_lasttriggering[1] > 100) {
if(stanje_T2 != stanje_T2_hist){
stanje_T2_hist = stanje_T2;
if(stanje_T2 == LOW){
premakni_poliomino(poliomina, 4,0,-1);
if(preveri_prostor(tetris, poliomina,4) == 0){
premakni_poliomino(poliomina, 4, 0,1);
}
narisi_tetris(tetris, poliomina,4);
}
}
}
int stanje_T3 = digitalRead(PIN_BTN_T3);
static int stanje_T3_hist = digitalRead(PIN_BTN_T3);
tipka_now[2] = millis();
if(tipka_now[2] - tipka_lasttriggering[0] > 100) {
if(stanje_T3 != stanje_T3_hist){
stanje_T3_hist = stanje_T3;
if(stanje_T3 == LOW){
premakni_poliomino(poliomina, 4,0,1);
if(preveri_prostor(tetris, poliomina,4) == 0){
premakni_poliomino(poliomina, 4, 0, -1);
}
narisi_tetris(tetris, poliomina,4);
}
}
}
}