Untitled

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

#define TOTAL_TIME (1500) // Czas dla obu graczy
volatile unsigned int seconds = TOTAL_TIME;

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

int main(void) {
    char bufor[32];
    LCD_Initialize();

    unsigned int czas_bialego = seconds;
    unsigned int czas_czarnego = seconds;
    int faza_gry = 3; // Początkowa faza: wybór rozpoczynającego

    while (true) {
        // Obsługa przycisku reset (S5)
        if (BUTTON_IsPressed(BUTTON_S5)) {
            faza_gry = 3;
            czas_bialego = seconds;
            czas_czarnego = seconds;
        }

        switch (faza_gry) {
            case 0: // Koniec czasu
                LCD_ClearScreen();
                LCD_PutString(czas_bialego < 1 ? "Biale przegrywaja" : "Czarne przegrywaja", 17);
                delay_ms(10000); // Czekamy 10 sekund
                czas_bialego = seconds;
                czas_czarnego = seconds;
                faza_gry = 3;
                break;

            case 2: // Tura czarnych 
                if (BUTTON_IsPressed(BUTTON_S4)) { // Zmiana tury
                    faza_gry = 1;
                    break;
                }
                sprintf(bufor, "%02u:%02u czarne", czas_czarnego / 60, czas_czarnego % 60);
                LCD_ClearScreen();
                LCD_PutString(bufor, strlen(bufor));
                LCD_PutString("\n", 1);
                sprintf(bufor, "%02u:%02u biale", czas_bialego / 60, czas_bialego % 60);
                LCD_PutString(bufor, strlen(bufor));
                delay_ms(1000); // Czekamy sekundę
                if (--czas_czarnego < 1) {
                    faza_gry = 0;
                }
                break;

            case 1: // Tura białych
                if (BUTTON_IsPressed(BUTTON_S3)) { // Zmiana tury
                    faza_gry = 2;
                    break;
                }
                sprintf(bufor, "%02u:%02u biale", czas_bialego / 60, czas_bialego % 60);
                LCD_ClearScreen();
                LCD_PutString(bufor, strlen(bufor));
                LCD_PutString("\n", 1);
                sprintf(bufor, "%02u:%02u czarne", czas_czarnego / 60, czas_czarnego % 60);
                LCD_PutString(bufor, strlen(bufor));
                delay_ms(1000); // Czekamy sekundę
                if (--czas_bialego < 1) {
                    faza_gry = 0;
                }
                break;

            case 3: // Kto zaczyna?
                LCD_PutString("Kto zaczyna?\n s3=biale s4=czarne", 32);
                delay_ms(4000); // Czekamy 4 sekundy
                LCD_ClearScreen();
                if (BUTTON_IsPressed(BUTTON_S3)) {
                    faza_gry = 1;
                } else if (BUTTON_IsPressed(BUTTON_S4)) {
                    faza_gry = 2;
                }
                break;

            default:
                break;
        }
    }
    return 0;
}
Leave a Comment