Untitled

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

#define TOTAL_TIME (1500)

volatile unsigned int seconds = TOTAL_TIME;

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

int main(void) {
    char buffer[32];
    LCD_Initialize();
    unsigned int remainingSecondsWhite = seconds;
    unsigned int remainingSecondsBlack = seconds;
    int gamePhase = 3; // 0: koniec, 1: tura białych, 2: tura czarnych, 3: start

    while (true) {
        // Obsługa przycisków funkcyjnych S5 i S6
        if (BUTTON_IsPressed(BUTTON_S5)) {  // Reset gry
            gamePhase = 3;
            remainingSecondsWhite = seconds;
            remainingSecondsBlack = seconds;
        } else if (BUTTON_IsPressed(BUTTON_S6)) { // Mat lub remis
            LCD_ClearScreen();
            if (BUTTON_IsPressed(BUTTON_S3)) {
                LCD_PutString("Mat", strlen("Mat"));
            } else {
                LCD_PutString("Remis", strlen("Remis"));
            }
            delay_ms(2000);
            remainingSecondsWhite = seconds;
            remainingSecondsBlack = seconds;
            gamePhase = 3;
            continue;
        }

        // Wyświetlanie czasu - zawsze w tej samej kolejności
        sprintf(buffer, "czarne: %02u:%02u", remainingSecondsBlack / 60, remainingSecondsBlack % 60);
        LCD_ClearScreen();
        LCD_PutString(buffer, strlen(buffer));
        LCD_PutString("\n", 1); 
        sprintf(buffer, "biale: %02u:%02u", remainingSecondsWhite / 60, remainingSecondsWhite % 60);
        LCD_PutString(buffer, strlen(buffer));


        switch (gamePhase) {

            case 0:  // Koniec czasu
                if (remainingSecondsWhite < 1) {
                    LCD_PutString("\nBiale przegrywaja", strlen("\nBiale przegrywaja"));
                } else {
                    LCD_PutString("\nCzarne przegrywaja", strlen("\nCzarne przegrywaja"));
                }
                __delay_ms(4000);
                remainingSecondsWhite = seconds;
                remainingSecondsBlack = seconds;
                gamePhase = 3;  
                break;

            case 1:  // Tura białych
                if (BUTTON_IsPressed(BUTTON_S3)) { // Zmiana tury 
                    gamePhase = 2;
                    break;
                }

                __delay_ms(1000); 
                remainingSecondsWhite--;

                if (remainingSecondsWhite < 1) {
                    gamePhase = 0;
                }
                break;

            case 2:  // Tura czarnych
                if (BUTTON_IsPressed(BUTTON_S4)) { // Zmiana tury
                    gamePhase = 1;
                    break;
                }
                __delay_ms(1000); 
                remainingSecondsBlack--;
                if (remainingSecondsBlack < 1) {
                    gamePhase = 0;
                }
                break;


            case 3: // Kto zaczyna?
                LCD_ClearScreen();
                LCD_PutString("Kto zaczyna?\n s3=biale s4=czarne",32);
                __delay_ms(4000);
                LCD_ClearScreen();
                
                // Dodatkowe sprawdzenie, czy gracz już wybrał
                while (gamePhase == 3) {
                    if (BUTTON_IsPressed(BUTTON_S3) == true) {
                        gamePhase = 1; // Białe zaczynają po naciśnięciu S3
                    } else if (BUTTON_IsPressed(BUTTON_S4) == true) {
                        gamePhase = 2; // Czarne zaczynają po naciśnięciu S4
                    }
                }
                break;

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