Untitled
unknown
plain_text
a year ago
5.2 kB
6
Indexable
#include <xc.h> #include <libpic30.h> #include <stdio.h> #include <string.h> #include "lcd.h" #include "buttons.h" #define INITIAL_TIME (1500) // Ca?kowity pocz?tkowy czas dla ka?dego gracza w sekundach volatile unsigned int total_seconds = 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(); unsigned int white_time_remaining = total_seconds; unsigned int black_time_remaining = total_seconds; int current_phase = 3; while (1) { // Sprawdzamy przyciski w ka?dej iteracji p?tli g?ównej if (BUTTON_IsPressed(BUTTON_S6)) { current_phase = 0; // Mat LCD_ClearScreen(); LCD_PutString("Mat", strlen("Mat")); // Wy?wietlenie komunikatu "Mat" delay_ms(2000); // Czekamy 2 sekundy na odczyt komunikatu white_time_remaining = total_seconds; black_time_remaining = total_seconds; current_phase = 3; // Powrót do ekranu startowego continue; // Przeskakujemy do nast?pnej iteracji p?tli } if (BUTTON_IsPressed(BUTTON_S3) && BUTTON_IsPressed(BUTTON_S4)) { current_phase = 0; // Remis LCD_ClearScreen(); LCD_PutString("Remis", strlen("Remis")); // Wy?wietlenie komunikatu "Remis" delay_ms(2000); // Czekamy 2 sekundy na odczyt komunikatu white_time_remaining = total_seconds; black_time_remaining = total_seconds; current_phase = 3; // Powrót do ekranu startowego continue; // Przeskakujemy do nast?pnej iteracji p?tli } switch (current_phase) { case 0: // Koniec czasu - resetowanie zegarów i powrót do ekranu startowego LCD_ClearScreen(); if (white_time_remaining < 1) { LCD_PutString("Biale przegrywaja", strlen("Biale przegrywaja")); } else if (black_time_remaining < 1) { LCD_PutString("Czarne przegrywaja", strlen("Czarne przegrywaja")); } delay_ms(10000); // Czekamy 10 sekund white_time_remaining = total_seconds; // Reset czasu bia?ych black_time_remaining = total_seconds; // Reset czasu czarnych current_phase = 3; break; case 1: // Tura bia?ych if (BUTTON_IsPressed(BUTTON_S4)) { current_phase = 2; break; } sprintf(display_buffer, "%02u:%02u biale", white_time_remaining / 60, white_time_remaining % 60); LCD_ClearScreen(); LCD_PutString(display_buffer, strlen(display_buffer)); LCD_PutString("\n", 1); sprintf(display_buffer, "%02u:%02u czarne", black_time_remaining / 60, black_time_remaining % 60); LCD_PutString(display_buffer, strlen(display_buffer)); delay_ms(1000); // Czekamy 1 sekund? white_time_remaining--; if (white_time_remaining < 1) { current_phase = 0; } break; case 2: // Tura czarnych if (BUTTON_IsPressed(BUTTON_S3)) { current_phase = 1; break; } sprintf(display_buffer, "%02u:%02u czarne", black_time_remaining / 60, black_time_remaining % 60); LCD_ClearScreen(); LCD_PutString(display_buffer, strlen(display_buffer)); LCD_PutString("\n", 1); sprintf(display_buffer, "%02u:%02u biale", white_time_remaining / 60, white_time_remaining % 60); LCD_PutString(display_buffer, strlen(display_buffer)); delay_ms(1000); // Czekamy 1 sekund? black_time_remaining--; if (black_time_remaining < 1) { current_phase = 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")); delay_ms(1000); LCD_ClearScreen(); if (BUTTON_IsPressed(BUTTON_S3)) { current_phase = 1; // Bia?e zaczynaj? break; } if (BUTTON_IsPressed(BUTTON_S4)) { current_phase = 2; // Czarne zaczynaj? break; } break; default: break; } // Resetowanie gry przez przytrzymanie przycisku S5 if (BUTTON_IsPressed(BUTTON_S5)) { current_phase = 3; white_time_remaining = total_seconds; black_time_remaining = total_seconds; } } return 0; }
Editor is loading...
Leave a Comment