Untitled
unknown
plain_text
a year ago
5.0 kB
4
Indexable
#include <xc.h>
#include <libpic30.h>
#include <stdio.h>
#include <string.h>
#include "lcd.h"
#include "buttons.h"
#define INITIAL_GAME_DURATION_SECONDS (1500) // Całkowity początkowy czas dla każdego gracza w sekundach
volatile unsigned int remainingTimeTotalSeconds = INITIAL_GAME_DURATION_SECONDS;
void opoznienie_ms(unsigned long milisekundy) {
while (milisekundy--) {
__delay32(4000); // Zakładając 8 MHz FCY (8 MIPS)
}
}
int main(void) {
char buforWyświetlacza[32];
LCD_Initialize();
unsigned int bialePozostalyCzas = remainingTimeTotalSeconds;
unsigned int czarnePozostalyCzas = remainingTimeTotalSeconds;
int aktualnaFaza = 3; // 3 - wybór rozpoczynającego, 1 - tura białych, 2 - tura czarnych, 0 - koniec gry
while (1) {
// Sprawdzamy przyciski w każdej iteracji pętli głó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 białych
if (BUTTON_IsPressed(BUTTON_S4)) {
aktualnaFaza = 2;
break;
}
sprintf(buforWyświetlacza, "%02u:%02u biale", bialePozostalyCzas / 60, bialePozostalyCzas % 60);
LCD_ClearScreen();
LCD_PutString(buforWyświetlacza, strlen(buforWyświetlacza));
LCD_PutString("\n", 1);
sprintf(buforWyświetlacza, "%02u:%02u czarne", czarnePozostalyCzas / 60, czarnePozostalyCzas % 60);
LCD_PutString(buforWyświetlacza, strlen(buforWyświetlacza));
opoznienie_ms(1000);
bialePozostalyCzas--;
if (bialePozostalyCzas < 1) {
aktualnaFaza = 0;
}
break;
case 2: // Tura czarnych
if (BUTTON_IsPressed(BUTTON_S3)) {
aktualnaFaza = 1;
break;
}
sprintf(buforWyświetlacza, "%02u:%02u czarne", czarnePozostalyCzas / 60, czarnePozostalyCzas % 60);
LCD_ClearScreen();
LCD_PutString(buforWyświetlacza, strlen(buforWyświetlacza));
LCD_PutString("\n", 1);
sprintf(buforWyświetlacza, "%02u:%02u biale", bialePozostalyCzas / 60, bialePozostalyCzas % 60);
LCD_PutString(buforWyświetlacza, strlen(buforWyświetlacza));
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;
}
Editor is loading...
Leave a Comment