X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=src%2Flink%2FC%2Fc_link.h;fp=src%2Flink%2FC%2Fc_link.h;h=84e9bce766078731c80c3b1e67636531b96c70d0;hb=15240ab3375de7b3260c47a204b1e7aae3cd516b;hp=0000000000000000000000000000000000000000;hpb=cd42b53c196672694396e695ae17fd94ba7d58b4;p=progcomp10.git diff --git a/src/link/C/c_link.h b/src/link/C/c_link.h new file mode 100644 index 0000000..84e9bce --- /dev/null +++ b/src/link/C/c_link.h @@ -0,0 +1,97 @@ +/* + * 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...) sprintf(stderr, x) + +/* Returns a random item */ + +ITEMTYPE RandomAttack(); + +/* A useful translation table + eg printf( "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