Getting rid of the jail. And fixing "king eating bug"

This commit is contained in:
Daniel Weber 2024-02-21 20:36:56 -05:00
parent 3819294f57
commit eee9b2dc38
2 changed files with 17 additions and 81 deletions

View File

@ -4,9 +4,9 @@
static uint8_t Board_State[12][8] = {{0}}; static uint8_t Board_State[8][8] = {{0}};
static uint8_t Saved_Binary_Board[12] = {0}; static uint8_t Saved_Binary_Board[8] = {0};
static uint8_t Board_Lights[12][8] = {{0}}; static uint8_t Board_Lights[8][8] = {{0}};
static uint8_t Game_State = GAME_STATE_P1_TURN_BEGINING; static uint8_t Game_State = GAME_STATE_P1_TURN_BEGINING;
static uint8_t Last_Game_State = GAME_STATE_P1_TURN_BEGINING; static uint8_t Last_Game_State = GAME_STATE_P1_TURN_BEGINING;
static bool White_Turn = true; static bool White_Turn = true;
@ -599,59 +599,6 @@ static bool Mark_Potential_Moves(uint8_t piece, uint8_t column, uint8_t row)
return ret_val; return ret_val;
} }
/**
* @brief Function for marking the taken pieces potention moves to jail.
*/
static void Mark_Taken_Piece_Spots_In_Jail(void)
{
uint8_t add = (white_team(Taken_Piece) ? 8u : 10u);
switch (Taken_Piece)
{
/* Pawns just send them to jail, we dont care where */
case PAWN_WHITE:
case PAWN_BLACK:
{
for (uint8_t j = 0; j < 2u; j++)
{
for (uint8_t i = 0; i < 4u; i++)
{
if(Board_State[add + j][i] != Taken_Piece)
{
Board_State[add + j][i] = Taken_Piece;
Taken_Piece = SQUARE_EMPTY;
return;
}
}
}
break;
}
case ROOK_WHITE:
case ROOK_BLACK:
case KNIGHT_WHITE:
case KNIGHT_BLACK:
case BISHOP_WHITE:
case BISHOP_BLACK:
case QUEEN_WHITE:
case QUEEN_BLACK:
{
uint8_t jail_row = (Taken_Piece / 2u) + 2u;
if (Board_State[add][jail_row] != Taken_Piece)
{
Board_Lights[add][jail_row] = PIECE_NEEDS_TO_BE_HERE;
}
if (Board_State[add + 1u][jail_row] != Taken_Piece)
{
Board_Lights[add + 1u][jail_row] = PIECE_NEEDS_TO_BE_HERE;
}
break;
}
default:
{
break;
}
}
}
bool Check_If_Player_Can_Move(bool white) bool Check_If_Player_Can_Move(bool white)
{ {
for (uint8_t row = 0; row < 8u; row++) for (uint8_t row = 0; row < 8u; row++)
@ -908,7 +855,6 @@ static void Board_Square_Was_Toggled(uint8_t j, uint8_t i)
// Taken_Piece = Board_State[j][i]; // Taken_Piece = Board_State[j][i];
Board_State[j][i] = SQUARE_EMPTY; Board_State[j][i] = SQUARE_EMPTY;
Game_State = (White_Turn ? GAME_STATE_P1_TURN_TAKING : GAME_STATE_P2_TURN_TAKING); Game_State = (White_Turn ? GAME_STATE_P1_TURN_TAKING : GAME_STATE_P2_TURN_TAKING);
// Mark_Taken_Piece_Spots_In_Jail();
clear_lights(); clear_lights();
Board_Lights[j][i] = PIECE_NEEDS_TO_BE_HERE; Board_Lights[j][i] = PIECE_NEEDS_TO_BE_HERE;
} }
@ -963,23 +909,13 @@ static void Board_Square_Was_Toggled(uint8_t j, uint8_t i)
{ {
if (Board_Lights[j][i] == PIECE_NEEDS_TO_BE_HERE) if (Board_Lights[j][i] == PIECE_NEEDS_TO_BE_HERE)
{ {
if(j < 8u) Check_If_Moving_King(j, i);
{
Check_If_Converting_Pawn(j, i); Check_If_Converting_Pawn(j, i);
Board_State[j][i] = Selected_Piece; Board_State[j][i] = Selected_Piece;
Selected_Piece = SQUARE_EMPTY; Selected_Piece = SQUARE_EMPTY;
Board_Lights[j][i] = LIGHT_OFF; Board_Lights[j][i] = LIGHT_OFF;
} }
else else
{
Board_State[j][i] = Taken_Piece;
Board_Lights[(j / 2u) * 2u][i] = LIGHT_OFF;
Board_Lights[(j / 2u) * 2u + 1u][i] = LIGHT_OFF;
Taken_Piece = SQUARE_EMPTY;
}
}
else
{ {
if(!Converting_Pawn_If_Applicable(j, i)) if(!Converting_Pawn_If_Applicable(j, i))
{ {
@ -1004,7 +940,7 @@ static void Board_Square_Was_Toggled(uint8_t j, uint8_t i)
} }
} }
void Board_get_lights_and_state(uint8_t board_lights[12][8], uint8_t board_state[12][8]) void Board_get_lights_and_state(uint8_t board_lights[8][8], uint8_t board_state[8][8])
{ {
memcpy(&board_lights[0][0], &Board_Lights[0][0], sizeof(Board_Lights)); memcpy(&board_lights[0][0], &Board_Lights[0][0], sizeof(Board_Lights));
memcpy(&board_state[0][0], &Board_State[0][0], sizeof(Board_State)); memcpy(&board_state[0][0], &Board_State[0][0], sizeof(Board_State));
@ -1017,9 +953,9 @@ void Board_get_lights_and_state(uint8_t board_lights[12][8], uint8_t board_state
* so I'm designing it this way because of the hardware that I'm using. * so I'm designing it this way because of the hardware that I'm using.
* @retval None * @retval None
*/ */
void Board_Changed(uint8_t current_binary_board[12]) void Board_Changed(uint8_t current_binary_board[8])
{ {
for (uint8_t j = 0u; j < 12u; j++) for (uint8_t j = 0u; j < 8u; j++)
{ {
uint8_t difference = (current_binary_board[j] ^ Saved_Binary_Board[j]); uint8_t difference = (current_binary_board[j] ^ Saved_Binary_Board[j]);
if (difference != 0u) if (difference != 0u)
@ -1045,7 +981,7 @@ void Board_Changed(uint8_t current_binary_board[12])
*/ */
void chess_board_init(void) void chess_board_init(void)
{ {
for (uint8_t i = 0u; i < 12u; i++) for (uint8_t i = 0u; i < 8u; i++)
{ {
for (uint8_t j = 0u; j < 8u; j++) for (uint8_t j = 0u; j < 8u; j++)
{ {

View File

@ -20,10 +20,10 @@ static int Board_Width;
SDL_Surface *bitmapSurface = NULL; SDL_Surface *bitmapSurface = NULL;
SDL_Texture * bitmapTextures[12] = {NULL}; SDL_Texture * bitmapTextures[12] = {NULL};
static uint8_t Current_Binary_Board[12] = {0}; static uint8_t Current_Binary_Board[8] = {0};
static void ui_draw_end_game(SDL_Renderer *p_renderer, uint8_t board_state[12][8], uint8_t game_state) static void ui_draw_end_game(SDL_Renderer *p_renderer, uint8_t board_state[8][8], uint8_t game_state)
{ {
SDL_SetRenderTarget(p_renderer, Board_Texture); SDL_SetRenderTarget(p_renderer, Board_Texture);
SDL_SetRenderDrawColor(p_renderer, 0x7f, 0x7f, 0x7f, 0); SDL_SetRenderDrawColor(p_renderer, 0x7f, 0x7f, 0x7f, 0);
@ -176,7 +176,7 @@ static void ui_draw_board(SDL_Renderer *p_renderer, uint8_t board_lights[12][8],
SDL_SetRenderDrawColor(p_renderer, 0x6F, 0x6f, 0x6f, 0x00); SDL_SetRenderDrawColor(p_renderer, 0x6F, 0x6f, 0x6f, 0x00);
/* Now we draw the jail */ /* Now we draw the jail */
for (size_t j = 8; j < 12; j++) for (size_t j = 8; j < 8; j++)
{ {
Rectangle.y = starting_y; Rectangle.y = starting_y;
for (size_t i = 0; i < 8; i++) for (size_t i = 0; i < 8; i++)
@ -226,8 +226,8 @@ static void ui_draw_board(SDL_Renderer *p_renderer, uint8_t board_lights[12][8],
void ui_redraw_board(SDL_Renderer *p_renderer) void ui_redraw_board(SDL_Renderer *p_renderer)
{ {
uint8_t board_lights[12][8]; uint8_t board_lights[8][8];
uint8_t board_state[12][8]; uint8_t board_state[8][8];
uint8_t game_state; uint8_t game_state;
Board_get_game_state(&game_state); Board_get_game_state(&game_state);
Board_get_lights_and_state(board_lights, board_state); Board_get_lights_and_state(board_lights, board_state);