From 2f9e183eb74586fef1f4f0d8a0b75b4bd1775551 Mon Sep 17 00:00:00 2001 From: anselme16 Date: Fri, 23 Jan 2015 09:00:34 +0100 Subject: [PATCH] base for developping teams --- .kdev4/PixelWars.kdev4 | 10 + orange/Makefile | 8 +- orange/orange.a | Bin 10144 -> 0 bytes orange/orange.c | 409 ++++++++++------------------------------- purple/Makefile | 4 +- purple/job.h | 31 ---- purple/king.c | 51 ----- purple/purple.a | Bin 16432 -> 0 bytes purple/purple.c | 82 ++++----- purple/tools.c | 37 ---- purple/tools.h | 23 --- purple/worker.c | 42 ----- 12 files changed, 157 insertions(+), 540 deletions(-) create mode 100644 .kdev4/PixelWars.kdev4 delete mode 100644 orange/orange.a delete mode 100644 purple/job.h delete mode 100644 purple/king.c delete mode 100644 purple/purple.a delete mode 100644 purple/tools.c delete mode 100644 purple/tools.h delete mode 100644 purple/worker.c diff --git a/.kdev4/PixelWars.kdev4 b/.kdev4/PixelWars.kdev4 new file mode 100644 index 0000000..41bb875 --- /dev/null +++ b/.kdev4/PixelWars.kdev4 @@ -0,0 +1,10 @@ +[Buildset] +BuildItems=@Variant(\x00\x00\x00\t\x00\x00\x00\x00\x01\x00\x00\x00\x0b\x00\x00\x00\x00\x01\x00\x00\x00\x12\x00P\x00i\x00x\x00e\x00l\x00W\x00a\x00r\x00s) + +[Defines And Includes][Compiler] +Name=GCC +Path=gcc +Type=GCC + +[Project] +VersionControlSupport=kdevgit diff --git a/orange/Makefile b/orange/Makefile index efc788f..84a8726 100644 --- a/orange/Makefile +++ b/orange/Makefile @@ -20,9 +20,11 @@ endif all : $(TARGET).$(LIB_PREFIX) -$(TARGET).$(LIB_PREFIX) : *.c - $(CC) *.c -c $(FLAGS) - $(AR) $(TARGET).$(LIB_PREFIX) *.o +$(TARGET).$(LIB_PREFIX) : orange.o + $(AR) $(TARGET).$(LIB_PREFIX) orange.o + +%.o: %.c + $(CC) -o $@ -c $< $(FLAGS) clean : $(RM) *.o *.a *.stackdump *~ \ No newline at end of file diff --git a/orange/orange.a b/orange/orange.a deleted file mode 100644 index 8dbb4fc97d3848430495577908584c52e33e4554..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10144 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 gjNfJaG2?rTcFbS0t7U9w9Aw #include - +#include #include "../team.h" -// Development in progress - -//Structure definition -enum{ - O_JOBLESS, O_MASTER, O_GATHERER, O_WOODCUTTER, O_MINER, O_NB_JOBS -}; - -enum{ - O_NO_AIM, O_AIM_MASTER, O_AIM_SPAWN, O_AIM_SPOT -}; - -#define ORANGE_SPAWN_X 0 -#define ORANGE_SPAWN_Y 0 - -#define ORANGE_MASTER_X 3 -#define ORANGE_MASTER_Y 3 +// Orange Hello World typedef struct{ - char type; //the type of ressource that was found - t_coord pos; // pos where ressource was found -} t_orange_ressource_spot; + t_coord pos; + int new_born; + int try; + int brings_food; + int last_dir; + int last_action; +} orange_data; -typedef struct{ - char name; // name of the dude - t_coord pos; // position relative to the spawn - char age; - char job; - char aim; - char talking; - char listening; - t_orange_ressource_spot res_spot; - char last_action; - char last_dir; -} t_orange_info; +t_coord o_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; +} -//tools functions -int orangeNewDir(t_orange_info*); -t_coord orangeNewPos(t_coord, int); -int orangeDistance(t_coord, int, int); -//action function -void orangeApplyAction(t_orange_info*,t_com*); -void orangeMoveEffect(t_orange_info*); -void orangePickEffect(t_orange_info*); -void orangePutEffect(t_orange_info*); -void orangeCommunicateEffect(t_orange_info*); -void orangeWaitEffect(t_orange_info*, t_com*); -//jobs function -void orangeHatched(t_orange_info*); +int o_abs(int val){ + return val > 0 ? val : -val; +} -void orangeJobless(t_action*, t_orange_info*, t_com*, int); -void orangeMaster(t_action*, t_orange_info*, t_com*, int); -void orangeGatherer(t_action*, t_orange_info*, t_com*, int); +int o_dist(t_coord coord, int x, int y){ + return o_abs(coord.x-x) + o_abs(coord.y-y); +} -t_action orange_update(void* my_info, t_com* com_data, int success){ - t_orange_info* data = (t_orange_info*)my_info; +t_action orange_update(){ t_action action; + int i, type; - if(data->age == 0){ - orangeHatched(data); + int success = getSuccess(); + orange_data* data = (orange_data*)getMemory(); + + if(!data->new_born){ success = 0; + data->new_born = 1; } - if (!success){ - action.type = data->last_action; - action.dir = data->last_dir; + if(data->last_action == MOVE){ + if(success) + data->pos = o_newPos(data->pos, data->last_dir); + } + + if(data->try && success) + data->brings_food = 1; + data->try = 0; + + if(data->brings_food){ + int distance = o_dist(data->pos, 0, 0); + if(distance == 1){ + action.type = WAIT; + + action.dir = 0; + for(i=0; i<4; i++){ + type = getNear(i); + if(type == SPAWN){ + action.dir = i; + action.type = PUT; + data->brings_food = 0; + break; + } + } + }else{ + action.type = MOVE; + do{ + action.dir = rand()%4; + }while(o_dist(o_newPos(data->pos, action.dir), 0, 0) > distance && distance != 0); + + } + data->last_dir = action.dir; + data->last_action = action.type; return action; } - orangeApplyAction(data,com_data); - - switch(data->job){ - case O_JOBLESS: - orangeJobless(&action, data, com_data, success); - break; - case O_MASTER: - orangeMaster(&action, data, com_data, success); - break; - case O_GATHERER: - orangeGatherer(&action,data, com_data, success); - break; - case O_WOODCUTTER: - case O_MINER: - break; + for(i=0; i<4; i++){ + type = getNear(i); + if(type == BERRIES || type == TREE || type == IRON_ORE || type == ROCK){ + action.type = WORK; + action.dir = i; + data->last_dir = action.dir; + data->last_action = action.type; + return action; + }else if(type == FOOD){ + action.type = PICK; + action.dir = i; + data->try = 1; + data->last_dir = action.dir; + data->last_action = action.type; + return action; + } } - data->last_action = action.type; + + action.type = MOVE; + do{ + action.dir = (data->last_dir + rand()%3)%4; + type = getNear(action.dir); + }while(type == WALL + && type == ROCK + && type == BEDROCK + && type == IRON_ORE + && type == TREE + && type == LIBRARY); data->last_dir = action.dir; + data->last_action = action.type; return action; } - -void orangeHatched(t_orange_info* data){ - data->age++; - data->job = O_JOBLESS; - data->aim = O_AIM_MASTER; - data->pos.x=0; - data->pos.y=0; -} - -void orangeApplyAction(t_orange_info* data,t_com* com_data){ - switch(data->last_action){ - case MOVE: - data->pos=orangeNewPos(data->pos, data->last_dir); - orangeMoveEffect(data); - break; - case PICK: - orangePickEffect(data); - break; - case PUT: - orangePutEffect(data); - break; - case COMMUNICATE: - orangeCommunicateEffect(data); - break; - case WAIT: - orangeWaitEffect(data,com_data); - break; - } -} - -void orangeMoveEffect(t_orange_info* data){ - int dist_to_master; - switch(data->job){ - case O_JOBLESS: - dist_to_master = orangeDistance(data->pos,ORANGE_MASTER_X,ORANGE_MASTER_Y); - if(dist_to_master == 0){ - data->job=O_MASTER; - data->listening = 1; - data->talking = 0; - }else if(dist_to_master == 1) - data->talking = 1; - break; - case O_GATHERER: - if (getInventory() == -1){ - if (orangeDistance(data->pos,data->res_spot.pos.x, data->res_spot.pos.y) == 0){ - data->aim = O_NO_AIM; - } - }else{ - if(orangeDistance(data->pos, ORANGE_SPAWN_X, ORANGE_SPAWN_Y) == 1){ - data->aim=O_AIM_SPOT; - } - } - break; - case O_WOODCUTTER: - case O_MINER: - break; - } - -} - -void orangePickEffect(t_orange_info* data){ - switch(data->job){ - case O_GATHERER: - data->aim=O_AIM_SPAWN; - data->res_spot.type = getInventory(); - data->res_spot.pos = data->pos; - break; - } -} - -void orangePutEffect(t_orange_info* data){ - switch(data->job){ - case O_GATHERER: - data->aim=O_AIM_SPOT; - break; - } -} - -void orangeCommunicateEffect(t_orange_info* data){ - data->listening = 1; - data->talking = 0; -} - -void orangeWaitEffect(t_orange_info* data, t_com* com_data){ - switch(data->job){ - case O_JOBLESS: - if ((com_data != NULL)){ - if (com_data->data[0] == 1){ - switch(com_data->data[1]){ - case O_GATHERER: - printf("Become a gatherer"); - data->job = O_GATHERER; - data->listening = 0; - data->aim = O_NO_AIM; - break; - } - } - } - break; - case O_MASTER: - if (com_data != NULL){ - printf("got a message \n"); - data->talking = 1; - }else{ - data->talking = 0; - } - break; - } -} - -// job functions -void orangeJobless(t_action* action, t_orange_info* data, t_com* com_data, int success){ - int dir_to_master; - - dir_to_master = orangeNewDir(data); - - if(data->listening){ - action->type=WAIT; - action->dir=0; - return; - } - if (data->talking){ - if (getNear(dir_to_master) == DUDE){ - action->type = COMMUNICATE; - action->dir = dir_to_master; - action->com_data.data[0]=1; - return; - } - } - action->type = MOVE; - action->dir = dir_to_master; - return; -} - -void orangeMaster(t_action* action, t_orange_info* data, t_com* com_data, int success){ - if (data->talking){ - printf("talking\n"); - action->type = COMMUNICATE; - action->dir = com_data->flag; - action->com_data.data[0] = 1; - action->com_data.data[1] = O_GATHERER; - }else{ - action->type = WAIT; - action->dir=0; - } -} - -void orangeGatherer(t_action* action, t_orange_info* data, t_com* com_data, int success){ - int i,t; - //action choice - for(i=0;i<4;i++){ - t = getNear(i); - switch(t){ - case BERRIES: - action->type = WORK; - action->dir = i; - return; - case FOOD: - if(getInventory() == -1){ - action->type = PICK; - action->dir = i; - return; - } - break; - case SPAWN: - if(getInventory() == FOOD){ - action->type = PUT; - action->dir = i; - return; - } - break; - default: - break; - } - } - action->type= MOVE; - action->dir = orangeNewDir(data); - return; -} - -//orange tools -int orangeNewDir(t_orange_info* data){ - int dir; - int current_dist,new_dist; - int x,y; - switch(data->aim){ - case O_NO_AIM: - return (data->last_dir + rand()%3 )%4; - case O_AIM_MASTER: - x = ORANGE_MASTER_X; - y = ORANGE_MASTER_Y; - break; - case O_AIM_SPAWN: - x = ORANGE_SPAWN_X; - y = ORANGE_SPAWN_Y; - break; - case O_AIM_SPOT: - x = data->res_spot.pos.x; - y = data->res_spot.pos.y; - break; - } - current_dist = orangeDistance(data->pos,x,y); - if (current_dist == 0) return 0; - do{ - dir= rand()%4; - new_dist = orangeDistance(orangeNewPos(data->pos,dir),x,y); - }while(current_dist <= new_dist); - - if (getNear(dir) == DUDE || getNear(dir) == TREE || getNear(dir) == ROCK || getNear(dir) == IRON_ORE){ - int offset = (rand()%3)-1; - dir+=offset; - dir%=4; - } - return dir; -} -t_coord orangeNewPos(t_coord pos, int dir){ - t_coord new_pos = pos; - switch(dir){ - case NORTH: - new_pos.y++; - break; - case SOUTH: - new_pos.y--; - break; - case EAST: - new_pos.x++; - break; - case WEST: - new_pos.x--; - break; - } - return new_pos; -} -int orangeDistance(t_coord c, int x, int y){ - return abs(x-c.x) + abs(y-c.y); -} \ No newline at end of file diff --git a/purple/Makefile b/purple/Makefile index 93c1708..41d7dd0 100644 --- a/purple/Makefile +++ b/purple/Makefile @@ -20,8 +20,8 @@ endif all : $(TARGET).$(LIB_PREFIX) -$(TARGET).$(LIB_PREFIX) : purple.o tools.o king.o worker.o - $(AR) $(TARGET).$(LIB_PREFIX) purple.o tools.o king.o worker.o +$(TARGET).$(LIB_PREFIX) : purple.o + $(AR) $(TARGET).$(LIB_PREFIX) purple.o %.o: %.c $(CC) -o $@ -c $< $(FLAGS) diff --git a/purple/job.h b/purple/job.h deleted file mode 100644 index 6c5acf7..0000000 --- a/purple/job.h +++ /dev/null @@ -1,31 +0,0 @@ -#ifndef P_JOB_H -#define P_JOB_H - -#include "../team.h" - -enum{ // jobs - P_JOBLESS, - P_KING, - P_WORKER, - P_EXPLORER -}; - -typedef struct{ - char identity; - char job; - char request_type; - char area_x; - char area_y; - char work_type; - char amount; -} p_request; - -t_action p_jobless_ia(); - -t_action p_king_ia(); - -t_action p_explorer_ia(); - -t_action p_worker_ia(); - -#endif // P_JOB_H diff --git a/purple/king.c b/purple/king.c deleted file mode 100644 index 13191ee..0000000 --- a/purple/king.c +++ /dev/null @@ -1,51 +0,0 @@ -#include -#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 deleted file mode 100644 index 4c959274defdce161575fa5c2a37fb82381aad0d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 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 diff --git a/purple/purple.c b/purple/purple.c index 7edbcba..fbfb542 100644 --- a/purple/purple.c +++ b/purple/purple.c @@ -1,20 +1,49 @@ #include #include #include "../team.h" -#include "job.h" -#include "tools.h" -#define P_READY 0 +// Purple Hello World -t_action purple_ia(); +typedef struct{ + t_coord pos; + int new_born; + int try; + int brings_food; + int last_dir; + int last_action; +} purple_data; + +t_coord p_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 p_abs(int val){ + return val > 0 ? val : -val; +} + +int p_dist(t_coord coord, int x, int y){ + return p_abs(coord.x-x) + p_abs(coord.y-y); +} 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(); @@ -25,7 +54,7 @@ t_action purple_update(){ if(data->last_action == MOVE){ if(success) - data->pos = newPos(data->pos, data->last_dir); + data->pos = p_newPos(data->pos, data->last_dir); } if(data->try && success) @@ -33,7 +62,7 @@ t_action purple_update(){ data->try = 0; if(data->brings_food){ - int distance = dist(data->pos, 0, 0); + int distance = p_dist(data->pos, 0, 0); if(distance == 1){ action.type = WAIT; @@ -51,7 +80,7 @@ t_action purple_update(){ action.type = MOVE; do{ action.dir = rand()%4; - }while(dist(newPos(data->pos, action.dir), 0, 0) > distance && distance != 0); + }while(p_dist(p_newPos(data->pos, action.dir), 0, 0) > distance && distance != 0); } data->last_dir = action.dir; @@ -91,36 +120,3 @@ t_action purple_update(){ 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 deleted file mode 100644 index 27143c0..0000000 --- a/purple/tools.c +++ /dev/null @@ -1,37 +0,0 @@ -#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 deleted file mode 100644 index 5255ddc..0000000 --- a/purple/tools.h +++ /dev/null @@ -1,23 +0,0 @@ -#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 deleted file mode 100644 index 74ebfad..0000000 --- a/purple/worker.c +++ /dev/null @@ -1,42 +0,0 @@ -#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; -}