X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=src%2Flink%2FC%2Fc_link.c;h=fdb1ffcd6519af738e4992789a6d8a25dd83f782;hb=13eb5cad5dedf0cc7a01f7f8d50812b14288e71d;hp=680450e0255912ba77d5a2fd44a00927f1fb872b;hpb=15240ab3375de7b3260c47a204b1e7aae3cd516b;p=progcomp10.git diff --git a/src/link/C/c_link.c b/src/link/C/c_link.c index 680450e..fdb1ffc 100644 --- a/src/link/C/c_link.c +++ b/src/link/C/c_link.c @@ -24,9 +24,9 @@ char ITEMNAMES[3][MAXITEMLEN] = {"Rock", "Paper", "Scissors"}; paper-rock paper-paper paper-scissors scissors-rock scissors-paper scissors-scissors */ -RESULTTYPE RESULTOF[3][3] = { { tie, lose, win }, - { win, tie, lose }, - { lose, win, tie } }; +RESULTTYPE RESULTOF[3][3] = { { tie, defender, attacker }, + { attacker, tie, defender }, + { defender, attacker, tie } }; ITEMTYPE RandomAttack() { @@ -44,18 +44,34 @@ ITEMTYPE stringToItem( char * str ) { } +RESULTTYPE stringToResult( char * str ) { + if (strcasecmp( str, "Attacker" ) == 0) return attacker; + if (strcasecmp( str, "Defender" ) == 0) return defender; + if (strcasecmp( str, "Tie" ) == 0) return tie; + /* If we reach this point, we've got real problems. */ + fprintf( stderr, "Attempt to convert invalid string \"%s\" into an ITEMTYPE! Aborting.\n", str ); + exit(EXIT_FAILURE); + return -1; +} + int main( int argc, char * argv[] ) { srand( time( NULL ) ); char command[MAXCOMMANDLEN]; char foeName[MAXFOENAMELEN]; - char yourItem[MAXITEMLEN], theirItem[MAXITEMLEN], promisedItem[MAXITEMLEN]; - char didYouInstigate[MAXBOOLLEN], childSpawned[MAXBOOLLEN]; + char attItem[MAXITEMLEN], defItem[MAXITEMLEN], bluffItem[MAXITEMLEN]; + char didYouInstigate[MAXBOOLLEN]; + char winner[MAXRESULTLEN]; int pointChange; ATTACKTYPE attack; ITEMTYPE defence; + /* generate a random id for this bot. Hopefully it's unique + I can't use the UUID, because python doesn't pass it to me! */ + me = rand(); + + scanf( "%s", command ); while (strcasecmp("BYE",command) != 0) { @@ -66,17 +82,21 @@ int main( int argc, char * argv[] ) { printf("ATTACKING %s %s\n", ITEMNAMES[attack.realAttack], ITEMNAMES[attack.promisedAttack]); } else if (strcasecmp("DEFEND", command) == 0) { - scanf( "%s %s", foeName, promisedItem ); - defence = Defend(foeName, stringToItem(promisedItem)); + scanf( "%s %s", foeName, bluffItem ); + defence = Defend(foeName, stringToItem(bluffItem)); printf("DEFENDING %s\n", ITEMNAMES[defence]); } else if (strcasecmp("RESULTS", command) == 0) { - scanf( "%s %s %s %s %s %d %s", foeName, didYouInstigate, yourItem, theirItem, promisedItem, &pointChange, childSpawned ); - Results(foeName, (strcasecmp("False",didYouInstigate)==0), - stringToItem(yourItem), stringToItem(theirItem), stringToItem(promisedItem)); + /* (foeName, isInstigatedByYou, winner, attItem, defItem, bluffItem, pointDelta) */ + scanf( "%s %s %s %s %s %s %d", foeName, didYouInstigate, winner, attItem, defItem, bluffItem, &pointChange ); + Results(foeName, (strcasecmp("True",didYouInstigate)==0), stringToResult(winner), + stringToItem(attItem), stringToItem(defItem), stringToItem(bluffItem), pointChange); printf("OK\n"); } + fflush(stdout); + fflush(stderr); + // read the next command! scanf( "%s", command ); }