Untitled

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

#define INITIAL_TIME (15) // Czas początkowy w sekundach (15 sekund dla testów)

volatile unsigned int biale_czas = INITIAL_TIME;
volatile unsigned int czarne_czas = INITIAL_TIME;

void delay_ms(unsigned long milliseconds) {
    while (milliseconds--) {
        __delay32(4000); // Zakładając 8 MHz FCY (8 MIPS)
    }
}

int main(void) {
    char display_buffer[32];
    LCD_Initialize();
    int faza_gry = 3; // Faza początkowa: wybór kto zaczyna

    while (1) {
        // Obsługa przycisków funkcyjnych (mat i remis) - bez zmian

        switch (faza_gry) {
            case 0: // Koniec gry (mat lub remis)
                biale_czas = INITIAL_TIME;
                czarne_czas = INITIAL_TIME;
                faza_gry = 3; // Powrót do wyboru kto zaczyna
                break;

            case 1: // Tura białych
                if (BUTTON_IsPressed(BUTTON_S3)) { // Przełączanie na turę czarnych
                    faza_gry = 2;
                } else {
                    LCD_ClearScreen();
                    sprintf(display_buffer, "%02u:%02u czarne", czarne_czas / 60, czarne_czas % 60);
                    LCD_PutString(display_buffer, strlen(display_buffer));
                    LCD_PutString("\n", 1);
                    sprintf(display_buffer, "%02u:%02u biale", biale_czas / 60, biale_czas % 60);
                    LCD_PutString(display_buffer, strlen(display_buffer));
                    delay_ms(1000);
                    czarne_czas--; // Dekrementujemy czas czarnych, bo to oni czekają
                    if (czarne_czas == 0) {
                        faza_gry = 0; // Koniec czasu czarnych
                        LCD_PutString("Czarne przegrywaja", strlen("Czarne przegrywaja"));
                        delay_ms(10000); // Czas na odczytanie komunikatu
                    }
                }
                break;

            case 2: // Tura czarnych (analogicznie do tury białych)
                if (BUTTON_IsPressed(BUTTON_S4)) { // Przełączanie na turę białych
                    faza_gry = 1;
                } else {
                    LCD_ClearScreen();
                    sprintf(display_buffer, "%02u:%02u biale", biale_czas / 60, biale_czas % 60);
                    LCD_PutString(display_buffer, strlen(display_buffer));
                    LCD_PutString("\n", 1);
                    sprintf(display_buffer, "%02u:%02u czarne", czarne_czas / 60, czarne_czas % 60);
                    LCD_PutString(display_buffer, strlen(display_buffer));
                    delay_ms(1000);
                    biale_czas--; // Dekrementujemy czas białych, bo to oni czekają
                    if (biale_czas == 0) {
                        faza_gry = 0; // Koniec czasu białych
                        LCD_PutString("Biale przegrywaja", strlen("Biale przegrywaja"));
                        delay_ms(10000); // Czas na odczytanie komunikatu
                    }
                }
                break;

            case 3: // Wybór kto zaczyna
                LCD_ClearScreen();
                LCD_PutString("Kto zaczyna?\n S3=b S4=cz", strlen("Kto zaczyna?\n S3=b S4=cz"));
                if (BUTTON_IsPressed(BUTTON_S3)) {
                    faza_gry = 2; // Białe zaczynają, więc odliczamy czas czarnych
                } else if (BUTTON_IsPressed(BUTTON_S4)) {
                    faza_gry = 1; // Czarne zaczynają, więc odliczamy czas białych
                }
                break;
        }

        // Resetowanie gry przyciskiem S5 - bez zmian
    }

    return 0;
}
Leave a Comment