X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=src%2Flink%2FC%2Fc_link.h;h=12bedb21189faf5940dcc7e585f8403cf5a60d3f;hb=f23a69f735f155d06e6e8f47e85bc9266957803f;hp=44922a3f466f67f28eb00c934ba5e83a84a385ff;hpb=35ff18a5beda685e59ca898026570d67b7ead333;p=progcomp10.git diff --git a/src/link/C/c_link.h b/src/link/C/c_link.h old mode 100644 new mode 100755 index 44922a3..12bedb2 --- a/src/link/C/c_link.h +++ b/src/link/C/c_link.h @@ -1,102 +1,119 @@ -/* - * c_link.h - * c-link-lib - * - * Created by Daniel Axtens on 19/04/10. - * Licensed under an MIT-style license: see the LICENSE file for details. - * - */ - -#include - -#define MAXCOMMANDLEN 15 -#define MAXFOENAMELEN 50 -#define MAXITEMLEN 10 -#define MAXBOOLLEN 6 - -/********** Type definitions **********/ - -/* The type of item used in an attack or defence */ -typedef enum {rock, paper, scissors} ITEMTYPE; - -/* A result of a battle */ -typedef enum {win, lose, tie} RESULTTYPE; - - -/* An attack, consisting of the real attack and the attack promised */ -typedef struct { - ITEMTYPE realAttack; - ITEMTYPE promisedAttack; -} ATTACKTYPE; - - -/********** Utility Function definitions **********/ -/* These are implemented in c-link.c, and automagically linked in */ - -/* prints a debug message. Same arguments as printf(). - (you can't use printf because it is used to talk between - the agent and supervisor) - */ - -#define debugmsg(x...) fprintf(stderr, x) - -/* A (hopefully) unique identifier for this particular instance of your agent, - to help with debugging */ -int me; - - -/* Returns a random item */ - -ITEMTYPE RandomAttack(); - -/* A useful translation table - eg debugmsg( "I use %s.\n", ITEMNAMES[rock] ); */ - -extern char ITEMNAMES[3][MAXITEMLEN]; - -/* Another useful table - what's the result of the - first item vs the second item? */ -extern RESULTTYPE RESULTOF[3][3]; - -/********** 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 - ) : ITEMTYPE - the item you wish to use to defend; - - Called when your agent needs to defend itself. - - */ -ITEMTYPE Defend( char * foeName, ITEMTYPE foePromisedAttack ); - - -/* Attack( foeName : string - the name of your foe - ) : ATTACKTYPE - the real and promised attack you wish to use - - Called when your agent needs to attack another agent. - - */ -ATTACKTYPE Attack( char * foeName ); - - -/* Results( foeName : string - the name of your foe; - isInstigatedByYou : 0=you defended/1=you attacked; - yourItem : ITEMTYPE - the item you used; - theirItem : ITEMTYPE - the item they used; - promisedItem : ITEMTYPE - the item that was promised - ); - - Called after your agent battles another agent, to tell you how the battle goes. - - */ -void Results( char * foeName, int isInstigatedByYou, ITEMTYPE yourItem, - ITEMTYPE theirItem, ITEMTYPE promisedItem); - -/* Cleanup(); - - Called when your agent is no longer needed, either due to the round ending - or due to your agent being eliminated. - - */ -void Cleanup(); \ No newline at end of file +/* + * c_link.h + * c-link-lib + * + * Created by Daniel Axtens on 19/04/10. + * Licensed under an MIT-style license: see the LICENSE file for details. + * + */ + +#include + +#define MAXCOMMANDLEN 15 +#define MAXFOENAMELEN 50 +#define MAXITEMLEN 10 +#define MAXRESULTLEN 10 +#define MAXBOOLLEN 6 +#define UUIDLEN 37 // xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (8-4-4-4-12) + 1 null + +/********** Type definitions **********/ + +/* The type of item used in an attack or defence */ +typedef enum {rock, paper, scissors} ITEMTYPE; + +/* A result of a battle, in terms of who won */ +typedef enum {attacker, defender, tie} RESULTTYPE; + + +/* An attack, consisting of the real attack and the attack promised */ +typedef struct { + ITEMTYPE realAttack; + ITEMTYPE promisedAttack; +} ATTACKTYPE; + + +/********** Utility Function definitions **********/ +/* These are implemented in c-link.c, and automagically linked in */ + +/* prints a debug message. Same arguments as printf(). + (you can't use printf because it is used to talk between + the agent and supervisor) + */ + +#define debugmsg(x...) fprintf(stderr, x) + +/* A (hopefully) unique identifier for this particular instance of your agent, + to help with debugging */ +int me; + + +/* Returns a random item */ + +ITEMTYPE RandomAttack(); + +/* A useful translation table + eg debugmsg( "I use %s.\n", ITEMNAMES[rock] ); */ + +extern char ITEMNAMES[3][MAXITEMLEN]; + +/* Another useful table - who's the victor given an + attacker with first item vs defender with the second item? */ +extern RESULTTYPE RESULTOF[3][3]; + +/********** Bot Function definitions **********/ +/* You need to provide implementations for these to create a bot */ + +/* Initialise( yourName : string - name of this instance (you) + ) : void * - A data pointer to represent this instance + + Called to create a new instance of this agent + + */ +void *Initialise( char * yourName ); + +/* Defend( this : pointer - value returned from Initialise(); + foeName : string - the name of your foe; + foePromisedAttack : ITEMTYPE - the item your foe promised to use + ) : ITEMTYPE - the item you wish to use to defend; + + Called when your agent needs to defend itself. + + */ +ITEMTYPE Defend( void * this, char * foeName, ITEMTYPE foePromisedAttack ); + + +/* Attack( this: pointer - value returned from Initialise(); + foeName : string - the name of your foe + ) : ATTACKTYPE - the real and promised attack you wish to use + + Called when your agent needs to attack another agent. + + */ +ATTACKTYPE Attack( void * this, char * foeName ); + + +/* Results( this : pointer - value returned from Initialise(); + foeName : string - the name of your foe; + isInstigatedByYou : 0=you defended/1=you attacked; + winner : RESULTTYPE - who won + attItem : ITEMTYPE - the item used to attack; + defItem : ITEMTYPE - the item used to defend; + bluffItem : ITEMTYPE - the item that was promised + pointDelta : integer - how your points were affected. + ); + + Called after your agent battles another agent, to tell you how the battle goes. + + */ +void Results( void * this, char * foeName, int isInstigatedByYou, RESULTTYPE winner, + ITEMTYPE attItem, ITEMTYPE defItem, ITEMTYPE bluffItem, + int pointDelta ); + +/* Cleanup( this: pointer - value returned from Initialise() + ); + + Called when your agent is no longer needed, either due to the round ending + or due to your agent being eliminated. + + */ +void Cleanup( void * this );