From e891ab880ed97e9f7f2b37a6490b8fa0f9b8476a Mon Sep 17 00:00:00 2001 From: JackCarterSmith Date: Fri, 22 Jun 2018 18:36:01 +0200 Subject: [PATCH] Arena generator v1 --- arenaEngine.c | 130 +++++++++++++++++++++++++++++++++++---------- arenaEngine.h | 3 +- data/tile_tree.png | Bin 3090 -> 3100 bytes main.c | 4 +- main.h | 8 +-- 5 files changed, 111 insertions(+), 34 deletions(-) diff --git a/arenaEngine.c b/arenaEngine.c index b0e0546..77fbf31 100644 --- a/arenaEngine.c +++ b/arenaEngine.c @@ -107,6 +107,7 @@ ARENA_H_TILE* createHTile(ARENA_H_TILE* prevHTile) { if (prevHTile == NULL) { tile_h = calloc(1,sizeof(ARENA_H_TILE)); //Using calloc because of resetting all memory allocated to 0 tile_h->type_id = 0; + //tile_h->type_id = random_lim(5); //tile_h->playerOnTile = NULL; tile_h->nextRow = NULL; tile_h->nextColumn = NULL; @@ -114,6 +115,7 @@ ARENA_H_TILE* createHTile(ARENA_H_TILE* prevHTile) { tile_h = calloc(1,sizeof(ARENA_H_TILE)); prevHTile->nextRow = tile_h; tile_h->type_id = 0; + //tile_h->type_id = random_lim(5); //tile_h->playerOnTile = NULL; tile_h->nextRow = NULL; tile_h->nextColumn = NULL; @@ -129,6 +131,7 @@ ARENA_W_TILE* createWTile(ARENA_H_TILE* prevHTile, ARENA_W_TILE* prevWTile) { tile_w = calloc(1,sizeof(ARENA_W_TILE)); prevHTile->nextColumn = tile_w; tile_w->type_id = 0; + //tile_w->type_id = random_lim(5); //tile_w->playerOnTile = NULL; tile_w->nextColumn = NULL; @@ -137,6 +140,7 @@ ARENA_W_TILE* createWTile(ARENA_H_TILE* prevHTile, ARENA_W_TILE* prevWTile) { tile_w = calloc(1,sizeof(ARENA_W_TILE)); prevWTile->nextColumn = tile_w; tile_w->type_id = 0; + //tile_w->type_id = random_lim(5); //tile_w->playerOnTile = NULL; tile_w->nextColumn = NULL; } @@ -144,18 +148,20 @@ ARENA_W_TILE* createWTile(ARENA_H_TILE* prevHTile, ARENA_W_TILE* prevWTile) { return NULL; } -int setTileTypeID(ARENA_H_TILE* arena, int coord_x, int coord_y, int new_id) { +int setTileTypeID(ARENA_H_TILE* arena, int x, int y, int new_id) { int i; + //x=coord_x-1; + //y=coord_y-1; - if (coord_x > A_WIDTH || coord_y > A_HEIGHT) return -1; + if (x > A_WIDTH || y > A_HEIGHT || x < 0 || y < 0) return -1; - if (coord_y == 0) { + if (y == 0) { ARENA_H_TILE* tile_h = NULL; tile_h = arena; - if (coord_x != 0) { - for (i=0;inextRow; + if (x != 0) { + for (i=0;inextRow; } } @@ -167,15 +173,15 @@ int setTileTypeID(ARENA_H_TILE* arena, int coord_x, int coord_y, int new_id) { ARENA_H_TILE* tile_h = NULL; tile_h = arena; - if (coord_x != 0) { - for (i=0;inextRow; } } tile_w = tile_h->nextColumn; - if (coord_y != 0) { - for (i=0;inextColumn; } } @@ -196,7 +202,7 @@ ARENA_H_TILE* genNewArena(int size_h, int size_w) { /* * Generate flatgrass arena */ - for(i=0;i=3;i++) { - for (j=-3;j>=3;j++) { - if (random_lim(101) < 50) { + for (i=-2;i<=1;i++) { + for (j=-1;j<=3;j++) { + if (random_lim(101) < 65) { if ((rand_x + i >= 0 && rand_x + i <= A_WIDTH) || (rand_y + i <= 0 && rand_y + i <= A_HEIGHT)) { - if(setTileTypeID(arenaOrigin, rand_x+i, rand_y+j, ROCK)!=0) addLogCritical("Rock failed to add on arena."); + if(setTileTypeID(arenaOrigin, rand_x+i, rand_y+j, ROCK)!=0) addLogCritical("Rock failed to add on arena."); else z++; + } + } + } + } + } + + /* + * Generate some tree area on grass + */ + for (z=1; z <= A_WIDTH * A_HEIGHT * TREE_GEN_RATE/100; z++) { + rand_x = random_lim(A_WIDTH+1)-1; + rand_y = random_lim(A_HEIGHT+1)-1; + + for (i=-2;i<=2;i++) { + for (j=-2;j<=2;j++) { + if (random_lim(101) < 65) { + if (((rand_x + i >= 0 && rand_x + i <= A_WIDTH) || (rand_y + i <= 0 && rand_y + i <= A_HEIGHT)) && getTileTypeID(arenaOrigin, rand_x+i, rand_y+j) == GRASS) { + if(setTileTypeID(arenaOrigin, rand_x+i, rand_y+j, TREE)!=0) addLogCritical("Tree failed to add on arena."); else z++; + } + } + } + } + } + + /* + * Generate some gold area on rock + */ + for (z=1; z <= A_WIDTH * A_HEIGHT * GOLD_GEN_RATE/100; z++) { + rand_x = random_lim(A_WIDTH+1)-1; + rand_y = random_lim(A_HEIGHT+1)-1; + + if (((rand_x + i >= 0 && rand_x + i <= A_WIDTH) || (rand_y + i <= 0 && rand_y + i <= A_HEIGHT)) && getTileTypeID(arenaOrigin, rand_x+i, rand_y+j) == ROCK) { + if(setTileTypeID(arenaOrigin, rand_x+i, rand_y+j, GOLD)!=0) addLogCritical("Tree failed to add on arena."); else z++; + } + } + + /* + * Generate some water area on grass + */ + for (z=1; z <= A_WIDTH * A_HEIGHT * WATER_GEN_RATE/100; z++) { + rand_x = random_lim(A_WIDTH+1)-1; + rand_y = random_lim(A_HEIGHT+1)-1; + + for (i=-3;i<=3;i++) { + for (j=-3;j<=3;j++) { + if (i >= -1 && j >= -1 && i <= 1 && j <= 1) { + if ((rand_x + i >= 0 && rand_x + i <= A_WIDTH) || (rand_y + i <= 0 && rand_y + i <= A_HEIGHT)) { + if(setTileTypeID(arenaOrigin, rand_x+i, rand_y+j, WATER)!=0) addLogCritical("Tree failed to add on arena."); else z++; + } + } else if (i < -1 && j < -1 && i > 1 && j > 1) { + if (random_lim(101) < 60) { + if ((rand_x + i >= 0 && rand_x + i <= A_WIDTH) || (rand_y + i <= 0 && rand_y + i <= A_HEIGHT)) { + if(setTileTypeID(arenaOrigin, rand_x+i, rand_y+j, WATER)!=0) addLogCritical("Tree failed to add on arena."); else z++; + } } } } @@ -270,8 +330,10 @@ void deleteArena(ARENA_H_TILE* arena) { int getTileTypeID(ARENA_H_TILE* arena, int coord_x, int coord_y) { int type_id = -1; int i; + //coord_x=x-1; + //coord_y=y-1; - if (coord_x > A_WIDTH || coord_y > A_HEIGHT) return -1; + if (coord_x > A_WIDTH || coord_y > A_HEIGHT || coord_x < 0 || coord_y < 0) return -1; if (coord_y == 0) { ARENA_H_TILE* tile_h = NULL; @@ -279,7 +341,7 @@ int getTileTypeID(ARENA_H_TILE* arena, int coord_x, int coord_y) { tile_h = arena; if (coord_x != 0) { for (i=0;inextRow; + tile_h = tile_h->nextRow; } } @@ -308,8 +370,7 @@ int getTileTypeID(ARENA_H_TILE* arena, int coord_x, int coord_y) { return type_id; } -SDL_Surface *getTileSurfaceFromID(TILE *t_list, int id) { - SDL_Surface *t_surface = NULL; +int isGroundTile(TILE *t_list, int id) { TILE *tmp_tile = NULL; int i=0; @@ -319,9 +380,20 @@ SDL_Surface *getTileSurfaceFromID(TILE *t_list, int id) { i++; } - t_surface = tmp_tile->texture; + return tmp_tile->isGround; +} - return t_surface; +SDL_Surface *getTileSurfaceFromID(TILE *t_list, int id) { + TILE *tmp_tile = NULL; + int i=0; + + tmp_tile = t_list; + while (inextTile; + i++; + } + + return tmp_tile->texture; } int isPlayerAdjacent(PLAYER* p1, PLAYER* p2) { @@ -332,8 +404,12 @@ int isPlayerAdjacent(PLAYER* p1, PLAYER* p2) { return adjPlayer; } -int isMoveCorrect(int coord_x, int coord_y, int direction) { - if (!((coord_x <= 0 && direction == LEFT) || (coord_y <= 0 && direction == UP) || (coord_x >= A_HEIGHT && direction == RIGHT) || (coord_y >= A_WIDTH && direction == DOWN))) return 1; +int isMoveCorrect(ARENA_H_TILE* arena, TILE *t_list, int coord_x, int coord_y, int direction) { + if (!((coord_x <= 0 && direction == LEFT) || (coord_y <= 0 && direction == UP) || (coord_x >= A_HEIGHT && direction == RIGHT) || (coord_y >= A_WIDTH && direction == DOWN))) { + if (isGroundTile(t_list,getTileTypeID(arena,coord_x,coord_y))) { + return 1; + } + } return 0; } diff --git a/arenaEngine.h b/arenaEngine.h index 666f523..7d5de0a 100644 --- a/arenaEngine.h +++ b/arenaEngine.h @@ -71,9 +71,10 @@ void deleteArena(ARENA_H_TILE* arena); //Status functions int getTileTypeID(ARENA_H_TILE* arena, int coord_x, int coord_y); +int isGroundTile(TILE *t_list, int id); SDL_Surface *getTileSurfaceFromID(TILE *t_list, int id); int isPlayerAdjacent(PLAYER* p1, PLAYER* p2); -int isMoveCorrect(int coord_x, int coord_y, int direction); +int isMoveCorrect(ARENA_H_TILE* arena, TILE *t_list, int coord_x, int coord_y, int direction); int getRelativeDirection(SDL_Rect pos1, SDL_Rect pos2); #endif diff --git a/data/tile_tree.png b/data/tile_tree.png index eab6e466ccd17c323dca4d756b5bc4aac2237864..20091338feed2f1ac4315f636c32b9ee62889e4e 100644 GIT binary patch delta 3073 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 P00000NkvXXu0mjfuMOBD delta 3063 zcmVjj@f*(n0htBhf)1 zI*8tjDW(~NZE!DHhh1;U>~7jlvMG~3sXIv~$!wC{NixYKlgwoDXMg2){+%50l>E5! zq}T4f=bn4+eZo6uK-HuH^^1D=R`e(t)xtY(LeshlwR1*POn=3rW<`hU>k_)2Ytj2G z9_=@iu=HDjTmKZ;`J2G*p9Mxf6lge#MeXBQbUc=@_Ldu~Z`-l?z>e*=oR~SXVd$0v z3-{d!?YdDpBw_jW6bMgHkLCq4+IIA4*pyH{W@F>QGZI>uap|-Ho?a8$_a$6g)1!jUOGfqRe`v+@8*T)j zNof6A3?`WI)?Wnf{$Ah(oj+nAjUNb{c|rS(fbXseqkpejF@D>D{%vOd*oLwDR!ki6 zJ#ShNJdiQ}nhS%s6^QCd9lYyWR5IJ*5k0QmFu}hf!?z@(?c2B=D!oz__4s+uLS}>6S(-kfb>-0@@zbscN~~`?8MGHCo%m}M*kfPMn7vs z&wUwzn}3euWAhz7MB^5-T!=^BK$r_g!ps>V|(S0ksB>1e{Ihks8WH_d_$f?pe^eYeU}wk=S!$g54nk+eTE*OQ>Q8 zG~P6`#f)en4|>^3RcjIoNUCx|?j*eOjzA)LkoYhjVu%hhXjWP#uhFULHt%C_(fvGE zC=gZ8pu9FHH7TsW9ewwl7&vs259Gq09e=@xHi)JT3B^5xe8+&MeFHl7Oz3%H#NkJm z(e!nJ;7%mQ(9Ck=-7S+w6EGQ_*H>{zY8pU$|ITIMStdB z_%d03lOK54nw@J8u%JCM3=YKs7GMJI` zA)R^YY*rj=K=@oT1B&qr#I-VemZAEWpgikmcVnj!wCM2>v zRw5FAhX{oA!p)L(wy@l%5W005;|IwYeoh_8r{d)W4an;u7nURx-hb5~x+W|ze3*To z6ebrlkQNxoL$w|AzE2W93HN%O>Xa`Rrz6~8&6C+Jrm!-0t7wGF7}g7u=R7ip>rg(O zfL_jnp-0q#^a=w;_ql|$@;96V-y{dfcHxMD zIIB@ruS^Xxk9EIH^?wu{wDYt}OrXO}M{$vRS>|~seCrar_w5XBk&}*tr+`!OTu&U* zS?_GN)mdilBH@zB>?D#b{o86uuCnIIgji;P(d`T*ME38gWhvovb)1k22`I{Gm1--B z>M&;*Kw=EebmXFRF$rZO^6|nW^83RR(2UAy8R-*RoMAv=Nq;r5wHzd)ysOsL#af=@ z5R#|?de$`cncDyPoPxPj%k*#YI*FRb>`g1G5*`Q87$GLnh|52P^j4O7&Vs>X)kLzG6&x2)^Qh&?3r;>nfija9D(&u%N43lUH zd_k&K&9FWKxj({u1{v+wA-;)A$0Y_L1d6+}(9RVt@W2S)ssjI}fvwzcQpfSE5xMMy zbgpF?(+;?MW1+dGE*^=5IO{`|;VDldLq%hjmb5Y~m0Y-1O>R4k*Nu$Rwp>@S*+H?Mv!CN=yV5G50O zTy59FGr)^07UXvr;psM@V9J1$S%qu1f|N-sY=6`PO;3c;IalYwidIWu;G_-E{m{i9+kc9f1W=%Yaybc!{=14HEdMz6Y0$U2Y*65sz zZR4DbN+#$ZH^bYfz&pn7$O$m}PAy6}6Mr(fnq||mcUDIAD%+CfXr8ygPjT|_yP<>+ zUTHHTwa$hlg@Qz<#wfNQkFu8A5tFG4aJ#;)VC-fhGvtE1te|(7OX#c}&0`80S>~o; z2UrW;>Tk#H6nbhT`{95#4jh7rXXm<#gnlJQ3q~k@#B=E zxQ~;rAcnzYr@%kVNw@Am;D&`xn1A_oJC=6%LAuR=mTagRlezZWxP2+8=wkqxbb6sy zi*yq4BBeH?ie+E`h13U6hZ))JdUArhVjqJTHKE?`M#U)?Je1Y}1~Edpt>f=JDxI&w z3ICu4zEOU7tSjhT<8ph$j`r|#GYaa+fr2h0>eyYyM6!ZiA=3TvNUl18i*P<2(%a)u z)FxB0j3^FL6khQj#@5}KS#hI*C1_YvxRfv%wz+r3gz`Z%{tHrpwqAL;nw