From 4b2fdc91d42a438193d15840e10851c3847fbe80 Mon Sep 17 00:00:00 2001 From: scratko Date: Sat, 17 Aug 2024 02:42:19 +0300 Subject: Global fixes v3.0 Fixed bug when entering cards incorrectly. Added recognition of disconnection from the server. Added welcome screen and update screen. --- client/verification_client_input.c | 58 ++++++++++++++++++++++++-------------- 1 file changed, 37 insertions(+), 21 deletions(-) (limited to 'client/verification_client_input.c') diff --git a/client/verification_client_input.c b/client/verification_client_input.c index 1530387..171cd64 100644 --- a/client/verification_client_input.c +++ b/client/verification_client_input.c @@ -1,5 +1,6 @@ #include "verification_client_input.h" #include "card_handling.h" +#include "printing_game_frames.h" #include #include @@ -33,7 +34,7 @@ int vci_confirmation_waiting(int fd, char *buffer) int vci_attack_or_tossing(int fd, char *buffer, player_cards deck, enum client_states state) { - int i, free_pos = 0; + int rank = 0, i, free_pos = 0; char * card = NULL; if(state == tossing && buffer[0] == '\n') { /* cancel card tossing */ @@ -41,31 +42,45 @@ int vci_attack_or_tossing(int fd, char *buffer, player_cards deck, return 1; } - for(i = 0; buffer[i] != '\n'; ++i) - if((card = card_search_by_letter(deck, buffer[i])) != NULL) { -#if 0 - if(!rank) - rank = convert_rank_to_int(card); - if(rank == convert_rank_to_int(card)) { -#endif - strncpy(output_buffer + free_pos, card, strlen(card)); - free_pos += strlen(card); - output_buffer[free_pos] = '\\'; - ++free_pos; -#if 0 - } else { - printf("incorrect input\n"); - return 0; + for(i = 0; buffer[i] != '\n'; ++i) { + /* some symbols */ + if(state == attack && buffer[1] != '\n') { + card = card_search_by_marked_letter(deck, buffer[i]); + if(card) { + if(!rank) + rank = convert_rank_to_int(card); + if(rank != convert_rank_to_int(card)) { + printf("incorrect input\n> "); + fflush(stdout); + return 0; + } } -#endif - } else { - printf("incorrect input\n"); + /* one symbol inputed? */ + } else if(state == attack && buffer[1] == '\n') + card = card_search_by_unmarked_letter(deck, buffer[i]); + else if(state == tossing) + card = card_search_by_marked_letter(deck, buffer[i]); + + if(!card) { + printf("incorrect input\n> "); + fflush(stdout); return 0; } + strncpy(output_buffer + free_pos, card, strlen(card)); + free_pos += strlen(card); + output_buffer[free_pos] = '\\'; + ++free_pos; + } + if(state == attack && buffer[0] == '\n') { + printf("incorrect input\n> "); + fflush(stdout); + return 0; + } output_buffer[free_pos] = '\n'; write(fd, output_buffer, free_pos+1); return 1; } + /* * example: 5v'\n' * or: '\n' @@ -80,10 +95,11 @@ int vci_defense(int fd, char *buffer, player_cards deck) return 1; } if(buffer[1] != '\n') { - printf("incorrect input\n"); + printf("incorrect input\n> "); + fflush(stdout); return 0; } - if((card = card_search_by_letter(deck, buffer[0])) != NULL) { + if((card = card_search_by_marked_letter(deck, buffer[0])) != NULL) { strcpy(output_buffer, card); last_idx = strlen(card); output_buffer[last_idx] = '\n'; -- cgit v1.2.3