Untitled

mail@pastecode.io avatar
unknown
plain_text
15 days ago
4.9 kB
1
Indexable
Never
#include <xc.h>
#include <libpic30.h>
#include <stdio.h>
#include <string.h>
#include "lcd.h"
#include "buttons.h"

#define INITIAL_GAME_DURATION_SECONDS (1500) // Calkowity poczatkowy czas dla kazdego gracza w sekundach

volatile unsigned int remainingTimeTotalSeconds = INITIAL_GAME_DURATION_SECONDS;

void opoznienie_ms(unsigned long milisekundy) {
    while (milisekundy--) {
        __delay32(4000); // Zakladajac 8 MHz FCY (8 MIPS)
    }
}

int main(void) {
    char buforWyswietlacza[32];
    LCD_Initialize();
    unsigned int bialePozostalyCzas = remainingTimeTotalSeconds;
    unsigned int czarnePozostalyCzas = remainingTimeTotalSeconds;
    int aktualnaFaza = 3; // 3 - wybór rozpoczynajacego, 1 - tura bialych, 2 - tura czarnych, 0 - koniec gry

    while (1) {
        // Sprawdzamy przyciski w kazdej iteracji petli glównej
        if (BUTTON_IsPressed(BUTTON_S6)) {
            aktualnaFaza = 0; // Mat
            LCD_ClearScreen();
            LCD_PutString("Mat", strlen("Mat")); 
            opoznienie_ms(2000); 
            bialePozostalyCzas = remainingTimeTotalSeconds;
            czarnePozostalyCzas = remainingTimeTotalSeconds;
            aktualnaFaza = 3; 
            continue; 
        }

        if (BUTTON_IsPressed(BUTTON_S3) && BUTTON_IsPressed(BUTTON_S4)) {
            aktualnaFaza = 0; // Remis
            LCD_ClearScreen();
            LCD_PutString("Remis", strlen("Remis")); 
            opoznienie_ms(2000); 
            bialePozostalyCzas = remainingTimeTotalSeconds;
            czarnePozostalyCzas = remainingTimeTotalSeconds;
            aktualnaFaza = 3; 
            continue; 
        }

        switch (aktualnaFaza) {
            case 0: // Koniec czasu
                LCD_ClearScreen();
                if (bialePozostalyCzas < 1) {
                    LCD_PutString("Biale przegrywaja", strlen("Biale przegrywaja"));
                } else if (czarnePozostalyCzas < 1) {
                    LCD_PutString("Czarne przegrywaja", strlen("Czarne przegrywaja"));
                }
                opoznienie_ms(10000); 
                bialePozostalyCzas = remainingTimeTotalSeconds; 
                czarnePozostalyCzas = remainingTimeTotalSeconds; 
                aktualnaFaza = 3;  
                break;

            case 1: // Tura bialych
                if (BUTTON_IsPressed(BUTTON_S4)) {
                    aktualnaFaza = 2;
                    break;
                }
                sprintf(buforWyswietlacza, "%02u:%02u biale", bialePozostalyCzas / 60, bialePozostalyCzas % 60);
                LCD_ClearScreen();
                LCD_PutString(buforWyswietlacza, strlen(buforWyswietlacza));
                LCD_PutString("\n", 1);
                sprintf(buforWyswietlacza, "%02u:%02u czarne", czarnePozostalyCzas / 60, czarnePozostalyCzas % 60);
                LCD_PutString(buforWyswietlacza, strlen(buforWyswietlacza));
                opoznienie_ms(1000); 
                bialePozostalyCzas--;
                if (bialePozostalyCzas < 1) {
                    aktualnaFaza = 0;
                }
                break;

            case 2: // Tura czarnych
                if (BUTTON_IsPressed(BUTTON_S3)) {
                    aktualnaFaza = 1;
                    break;
                }
                sprintf(buforWyswietlacza, "%02u:%02u czarne", czarnePozostalyCzas / 60, czarnePozostalyCzas % 60);
                LCD_ClearScreen();
                LCD_PutString(buforWyswietlacza, strlen(buforWyswietlacza));
                LCD_PutString("\n", 1);
                sprintf(buforWyswietlacza, "%02u:%02u biale", bialePozostalyCzas / 60, bialePozostalyCzas % 60);
                LCD_PutString(buforWyswietlacza, strlen(buforWyswietlacza));
                opoznienie_ms(1000);
                czarnePozostalyCzas--;
                if (czarnePozostalyCzas < 1) {
                    aktualnaFaza = 0;
                }
                break;

            case 3: // Kto zaczyna?
                LCD_ClearScreen();
                LCD_PutString("Kto zaczyna?\n S3=b S4=cz", strlen("Kto zaczyna?\n S3=b S4=cz"));
                opoznienie_ms(1000);
                LCD_ClearScreen();
                if (BUTTON_IsPressed(BUTTON_S3)) {
                    aktualnaFaza = 1; 
                    break;
                }
                if (BUTTON_IsPressed(BUTTON_S4)) {
                    aktualnaFaza = 2;
                    break;
                }
                break;

            default:
                break;
        }

        // Resetowanie gry przez przytrzymanie przycisku S5
        if (BUTTON_IsPressed(BUTTON_S5)) {
            aktualnaFaza = 3; 
            bialePozostalyCzas = remainingTimeTotalSeconds;
            czarnePozostalyCzas = remainingTimeTotalSeconds;
        }
    }
    return 0;
}
Leave a Comment