diff options
| author | KaiStevenson <kai@kaistevenson.com> | 2022-12-06 22:16:12 -0800 |
|---|---|---|
| committer | KaiStevenson <kai@kaistevenson.com> | 2022-12-06 22:16:12 -0800 |
| commit | 7ef39a806620b05555125f4fdb99889442a4d6e3 (patch) | |
| tree | 9a0da2f851f9d70536635a4ec1599d301750665a /chess.c | |
| parent | e8e00b9eb6e3979dd1066fc3a73f39565e8ec9cf (diff) | |
separated code into multiple files
Diffstat (limited to 'chess.c')
| -rw-r--r-- | chess.c | 192 |
1 files changed, 3 insertions, 189 deletions
@@ -1,121 +1,10 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> +#include "vector.h" +#include "console.h" +#include "chesshelpers.h" -#define ANSI_COLOR_RED "\x1b[31m" -#define ANSI_COLOR_GREEN "\x1b[32m" -#define ANSI_COLOR_YELLOW "\x1b[33m" -#define ANSI_COLOR_BLUE "\x1b[34m" -#define ANSI_COLOR_MAGENTA "\x1b[35m" -#define ANSI_COLOR_CYAN "\x1b[36m" -#define ANSI_COLOR_RESET "\x1b[0m" - -typedef enum { - pawn = 1, - knight = 2, - bishop = 3, - rook = 4, - queen = 5, - king = 6, -} piece_t; -typedef struct Vector { - int mx; - int my; -} vector_t; -vector_t init_vector(int mx, int my) { - vector_t vector; - vector.mx = mx; - vector.my = my; - return vector; -} -typedef struct VectorP { - vector_t* vectors; - int length; -} vectorp_t; -vectorp_t init_vectorp(vector_t* vectors, int length) { - vectorp_t vectorP; - vectorP.vectors = vectors; - vectorP.length = length; - return vectorP; -} -void draw_board(int board[8][8]) { - printf(" A B C D E F G H\n"); - int tileColor = 1; - for(int r = 0; r < 8; r++) { - tileColor = !tileColor; - char* line = calloc(2 + (8 * 10), sizeof(char)); - line[0] = '8' - r; - line[1] = ' '; - for(int c = 0; c < 8; c++) { - tileColor = !tileColor; - strcat(line, tileColor == 0 ? ANSI_COLOR_RED : ANSI_COLOR_RESET); - if(board[c][r] <= 6) { - switch(board[c][r]) { - case 0: - strcat(line, "# "); - break; - case pawn: - strcat(line, "P "); - break; - case knight: - strcat(line, "N "); - break; - case bishop: - strcat(line, "B "); - break; - case rook: - strcat(line, "R "); - break; - case queen: - strcat(line, "Q "); - break; - case king: - strcat(line, "K "); - break; - } - } - else { - switch(board[c][r] - 6) { - case pawn: - strcat(line, "p "); - break; - case knight: - strcat(line, "n "); - break; - case bishop: - strcat(line, "b "); - break; - case rook: - strcat(line, "r "); - break; - case queen: - strcat(line, "q "); - break; - case king: - strcat(line, "k "); - break; - } - } - } - printf(line); - printf("\n" ANSI_COLOR_RESET); - free(line); - } -} -int in_board(vector_t position) { - return position.mx < 8 && position.mx >= 0 && position.my < 8 && position.my >= 0; -} -int is_empty(int board[8][8], vector_t position) { - return board[position.mx][position.my] == 0; -} -int is_color(int board[8][8], vector_t position, int color) { - if(color == 0) { - return board[position.mx][position.my] >= 1 && board[position.mx][position.my] <= 6; - } - else { - return board[position.mx][position.my] >= 7; - } -} vectorp_t get_pawn_moves(int board[8][8], vector_t position, int color) { vector_t* moves = malloc(6 * sizeof(vector_t)); int moveCount = 0; @@ -283,81 +172,6 @@ vectorp_t get_moves(int board[8][8], vector_t position, piece_t piece) { return get_queen_moves(board, position, color); } } -vector_t user_input_pos() { - char* inputString = malloc(3 * sizeof(char)); - vector_t pos; - printf("Enter coordinates: "); - scanf("%2s", inputString); - for(int i = 0; i < 2; i++) { - if(inputString[i] <= '9' && inputString[i] >= '0') { - pos.my = 8 - (inputString[i] - '0'); - } - else if(inputString[i] <= 'Z' && inputString[i] >= 'A') { - pos.mx = inputString[i] - 'A'; - } - else if(inputString[i] <= 'z' && inputString[i] >= 'a') { - pos.mx = inputString[i] - 'a'; - } - else { - return init_vector(-1, -1); - } - } - free(inputString); - return pos; -} -//converts board coordinates into algebraic notation -char* get_readable_coords(vector_t position) { - char* output = malloc(3 * sizeof(char)); - output[0] = 'a' + position.mx; - output[1] = '8' - position.my; - output[2] = '\0'; - return output; -} -//gets the proper algebraic notation for the move -char* get_move_name(int board[8][8], vector_t origin, vector_t end) { - int piece = board[origin.mx][origin.my]; - if(piece > 6) { - piece -= 6; - } - if(piece != 1) { - char cPiece = piece == pawn ? 'P' : piece == knight ? 'N' : piece == bishop ? 'B' : piece == rook ? 'R' : piece == queen ? 'Q' : 'K'; - int isCapture = board[end.mx][end.my] != 0; - char* output = calloc(isCapture ? 5 : 4, sizeof(char)); - output[0] = cPiece; - if(isCapture) { - output[1] = 'x'; - } - char* rEnd = get_readable_coords(end); - strcat(output, rEnd); - free(rEnd); - output[isCapture ? 4 : 3] = '\0'; - return output; - } - else { - int isCapture = board[end.mx][end.my] != 0; - char* output = calloc(isCapture ? 5 : 3, sizeof(char)); - if(isCapture) { - output[0] = 'a' + origin.mx; - output[1] = 'x'; - } - char* rEnd = get_readable_coords(end); - strcat(output, rEnd); - free(rEnd); - output[isCapture ? 4 : 2] = '\0'; - return output; - } -} -void clear_screen() { - system("@cls||clear"); -} -void warn_user(char* message) { - clear_screen(); - printf("\n"); - printf(message); - printf("\nPress any key to continue...\n"); - while(getchar() != '\n'); - getchar(); -} int main() { int board[8][8] = { { rook + 6, pawn + 6, 0, 0, 0, 0, pawn, rook }, |
