From d86c96d693961e466a4e0c4347a9531e70c1c72c Mon Sep 17 00:00:00 2001 From: anselme16 Date: Thu, 22 Jan 2015 17:47:43 +0100 Subject: [PATCH] worked on purple IA --- generator_default.c | 234 ++++++++++++++++++++++++++++++++++++++++++++ main.c | 18 +++- main.h | 9 +- orange/orange.a | Bin 0 -> 10144 bytes purple/Makefile | 4 +- purple/job.h | 31 ++++++ purple/king.c | 51 ++++++++++ purple/purple.a | Bin 0 -> 16432 bytes purple/purple.c | 84 ++++++++-------- purple/tools.c | 37 +++++++ purple/tools.h | 23 +++++ purple/worker.c | 42 ++++++++ team.h | 11 +++ 13 files changed, 493 insertions(+), 51 deletions(-) create mode 100644 generator_default.c create mode 100644 orange/orange.a create mode 100644 purple/job.h create mode 100644 purple/king.c create mode 100644 purple/purple.a create mode 100644 purple/tools.c create mode 100644 purple/tools.h create mode 100644 purple/worker.c diff --git a/generator_default.c b/generator_default.c new file mode 100644 index 0000000..2b52f2c --- /dev/null +++ b/generator_default.c @@ -0,0 +1,234 @@ +#include "main.h" + +#define MAX_POWER 10 +#define MAX_EPICENTER_BY_TYPE 7 +#define DIST_MIN_INTER_EPICENTRE 50 +#define MIN_RADIUS 25 +#define OFFSET_RADIUS 50 + +//map type ----> not used for now +enum{ + FLAT, VALLEY, +}; + +//biome type +enum{ + VILLAGE, PLAINS, FOREST,MOUNTAINS,NB_BIOMES +}; + +// probability for each biomes +// in following order {GRASS,TREE,BERRIES, ROCK, IRON_ORE} +char proba_table[NB_BIOMES][5] = {{97,2,1,0,0},{85,13,2,0,0},{40,40,20,0,0},{0,0,0,80,20}}; + +typedef struct{ + int x; + int y; + int type; + int power; + int radius; +} t_biome; + +// variables +int sp_x[NB_TEAMS], sp_y[NB_TEAMS]; +t_biome* l_biomes; +int size_biomes; +int nb_plains, nb_forests, nb_mountains; +int cpt_biome = 0; +int width, height; + +// functions +int distance_manhattan(int x1,int y1, int x2, int y2); +int absolute(int val); +void set_spawns(t_pixel** map, t_team* teams); +void create_biome(int x, int y, int type); +void create_biome_random(int type); +int check_nears_biomes(int x, int y); +int check_nears_spawn(int x, int y); +int in_radius(int x,int y,t_biome e); +int generate(int x, int y); +void init_generator(); + +void create_map(int w, int h){ + int i,j; + + //biome variable + + width = w; + height = h; + + init_generator(); + + //Epicenters generation + // random choice for numbers of biomes + nb_plains = (rand()%MAX_EPICENTER_BY_TYPE)+3; + nb_forests = (rand()%MAX_EPICENTER_BY_TYPE)+3; + nb_mountains = (rand()%MAX_EPICENTER_BY_TYPE)+3; + + size_biomes = nb_plains+ nb_forests + nb_mountains + NB_TEAMS; + + l_biomes = malloc(sizeof(t_biome)*size_biomes); + + // Spawn generations + set_spawns(map,teams); + + for(i=0;ix=x; + biome->y=y; + biome->type = type; + + switch(type){ + case VILLAGE: + biome->power = (rand()%MAX_POWER)+1; + biome->radius = (rand()%(25-10))+10; + break; + case PLAINS: + case FOREST: + case MOUNTAINS: + default: + biome->power = (rand()%MAX_POWER)+1; + biome->radius = (rand()%(OFFSET_RADIUS))+MIN_RADIUS; + break; + } + + l_biomes[cpt_biome++]=*biome; +} + +void create_biome_random(int type){ + int x,y; + do { + x=rand()%width; + y=rand()%height; + } while ((check_nears_biomes(x,y) != 0) || (check_nears_spawn(x,y) != 0)); //prevent biome superposition + + create_biome(x,y,type); +} + +int check_nears_biomes(int x, int y){ + int i, c=0; + for(i=0;i 0 ? val : -val; +} diff --git a/main.c b/main.c index 1d5e59b..7373b9c 100755 --- a/main.c +++ b/main.c @@ -9,8 +9,8 @@ #include // temp code -t_action purple_update(void* my_info, void* com_data, int success); -t_action orange_update(void* my_info, void* com_data, int success); +t_action purple_update(); +t_action orange_update(); t_dude* current_dude; @@ -55,7 +55,7 @@ void updateTeam(t_team team){ for(i=0; iinventory; } +t_com* getComData(){ + return current_dude->com_data; +} + +void* getMemory(){ + return current_dude->custom_data; +} + +int getSuccess(){ + return current_dude->success; +} + void spawnDudes(){ int i; t_dude new_dude; diff --git a/main.h b/main.h index 8a75730..310cb0e 100644 --- a/main.h +++ b/main.h @@ -21,11 +21,6 @@ #define NB_STARTING_FOOD 5 #define SPAWN_COOLDOWN 30 -// Teams -enum{ - PURPLE, ORANGE, NB_TEAMS -}; - typedef struct{ int type; void* data; @@ -45,7 +40,7 @@ typedef struct{ typedef struct{ int team; - t_action (*update)(void*, void*, int); + t_action (*update)(); int nb_dudes; t_dude* dudes; t_coord spawn; @@ -62,4 +57,4 @@ t_pixel** map; t_team* teams; SDL_Surface* img; -#endif \ No newline at end of file +#endif diff --git a/orange/orange.a b/orange/orange.a new file mode 100644 index 0000000000000000000000000000000000000000..8dbb4fc97d3848430495577908584c52e33e4554 GIT binary patch literal 10144 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 gjNfJaG2?rTcFbS0t7U9w9Aw +#include "job.h" + +typedef struct{ + char job; + t_coord pos; + char identity; + int last_dir; + int last_action; + + int population; + int nb_explorers; + int nb_workers; + unsigned char town_done; + unsigned char town[8]; + unsigned char country_done; + unsigned char country[8]; +} purple_data_king; + +t_action p_king_ia(){ + t_action action; + purple_data_king* data = getMemory(); + action.type = WAIT; + if(data->pos.x != -1 || data->pos.y != -2) + data->job = P_JOBLESS; + else{ + t_com* com_data = getComData(); + p_request* request = ((void*)com_data)+sizeof(int); + p_request answer; + if(com_data != NULL){ + action.dir = com_data->flag; + action.type = COMMUNICATE; + if(request->identity < 1) + answer.identity = data->population++; // temp way to handle demography + if(request->job == P_WORKER) + data->nb_workers--; + if(request->job == P_EXPLORER) + data->nb_explorers--; + if(data->nb_explorers*2 > data->nb_workers){ + answer.job = P_WORKER; + + }else{ + answer.job = P_EXPLORER; + + } + + // send message + } + } + return action; +} diff --git a/purple/purple.a b/purple/purple.a new file mode 100644 index 0000000000000000000000000000000000000000..4c959274defdce161575fa5c2a37fb82381aad0d GIT binary patch literal 16432 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
+|sbY5p%lww#VnhdI#b?z|QXEoW|~* z@t#ew#K0War9xZX9+!>JhH67C(V%Fa6;4xAz0)jOnj9xzZP}t*67Z}B+P3!fb%^H1 z+D#i&&DfZ(A10b%qfTt?iFFFuM{Zsi$j#fLOkkgl%DfqE{H2^YIGm5BFLCF47jqDt1VY70tUMPWyLOA5|w@76x3BputbB@y4@ z)y5LB-p=@_1U=ooah(8ph$=MR_Bgtws<$s0uR?3gM$5NvbIruN+O{TQ+xgkO#4rW% z&@A|bx`F6mKSq&lH%~YtM$IBPNd+Tx1 z(=Nr(>2~4bR*wOin2e>v10+Le204i0wmb9m+PfPO?uASTZBO$W zy>eUp(%Ut#=hf1_HwW^%)~+>6jyP?ZdVih)Wyv1Ri!9l*US2Mxa{^1CQ9QvCY{7i6 z&;lGA44l&@puAYjKx~`lXnbI&-Y9R@=G)WBwss*zaG3^H!{D*G5XFiJjbgJ zw0D9ziA^}rrhyJEu%kbUq zDSCDh+r0aWd>2i02g_`t8@3X`JV(Tsu z2>uP?L?N0nlxX(=5%0_cM69ewi0ITcn9R(}-TB(UTqxZE40@Or1`sABB8s5fF_nly z&rtF?3KuF|uCPwwT7^vtH!Ea+(tfYPPbhpu;gG`T75=NjVTErh98vg=LL2QuyL9h} z+_ofMrf{;tX$og3tWr2%;ZlV)3a?kVP9e9&Xg8*?Q{i@nyA3$$zZ) zR}^B12m@n=wD~tj;7TNDa*Yn72l}Ghn`4a4l=XS~69do%?e(ijH2ypSe^3`hk zbLW`cUU_=BBoJ7PUbVGg2n4?}BAV!V6syN2AsCvtgB za_x!mP8G=<41{;(=!hu#AX8k$^bg@DOMb8z`!ZA9a`iwv&UT1*m%`G!6t;KIqhR!& zhcCZt;`eTU1o9gz!Ti?5HJ8_yxw{)*c6T>I1*3L1!eBkS8?*~o{R?EL>FYQ?VNcD1a zT3L11Ah#xbZ~A_x88&q%rIQP+x3#ApXt;#x41h4(&={{+uyPf(4M+lO6Y=Z za$w@UbK!Fixm>EqZ4SL(uwg}8i&MM4+4ZNjXWZP-+Om4I=Pq|Y-pww6bk|+?ox31z zGs%sb{EkaQQ|*RTj%aLcYFy{2y^akHP00J*x!u3j@1{@99|PaioKJ0TlP)!N%ao39 zaZbNZs%6@nA=YniPT!u_-vPaTJ9B!o){XE-?z4MeI`=yx#8{vG1bjrcEtZ>DvAf@+ z0C2kEu>_T&l1fj|_V^kz{>9?)JMT3?d#`u|nyf}VEP-<26w1f-GRuc0i~L?PzZ(2> z8j$$-T$<1R7UD&jKm~1M19)$~s|)k(!u(iYVjMr62Bf$G3QY95pmi}wy!LK{J*H

&@_IP;Asjz?0;Uk#7C*b}twKFCPRSrr&T zJg-m8@-d9{**BveQOH>jdYrl*rJ(f~04W}Xy$49Bp!4&vL(|kS93gd5%sjR9LR? zDk5GkE{v(ik&47EN`ANEKdt!t6hEZ!IVG3vTj2I3?Xf?JQ6PP^8ikt`-mQ?=qVl(# z;IDb^Z;k7_Et%(D=!#z4cN^hEhQL1LE`qw}lpbEK?>`)MhEQf+YRT5v>5=oPup|TN zk#~|LpTVUB_N3=7Lwd-@6#{u#=?O;kE{@0^zm>t^(n4(y z+W?pl-FehD^f(h=N5?X7pfKPrz$ys^+z!B9fD}2?|9w|?kYM;`QD+vsg+%$g06zhT zy8zn=w*Q|AhVO%jX(x~>gI~cmJf;XA9L2u|<)@>#5rpv5Q6y!H0NpFIgwcJK=F}en zgIg(@CSwNqW|~*;a^o&yIV!&eCS;p)xG@u607itDgEYd&m@Xm@fgP$Z_bS<=%LC)w#F|(Z>Op`95e0H#fbSdRk!lvkU zkg~)5B0z7+nD7G36n=%a%GvG=a(+7aOQ?$$QZbPVYw)q%MeJweGHQ6GU?DiZp+)Qy z@GEJKO?Bcv&@DIeDZ&ik$23jz8bK!Lso z;Pd*#{?R^h!0QMHN8bYoc|Gi~_ON*&K;8pzU0iiBc_nd*spd=Q`7=LxHJ}y!Oaz zfjQkb=u`FFA+$1@KO9ZOKc0%?#8n>m=FU}*&LIr1y~b!XxwEEx8@@f$>hrbBFft$*DL_!f%Tw1o!LR zR_N})@o0B)mp=Jdr_izOtnjF-0owIe_Z8&XcK+5uuKx1A0$S9qdw*N5P35U|?o#q4 zxa9IqK<;!tpA~aJtGQ59j4L59^-dV;n$3o!yR&H9??h>L$TR zl!OXew*kC2-)cCLx?Na5ov-{N>BPXLu*U_B4%%J}0p4Tta{X5pzUhSy|$XvU?{mP92=G6jw50Fqn zw+qozJ^5c4tY8`B=xS+??asFI3=dHOB|rN*XnUI1=#~E=`r5j?`0mn|=6KP8?J`+2 zK=ML;YV-eel0R++wX$z}9WQ{%lYO2CFG3QY+tP=5H$L(V#z&{jQOLCz`Q-}h6s}b$ z-#h3xE1s(m#_v@~kAnO+6h5x-8HGPq_@4@g6~3wP9fda9iFWk4?B$A|tMJ1LZ%|0b zg7I%r*sd_4Q2M^m(??*uuPJ;~;o}OADtuGnI|@S>+)T$+JaL*r-WVpoRN?gsn-qRb z;U^S+O5p(_e)2pO=^s_{A1L|Lir43ok6Ye}}8?(_KV1@WgJ`jH80@l>>8odQKcRfV*=kYM7O{do8 zOJ`m!#iF1C3=i>qeBc(n?H>Z+H+=U30{r%wl^?>>f=A1l*M63wrP5N+^=L`kHbxOV zT7I z+=!?O=U}`-2>L6T?@me^@G}MbVqA|)y?X78n)kVKu2!+p1Al7AHa>c_XO&Bn_nq|Z z)lvUsD4nDC#9!%G%Y6Q`qPi#BpYxX}lx~Pz%U^;=k#i=b1L!XJ-_p0A!ywi(B6Feu{h^9lll7b)A`0g>og!m6!w})sGxP6oW1t$ zhCP;>_9)l(wu5FGwhzMq?7irc@<|8BdmtdKLy{SJg4S_8PuiWo zFaaSR^Uy&j8-&1HkA0{|1!SxTmXW!7kk?}Xq!@;QLnKtt`FiuDY7ZL)LVkY=@ngPh zcjoD}w+Di`km;c9X_g=l>!h5n2 z_bw44-GCq0{kTe*o3qIC)2-(y@_GT+eyRUtj`VU(h(`o8*P`q@;zWf!x8quIDiQs& zK*?(rZdTZ-utyxHRvfKsv Pwd@j=E(#p)yy^b{leorN literal 0 HcmV?d00001 diff --git a/purple/purple.c b/purple/purple.c index d994f8a..7edbcba 100644 --- a/purple/purple.c +++ b/purple/purple.c @@ -1,50 +1,23 @@ +#include #include #include "../team.h" -#include +#include "job.h" +#include "tools.h" -// Hello World +#define P_READY 0 -typedef struct{ - t_coord pos; - int new_born; - int try; - int brings_food; - int last_dir; - int last_action; -} t_data; +t_action purple_ia(); -t_coord newPos(t_coord coord, int dir){ - t_coord new_coord = coord; - switch(dir){ - case NORTH : - new_coord.y++; - break; - case SOUTH : - new_coord.y--; - break; - case WEST : - new_coord.x++; - break; - case EAST : - new_coord.x--; - break; - } - return new_coord; -} - -int abs(int val){ - return val > 0 ? val : -val; -} - -int dist(t_coord coord, int x, int y){ - return abs(coord.x-x) + abs(coord.y-y); -} - -t_action purple_update(void* my_info, t_com* com_data, int success){ - t_data* data = (t_data*)my_info; +t_action purple_update(){ t_action action; int i, type; + if(P_READY) + return purple_ia(); + + int success = getSuccess(); + purple_data* data = (purple_data*)getMemory(); + if(!data->new_born){ success = 0; data->new_born = 1; @@ -117,4 +90,37 @@ t_action purple_update(void* my_info, t_com* com_data, int success){ data->last_dir = action.dir; data->last_action = action.type; return action; +} + +t_action purple_ia(){ + t_action action; + + + int critic = check_critic_situation(); + if(critic != -1){ + action.dir = critic; + action.type = ATTACK; + return action; + } + + char* job = (char*)getMemory(); + switch(*job){ + case P_KING : + action = p_king_ia(); + break; + case P_JOBLESS : + action = p_jobless_ia(); + break; + case P_WORKER : + action = p_worker_ia(); + break; + case P_EXPLORER : + action = p_explorer_ia(); + break; + default : + *job = P_JOBLESS; + action.type = WAIT; + break; + } + return action; } \ No newline at end of file diff --git a/purple/tools.c b/purple/tools.c new file mode 100644 index 0000000..27143c0 --- /dev/null +++ b/purple/tools.c @@ -0,0 +1,37 @@ +#include "tools.h" + +t_coord newPos(t_coord coord, int dir){ + t_coord new_coord = coord; + switch(dir){ + case NORTH : + new_coord.y++; + break; + case SOUTH : + new_coord.y--; + break; + case WEST : + new_coord.x++; + break; + case EAST : + new_coord.x--; + break; + } + return new_coord; +} + +int abs(int val){ + return val > 0 ? val : -val; +} + +int dist(t_coord coord, int x, int y){ + return abs(coord.x-x) + abs(coord.y-y); +} + +int check_critic_situation(){ + int i; + for(i=0; i<4; i++){ + if(getNear(i) == DUDE && getInfo(i) == ORANGE) + return i; + } + return -1; +} \ No newline at end of file diff --git a/purple/tools.h b/purple/tools.h new file mode 100644 index 0000000..5255ddc --- /dev/null +++ b/purple/tools.h @@ -0,0 +1,23 @@ +#ifndef P_TOOLS_H +#define P_TOOLS_H + +#include "../team.h" + +typedef struct{ + t_coord pos; + int new_born; + int try; + int brings_food; + int last_dir; + int last_action; +} purple_data; + +t_coord newPos(t_coord coord, int dir); + +int abs(int val); + +int dist(t_coord coord, int x, int y); + +int check_critic_situation(); + +#endif // P_TOOLS_H \ No newline at end of file diff --git a/purple/worker.c b/purple/worker.c new file mode 100644 index 0000000..74ebfad --- /dev/null +++ b/purple/worker.c @@ -0,0 +1,42 @@ +#include "job.h" + +typedef struct{ + char job; + t_coord pos; + char identity; + int last_dir; + int last_action; + + int work_type; // worker + int amount_needed; // worker + t_coord storage; // worker + t_coord target_area; // worker and explorer +} purple_data_worker; + +t_action p_jobless_ia(){ + t_action action; + // goto (-1, -1) + // check NORTH + // empty -> be KING and go NORTH + // KING -> ask for identity + return action; +} + +t_action p_explorer_ia(){ + t_action action; + // goto nearest spot of the area + // start the loop + // at end of loop, go back to KING to get new AREA + return action; +} + +t_action p_worker_ia(){ + t_action action; + // loop : + // goto area + // search for requested resource + // bring it back to storage and amount-- + // while(amount > 0) + // go see the master to get new goal + return action; +} diff --git a/team.h b/team.h index 8c4752a..d6019e0 100644 --- a/team.h +++ b/team.h @@ -4,6 +4,11 @@ #define WRITE 0 #define READ 4 +// Teams +enum{ + PURPLE, ORANGE, NB_TEAMS +}; + // coordinates structure typedef struct{ int x; @@ -61,4 +66,10 @@ int getNear(int dir); int getInfo(int dir); +t_com* getComData(); + +void* getMemory(); + +int getSuccess(); + #endif \ No newline at end of file