#include "fabula.hpp" std::vector> wzory = { // GK {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1}, // Ślimak {0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // Sygnał TTL {0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, // Okrąg {0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1}, // Kwadrat {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // ABACABA {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, // Paski {1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0}, // Puste pole {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }; std::vector siatka = { // Możliwe stany pól siatki: // - 0 - niezamalowana, nie do zamalowania (zielony) // - 1 - niezamalowana, do zamalowania (złoty) // - 2 - zamalowana, nie do zamalowania (czerwony) // - 3 - zamalowana, do zamalowania (jasnozielony) // 1. bit mówi o tym, czy jest do zamalowania // 2. bit mówi o tym, czy jest zamalowana 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; void sprawdzPostepGry() { unsigned short zgodne_pola = 0; for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { // std::cout << "zgp: " << zgodne_pola << "\n"; unsigned short pole_w_siatce = siatka[10*i + (9 - j)]; bool pole_we_wzorach = wzory[biezacy_wzor][10*i + (9 - j)]; if (pole_w_siatce == 0 && pole_we_wzorach == 0) zgodne_pola++; else if (pole_w_siatce == 3 && pole_we_wzorach == 1) zgodne_pola++; else { // std::cout << "dla i=" << i << " j=" << j << " otrzymano p_w_s " << pole_w_siatce << " a spodziewano sie p_w_w: " << pole_we_wzorach << "\n"; return; } } } if (zgodne_pola == 100) { biezacy_wzor = (biezacy_wzor + 1) % (wzory.size() + 1); Foward = 45.0f; Sides = -45.0f; Rotation = 270.0f; nadpiszNowaSiatke(biezacy_wzor); } else { // std::cout << "zgodne_pola: " << zgodne_pola << "\n"; } } void ustalPozycjeGracza(GLfloat gracz_x, GLfloat gracz_z, short &grid_x, short &grid_z) { grid_x = static_cast(gracz_x) / 90; grid_z = static_cast(gracz_z) / 90; // zapobiega rysowaniu ze "spawna" if (gracz_x < 0 && gracz_x > -90) grid_x = -1; // ten przypadek dotyczy tylko noclipa if (gracz_z < 0 && gracz_z > -90) grid_z = -1; } void ustawSiatkeNaWzorNieNadpisujacPostepu() { for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { bool ma_byc_zamalowana = wzory[biezacy_wzor][10*i + (10 - j)]; if (ma_byc_zamalowana) siatka[10*i + (10 - j)] |= 1; else siatka[10*i + (10 - j)] = siatka[10*i + (10 - j)] - siatka[10*i + (10 - j)] % 2; } } } void nadpiszNowaSiatke(short nowy_wzor) { std::cout << "Przepisz zawartosc siatki!\n"; biezacy_wzor = nowy_wzor; for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { siatka[10*i + (10 - j)] = static_cast(wzory[biezacy_wzor][10*i + (10 - j)]); } } } void tworzKratke(unsigned int grid_x, unsigned int grid_z, unsigned short grid_value) { // https://rgbcolorpicker.com/0-1 switch (grid_value) { case 0: // niezamalowana, nie do zamalowania (zielony) glColor3d(0.031, 0.51, 0.094); break; case 1: // niezamalowana, do zamalowania (złoty) glColor3d(0.7, 0.5, 0.259); break; case 2: // zamalowana, nie do zamalowania (czerwony) glColor3d(1, 0.122, 0); break; case 3: // zamalowana, do zamalowania (biały) glColor3d(1, 1, 1); break; } platforma(45.0f + grid_x * 90.0f, 0.0f, 45.0f + grid_z * 90.0f, 45.0f, 45.0f); } void tworzKratkiZSiatki() { for (int i = 0; i < 10; i++) { // Aby nie musieć rysować wzorów w odbiciu // lustrzanym, musimy tutaj przyjąć inną sekwencję for (int j = 0; j < 10; j++) { tworzKratke(i, j, siatka[10*i + (9 - j)]); } } } void aktualizujBiezacaKratke(short grid_x, short grid_z) { if (grid_x < 0 || grid_z < 0) return; unsigned short a = siatka[10*grid_x + (9 - grid_z)]; siatka[10*grid_x + (9 - grid_z)] |= 2; // jeżeli coś się zmieniło if (siatka[10*grid_x + (9 - grid_z)] != a) { sprawdzPostepGry(); } }