Skip to content
Snippets Groups Projects
Commit 36671877 authored by Daniel Axtens's avatar Daniel Axtens
Browse files

Implemented C I/O

parent fbee9b55
No related merge requests found
......@@ -9,13 +9,71 @@
#include "c-link.h"
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
/* If you just want to write a bot, you don't need to read this file.
This merely sets up the I/O for you, so all you have to do is define the bot
functions defined in <c-link.h>
The only reason you would care about this info is if you want to use pointChange
and/or childSpawned parameters from the RESULTS call, which are otherwise discarded.
*/
char ITEMNAMES[3][MAXITEMLEN] = {"Rock", "Paper", "Scissors"};
ITEMTYPE RandomAttack() {
return (ITEMTYPE)rand()%3;
}
ITEMTYPE stringToItem( char * str ) {
if (strcasecmp( str, "Rock" ) == 0) return rock;
if (strcasecmp( str, "Paper" ) == 0) return paper;
if (strcasecmp( str, "Scissors" ) == 0) return scissors;
/* 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];
int pointChange;
ATTACKTYPE attack;
ITEMTYPE defence;
scanf( "%s", command );
while (strcasecmp("BYE",command) != 0) {
if (strcasecmp("ATTACK", command) == 0) {
scanf( "%s", foeName );
attack = Attack( foeName );
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));
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));
printf("OK\n");
}
// read the next command!
scanf( "%s", command );
}
return 0;
}
\ No newline at end of file
......@@ -7,6 +7,11 @@
*
*/
#define MAXCOMMANDLEN 15
#define MAXFOENAMELEN 50
#define MAXITEMLEN 10
#define MAXBOOLLEN 6
/********** Type definitions **********/
/* The type of item used in an attack or defence */
......@@ -19,13 +24,21 @@ typedef struct {
ITEMTYPE promisedAttack;
} ATTACKTYPE;
/********** Utility Function definitions **********/
/* These are implemented in c-link.c, and automagically linked in */
/* Returns a random item */
ITEMTYPE RandomAttack();
/* A useful translation table
eg printf( "I use %s.\n", ITEMNAMES[rock] ); */
extern char ITEMNAMES[3][MAXITEMLEN];
/********** Bot Function definitions **********/
/* You need to provide implementations for these to create a bot */
/* Defend( foeName : string - the name of your foe;
foePromisedAttack : ITEMTYPE - the item your foe promised to use
......
......@@ -48,6 +48,8 @@ Syntax for collecting results:
<OK
Example:
>RESULTS agent00001 False Rock Paper Scissors -2 False
<You fucking traitor.
<OK
In the last example, the correct response would actually have been 'OK', but agent00002 can get a bit emotional sometimes. Try to avoid that in your agents.
Syntax for cleaning up after your bot - either the round has ended, or you've been killed off
>BYE
{program exits without responding}
\ No newline at end of file
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment