back to scratko.xyz
aboutsummaryrefslogtreecommitdiff
path: root/client/verification_client_input.c
diff options
context:
space:
mode:
authorscratko <m@scratko.xyz>2024-08-17 02:42:19 +0300
committerscratko <m@scratko.xyz>2024-08-17 02:42:19 +0300
commit4b2fdc91d42a438193d15840e10851c3847fbe80 (patch)
tree08c3de6e851ee07463beae6d0a2fbd9e74202662 /client/verification_client_input.c
parenteb90648bdad1443c9cfc72e903a93642e10a0ab7 (diff)
downloaddurak-4b2fdc91d42a438193d15840e10851c3847fbe80.tar.gz
durak-4b2fdc91d42a438193d15840e10851c3847fbe80.tar.bz2
durak-4b2fdc91d42a438193d15840e10851c3847fbe80.zip
Global fixes v3.0
Fixed bug when entering cards incorrectly. Added recognition of disconnection from the server. Added welcome screen and update screen.
Diffstat (limited to 'client/verification_client_input.c')
-rw-r--r--client/verification_client_input.c58
1 files changed, 37 insertions, 21 deletions
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 <stdio.h>
#include <unistd.h>
@@ -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';