diff --git a/src/game.c b/src/game.c index 316b3c0..74e0d21 100644 --- a/src/game.c +++ b/src/game.c @@ -2,12 +2,25 @@ #include #include #include +#include #include "game.h" #include "io.h" #include "draw.h" #include "bitmap.h" //generated by gimp +static const char* texts [] = { + "Config Instructions:", + "* Change the player colors using the switches S7-S0", + "* Use the poti to change the game speed", + "* Press T0 to start the game", + "", + "Game Instructions:", + "* Player 1 Keys: T3 and T2", + "* Player 2 Keys: T1 and T0", + "* Stay alive!", + NULL +}; void game_init(game_t* game, uint16_t ticks_per_sec) { @@ -244,7 +257,6 @@ void game_get_color(uint16_t confbits, uint16_t* player1_color, uint16_t* player } } - bool game_step_init(game_t* game) { //Draw welcome bitmap @@ -261,21 +273,6 @@ bool game_step_init(game_t* game) { return true; } - -static const char* texts [] = { - "Config Instructions:", - "* Change the player colors using the switches S7-S0", - "* Use the poti to change the game speed", - "* Press T0 to start the game", - "", - "Game Instructions:", - "* Player 1 Keys: T3 and T2", - "* Player 2 Keys: T1 and T0", - "* Stay alive!", - NULL -}; - - bool game_step_prestart(game_t* game) { //Draw "Player x: Color" Strings @@ -309,9 +306,8 @@ bool game_step_prestart(game_t* game) { i++; } - uint8_t switches_old = 0; - uint16_t adc_old =0; + uint16_t adc_old = 0; uint16_t player1_color=0, player2_color=0,game_speed=0; bool first = true; @@ -486,6 +482,31 @@ bool game_step_running(game_t* game, uint64_t delta_time) } bool game_step_ended(game_t* game) { + + // Kill screen + LCD_DrawRect(TG_END_LEFT, // left top x + TG_END_TOP, // left top y + (TFT_WIDTH - TG_END_LEFT - TG_END_RIGHT - 1), // right bottom x + (TFT_HEIGHT - TG_END_TOP - TG_END_BOTTOM - 1), // right bottom y + GUI_COLOR_WHITE); // Color of the boundary + LCD_DrawRectF(TG_END_LEFT + 1, // left top x + TG_END_TOP + 1, // left top y + (TFT_WIDTH - TG_END_LEFT - TG_END_RIGHT - 3), // right bottom x + (TFT_HEIGHT - TG_END_TOP - TG_END_BOTTOM - 3), // right bottom y + GUI_COLOR_DARK_GREY); // Color of the boundary + + LCD_SetTextColor(GUI_COLOR_BLACK); + LCD_SetBackColor(GUI_COLOR_DARK_GREY); + LCD_SetFont(&font_9x15B); + LCD_DisplayStringXY(TG_END_LEFT + TG_START_FONT_OFFSET_Y, + TG_END_TOP + TG_START_FONT_OFFSET_Y, + "Game over!"); + LCD_DisplayStringXY(TG_END_LEFT + TG_START_FONT_OFFSET_Y, + TG_END_TOP + TG_START_FONT_OFFSET_Y + 20, + "Press S0 to restart."); + LCD_SetBackColor(GUI_COLOR_BLACK); + LCD_SetFont(&font_5x8); + while(!io_button_has_edge(BTN_START)); // Wait for the start button to be pressed again LCD_Clear(GUI_COLOR_BLACK); // Clear the background game->state= prestart; // Set the state to prestart diff --git a/src/game.h b/src/game.h index 3154b2b..726af85 100644 --- a/src/game.h +++ b/src/game.h @@ -27,6 +27,10 @@ #define TG_FIELD_LEFT 5 #define TG_FIELD_RIGHT 5 #define TG_FIELD_START_OFFSET 10 +#define TG_END_TOP 50 +#define TG_END_BOTTOM 30 +#define TG_END_LEFT 30 +#define TG_END_RIGHT 30 #define TG_HEADER_TIME_X 5 #define TG_HEADER_TIME_Y 3 #define TG_HEADER_PLAYER_X 100 diff --git a/src/io.c b/src/io.c index 48071b3..77ff7ad 100644 --- a/src/io.c +++ b/src/io.c @@ -30,8 +30,6 @@ static volatile unsigned char* SWITCH = (volatile unsigned char*)0x6C000400; #define SQR3_SQ_SET ((uint32_t)0x0000001F) #define SMPR1_SMP_SET ((uint32_t)0x00000007) - - void pin_create(pin_t* pin, GPIO_TypeDef* GPIO, uint8_t pinnr, bool input) { GPIO_InitTypeDef gi; // Create gpio init structure GPIO_StructInit(&gi); // Fill gpio init structure with defaults @@ -82,40 +80,28 @@ void io_init(void){ pin_create(&pin_t1, GPIOB, 15, true); // create pin_t1 pin_create(&pin_t2, GPIOB, 14, true); // create pin_t2 pin_create(&pin_t3, GPIOI, 0, true); // create pin_t3 - - // ADC Init //Enable the peripheral clock of GPIOB - //This has been already done in the startup code - //Page 239/1718 of "RM0090 Reference Reference Manual (October 2014)" RCC->AHB1ENR |= RCC_AHB1Periph_GPIOB; //Choose the working mode of PB0 with the GPIO port mode register - //Page 279/1718 of "RM0090 Reference Reference Manual (October 2014)" GPIOB->MODER &= ~GPIO_MODER_MODER0; GPIOB->MODER |= GPIO_Mode_AN; //Configure the GPIO port pull-up/pull-down register for PB0 //Page 282/1718 of "RM0090 Reference Reference Manual (October 2014)" GPIOB->PUPDR &= ~GPIO_PUPDR_PUPDR0; GPIOB->PUPDR |= GPIO_PuPd_UP; - //Initialize the ADC //Enable the peripheral clock of the ADC - //Page 245/1718 of "RM0090 Reference Reference Manual (October 2014)" RCC->APB2ENR |= RCC_APB2Periph_ADC; //Configure ADC1: scan conversion mode and resolution //Set SCAN bit according to ADC_ScanConvMode value //Set RES bit according to ADC_Resolution value - // Page 416/1718 of "RM0090 Reference Reference Manual (October 2014)" ADC1->CR1 = ADC_Resolution_10b; // Configure ADC1: regular channel sequence length // Set L bits according to ADC_NbrOfConversion value - // Page 422/1718 of "RM0090 Reference Reference Manual (October 2014)" ADC1->SQR1 = 0; // Set the ADON bit to enable the ADC - // Page 418/1718 of "RM0090 Reference Reference Manual (October 2014)" ADC1->CR2 = ADC_CR2_ADON; - - } void io_process(void) { @@ -159,8 +145,6 @@ uint16_t read_adc(){ return value; } - - uint8_t read_switches() { *LED=*SWITCH; return *SWITCH;