debugged move action, and some other render problems
This commit is contained in:
parent
ade7d5d38b
commit
af2321fe71
@ -26,7 +26,7 @@ void create_epicenter(int x, int y, int type);
|
|||||||
void create_epicenter_random(int type);
|
void create_epicenter_random(int type);
|
||||||
int generate(int x, int y);
|
int generate(int x, int y);
|
||||||
|
|
||||||
void create_map(t_pixel** map, t_team* teams, int w, int h){
|
void create_map(int w, int h){
|
||||||
int i,j;
|
int i,j;
|
||||||
int type;
|
int type;
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#ifndef GENERATOR_H
|
#ifndef GENERATOR_H
|
||||||
#define GENERATOR_H
|
#define GENERATOR_H
|
||||||
|
|
||||||
void create_map(t_pixel** map, t_team* teams, int width, int height);
|
void create_map(int width, int height);
|
||||||
|
|
||||||
#endif
|
#endif
|
@ -15,7 +15,7 @@ int max(int a, int b)
|
|||||||
return a > b ? a : b;
|
return a > b ? a : b;
|
||||||
}
|
}
|
||||||
|
|
||||||
void create_map(t_pixel** map, t_team* teams, int w, int h){
|
void create_map(int w, int h){
|
||||||
int i,j, k;
|
int i,j, k;
|
||||||
int r = (w/NB_TEAMS < h ? w/NB_TEAMS : h)/2;
|
int r = (w/NB_TEAMS < h ? w/NB_TEAMS : h)/2;
|
||||||
|
|
||||||
@ -39,7 +39,7 @@ void create_map(t_pixel** map, t_team* teams, int w, int h){
|
|||||||
if(d == 0){
|
if(d == 0){
|
||||||
map[i][j].type = SPAWN;
|
map[i][j].type = SPAWN;
|
||||||
map[i][j].data = malloc(sizeof(int));
|
map[i][j].data = malloc(sizeof(int));
|
||||||
*(int*)(map[i][j].data) = k;
|
*((int*)(map[i][j].data)) = k;
|
||||||
}else{
|
}else{
|
||||||
int l = (d-20)+(rand()%40);
|
int l = (d-20)+(rand()%40);
|
||||||
if(l > r+15){
|
if(l > r+15){
|
||||||
|
102
main.c
102
main.c
@ -13,10 +13,6 @@ typedef struct{
|
|||||||
int attack;
|
int attack;
|
||||||
} t_fight;
|
} t_fight;
|
||||||
|
|
||||||
t_pixel** map;
|
|
||||||
t_team* teams;
|
|
||||||
SDL_Surface* img;
|
|
||||||
|
|
||||||
// temp code
|
// temp code
|
||||||
t_action purple_update(void* my_info, void* com_data, int my_id);
|
t_action purple_update(void* my_info, void* com_data, int my_id);
|
||||||
t_action orange_update(void* my_info, void* com_data, int my_id);
|
t_action orange_update(void* my_info, void* com_data, int my_id);
|
||||||
@ -45,7 +41,7 @@ void initWorld(){
|
|||||||
teams[i].dudes = malloc(sizeof(t_dude)*MAX_DUDES);
|
teams[i].dudes = malloc(sizeof(t_dude)*MAX_DUDES);
|
||||||
teams[i].spawn.x = 0;
|
teams[i].spawn.x = 0;
|
||||||
teams[i].spawn.y = 0;
|
teams[i].spawn.y = 0;
|
||||||
teams[i].spawn_food = 0;
|
teams[i].spawn_food = 10;
|
||||||
teams[i].spawn_count = 0;
|
teams[i].spawn_count = 0;
|
||||||
}
|
}
|
||||||
map = (t_pixel**)malloc(sizeof(t_pixel*)*WIDTH);
|
map = (t_pixel**)malloc(sizeof(t_pixel*)*WIDTH);
|
||||||
@ -54,7 +50,7 @@ void initWorld(){
|
|||||||
|
|
||||||
// generate map
|
// generate map
|
||||||
printf("Generating map...\n");
|
printf("Generating map...\n");
|
||||||
create_map(map, teams, WIDTH, HEIGHT);
|
create_map(WIDTH, HEIGHT);
|
||||||
|
|
||||||
// create image from map
|
// create image from map
|
||||||
printf("Creating image from map...\n");
|
printf("Creating image from map...\n");
|
||||||
@ -69,26 +65,25 @@ void updateTeam(t_team team){
|
|||||||
int i;
|
int i;
|
||||||
t_action action;
|
t_action action;
|
||||||
for(i=0; i<team.nb_dudes; i++){
|
for(i=0; i<team.nb_dudes; i++){
|
||||||
t_dude dude = team.dudes[i];
|
action = team.update((void*)(team.dudes[i].custom_data), (void*)(team.dudes[i].com_data), i);
|
||||||
action = team.update((void*)(dude.custom_data), (void*)(dude.com_data), i);
|
handleAction(action, team.dudes+i);
|
||||||
handleAction(action, dude);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
t_coord getPos(t_coord coord, int dir){
|
t_coord getPos(t_coord coord, int dir){
|
||||||
switch(dir){
|
switch(dir){
|
||||||
case NORTH :
|
case NORTH :
|
||||||
coord.x++;
|
|
||||||
break;
|
|
||||||
case SOUTH :
|
|
||||||
coord.x--;
|
|
||||||
break;
|
|
||||||
case WEST :
|
|
||||||
coord.y++;
|
coord.y++;
|
||||||
break;
|
break;
|
||||||
case EAST :
|
case SOUTH :
|
||||||
coord.y--;
|
coord.y--;
|
||||||
break;
|
break;
|
||||||
|
case WEST :
|
||||||
|
coord.x++;
|
||||||
|
break;
|
||||||
|
case EAST :
|
||||||
|
coord.x--;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
return coord;
|
return coord;
|
||||||
}
|
}
|
||||||
@ -97,28 +92,27 @@ void spawnDudes(){
|
|||||||
int i;
|
int i;
|
||||||
t_dude new_dude;
|
t_dude new_dude;
|
||||||
for(i=0; i<NB_TEAMS; i++){
|
for(i=0; i<NB_TEAMS; i++){
|
||||||
t_team team = teams[i];
|
if(teams[i].spawn_food > 0)
|
||||||
if(team.spawn_food)
|
teams[i].spawn_count++;
|
||||||
team.spawn_count++;
|
if(teams[i].spawn_count > 10 && map[teams[i].spawn.x][teams[i].spawn.y].type == SPAWN){
|
||||||
if(team.spawn_count > 10 && map[team.spawn.x][team.spawn.y].type == SPAWN){
|
teams[i].spawn_food--;
|
||||||
team.spawn_food--;
|
teams[i].spawn_count = 0;
|
||||||
|
|
||||||
new_dude.pos = team.spawn;
|
new_dude.pos = teams[i].spawn;
|
||||||
new_dude.team = team.team;
|
new_dude.team = teams[i].team;
|
||||||
new_dude.inventory = -1;
|
new_dude.inventory = -1;
|
||||||
new_dude.ground.type = SPAWN;
|
new_dude.ground = map[teams[i].spawn.x][teams[i].spawn.y];
|
||||||
new_dude.ground.data = NULL;
|
new_dude.custom_data = malloc(teams[i].dude_size);
|
||||||
new_dude.custom_data = malloc(team.dude_size);
|
memset(new_dude.custom_data, 0, teams[i].dude_size);
|
||||||
memset(new_dude.custom_data, 0, team.dude_size);
|
|
||||||
new_dude.com_data = NULL;
|
new_dude.com_data = NULL;
|
||||||
|
|
||||||
team.dudes[team.nb_dudes++] = new_dude;
|
teams[i].dudes[teams[i].nb_dudes++] = new_dude;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void handleAction(t_action action, t_dude dude){
|
void handleAction(t_action action, t_dude* dude){
|
||||||
t_coord target_pos = getPos(dude.pos, action.dir);
|
t_coord target_pos = getPos(dude->pos, action.dir);
|
||||||
t_pixel target = map[target_pos.x][target_pos.y];
|
t_pixel target = map[target_pos.x][target_pos.y];
|
||||||
switch(action.type){
|
switch(action.type){
|
||||||
case MOVE :
|
case MOVE :
|
||||||
@ -129,18 +123,21 @@ void handleAction(t_action action, t_dude dude){
|
|||||||
&& target.type != DUDE
|
&& target.type != DUDE
|
||||||
&& target.type != TREE
|
&& target.type != TREE
|
||||||
)
|
)
|
||||||
add_move(&dude, target_pos, map);
|
add_move(dude, target_pos);
|
||||||
break;
|
break;
|
||||||
case ATTACK :
|
case ATTACK :
|
||||||
if(target.type == DUDE)
|
printf("forbidden action\n");
|
||||||
addFight(dude, *((t_dude*)(target.data)));
|
//if(target.type == DUDE)
|
||||||
|
// addFight(dude, *((t_dude*)(target.data)));
|
||||||
break;
|
break;
|
||||||
case PICK :
|
case PICK :
|
||||||
|
printf("forbidden action\n");
|
||||||
// if target is resource :
|
// if target is resource :
|
||||||
// put target in inventory
|
// put target in inventory
|
||||||
// put grass on target
|
// put grass on target
|
||||||
break;
|
break;
|
||||||
case PUT :
|
case PUT :
|
||||||
|
printf("forbidden action\n");
|
||||||
// if target is grass or road or corpse
|
// if target is grass or road or corpse
|
||||||
// target = inventory
|
// target = inventory
|
||||||
// inventory = NULL
|
// inventory = NULL
|
||||||
@ -148,6 +145,7 @@ void handleAction(t_action action, t_dude dude){
|
|||||||
// spawn.food ++
|
// spawn.food ++
|
||||||
break;
|
break;
|
||||||
case WORK :
|
case WORK :
|
||||||
|
printf("forbidden action\n");
|
||||||
// switch target
|
// switch target
|
||||||
// case rock -> stone
|
// case rock -> stone
|
||||||
// case berries -> food
|
// case berries -> food
|
||||||
@ -162,9 +160,11 @@ void handleAction(t_action action, t_dude dude){
|
|||||||
// case corpse -> grass
|
// case corpse -> grass
|
||||||
break;
|
break;
|
||||||
case WAIT :
|
case WAIT :
|
||||||
|
printf("forbidden action\n");
|
||||||
// ...
|
// ...
|
||||||
break;
|
break;
|
||||||
case COMMUNICATE :
|
case COMMUNICATE :
|
||||||
|
printf("forbidden action\n");
|
||||||
// if target is sign -> set sign message
|
// if target is sign -> set sign message
|
||||||
// if target is dude -> sent message to dude
|
// if target is dude -> sent message to dude
|
||||||
break;
|
break;
|
||||||
@ -173,41 +173,9 @@ void handleAction(t_action action, t_dude dude){
|
|||||||
|
|
||||||
void generateImg(){
|
void generateImg(){
|
||||||
int i, j;
|
int i, j;
|
||||||
Uint32 color;
|
|
||||||
t_dude* dudeData;
|
|
||||||
int* spawnData;
|
|
||||||
for(i=0; i<WIDTH; i++){
|
for(i=0; i<WIDTH; i++){
|
||||||
for(j=0; j<HEIGHT; j++){
|
for(j=0; j<HEIGHT; j++){
|
||||||
switch(map[i][j].type){
|
putpixel(img, i, j, getColor(map[i][j]));
|
||||||
case BEDROCK : color = 0x101020; break;
|
|
||||||
case GRASS : color = 0x004400; break;
|
|
||||||
case ROCK : color = 0x8C8C8C; break;
|
|
||||||
case IRON_ORE : color = 0x917B61; break;
|
|
||||||
case TREE : color = 0x000F0F; break;
|
|
||||||
case BERRIES : color = 0x6B87C7; break;
|
|
||||||
case FOOD : color = 0xFF7A7A; break;
|
|
||||||
case WOOD : color = 0x634A22; break;
|
|
||||||
case STONE : color = 0x999999; break;
|
|
||||||
case IRON : color = 0x555555; break;
|
|
||||||
case CORPSE : color = 0xFF0000; break;
|
|
||||||
|
|
||||||
case DUDE :
|
|
||||||
dudeData = map[i][j].data;
|
|
||||||
color = dudeData->team == ORANGE ? 0xFF8000 : 0x9900FF;
|
|
||||||
break;
|
|
||||||
case SPAWN :
|
|
||||||
spawnData = (int*)map[i][j].data;
|
|
||||||
color = *spawnData == ORANGE ? 0xFFC080 : 0xD596FF;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case WALL : color = 0xE6B2A1; break;
|
|
||||||
case ROAD : color = 0xEDB287; break;
|
|
||||||
case SWORD : color = 0xEBEBEB; break;
|
|
||||||
case SIGN : color = 0xA37A50; break;
|
|
||||||
default : color = 0x0000FF; break; // bleu absolu = bug
|
|
||||||
}
|
|
||||||
putpixel(img, i, j, color);
|
|
||||||
//img->pixels[j * WIDTH + i] = color;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -242,7 +210,7 @@ int MAIN( int argc, char** argv )
|
|||||||
temps = SDL_GetTicks();
|
temps = SDL_GetTicks();
|
||||||
SDL_PumpEvents();
|
SDL_PumpEvents();
|
||||||
int i;
|
int i;
|
||||||
//spawnDudes();
|
spawnDudes();
|
||||||
for(i=0; i<NB_TEAMS; i++)
|
for(i=0; i<NB_TEAMS; i++)
|
||||||
updateTeam(teams[i]);
|
updateTeam(teams[i]);
|
||||||
resolve_moves();
|
resolve_moves();
|
||||||
|
9
main.h
9
main.h
@ -12,7 +12,7 @@
|
|||||||
#define OS "Linux"
|
#define OS "Linux"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define MAX_FPS 60
|
#define MAX_FPS 4
|
||||||
#define MAX_DUDES 50
|
#define MAX_DUDES 50
|
||||||
#define WIDTH 400
|
#define WIDTH 400
|
||||||
#define HEIGHT 250
|
#define HEIGHT 250
|
||||||
@ -49,6 +49,11 @@ typedef struct{
|
|||||||
|
|
||||||
void generateImg();
|
void generateImg();
|
||||||
|
|
||||||
void handleAction(t_action action, t_dude dude);
|
void handleAction(t_action action, t_dude* dude);
|
||||||
|
|
||||||
|
// variables globales
|
||||||
|
t_pixel** map;
|
||||||
|
t_team* teams;
|
||||||
|
SDL_Surface* img;
|
||||||
|
|
||||||
#endif
|
#endif
|
2
orange.c
2
orange.c
@ -16,7 +16,7 @@ t_action orange_update(void* my_info, void* com_data, int my_id){
|
|||||||
t_action action;
|
t_action action;
|
||||||
|
|
||||||
action.type = MOVE;
|
action.type = MOVE;
|
||||||
action.dir = SOUTH;
|
action.dir = rand()%4;
|
||||||
action.data = NULL;
|
action.data = NULL;
|
||||||
|
|
||||||
return action;
|
return action;
|
||||||
|
2
purple.c
2
purple.c
@ -16,7 +16,7 @@ t_action purple_update(void* my_info, void* com_data, int my_id){
|
|||||||
t_action action;
|
t_action action;
|
||||||
|
|
||||||
action.type = MOVE;
|
action.type = MOVE;
|
||||||
action.dir = NORTH;
|
action.dir = rand()%4;
|
||||||
action.data = NULL;
|
action.data = NULL;
|
||||||
|
|
||||||
return action;
|
return action;
|
||||||
|
49
tools.c
49
tools.c
@ -10,10 +10,8 @@ t_move* clearMoves[MAX_DUDES*NB_TEAMS];
|
|||||||
int nb_clear = 0;
|
int nb_clear = 0;
|
||||||
t_move* occupiedMoves[MAX_DUDES*NB_TEAMS];
|
t_move* occupiedMoves[MAX_DUDES*NB_TEAMS];
|
||||||
int nb_occupied = 0;
|
int nb_occupied = 0;
|
||||||
t_pixel** map;
|
|
||||||
|
|
||||||
void add_move(t_dude* dude, t_coord dst, t_pixel** the_map){
|
void add_move(t_dude* dude, t_coord dst){
|
||||||
map = the_map;
|
|
||||||
t_move* move = malloc(sizeof(t_move));
|
t_move* move = malloc(sizeof(t_move));
|
||||||
move->dude = dude;
|
move->dude = dude;
|
||||||
move->dst = dst;
|
move->dst = dst;
|
||||||
@ -26,16 +24,19 @@ void add_move(t_dude* dude, t_coord dst, t_pixel** the_map){
|
|||||||
|
|
||||||
void applyMove(t_move* move){
|
void applyMove(t_move* move){
|
||||||
t_pixel target = map[move->dst.x][move->dst.y];
|
t_pixel target = map[move->dst.x][move->dst.y];
|
||||||
map[move->dude->pos.x][move->dude->pos.y] = move->dude->ground;
|
map[move->dude->pos.x][move->dude->pos.y] = move->dude->ground; // set the ground where the dude was
|
||||||
move->dude->ground = target;
|
move->dude->ground = target; // set the ground of the dude to where he goes
|
||||||
target.type = DUDE;
|
map[move->dst.x][move->dst.y].type = DUDE; // set the target tile with the dude
|
||||||
target.data = move->dude;
|
map[move->dst.x][move->dst.y].data = move->dude;
|
||||||
|
putpixel(img, move->dst.x, move->dst.y, getColor(map[move->dst.x][move->dst.y]));
|
||||||
|
putpixel(img, move->dude->pos.x, move->dude->pos.y, getColor(map[move->dude->pos.x][move->dude->pos.y]));
|
||||||
|
move->dude->pos.x = move->dst.x;
|
||||||
|
move->dude->pos.y = move->dst.y;
|
||||||
}
|
}
|
||||||
|
|
||||||
void resolve_moves(){
|
void resolve_moves(){
|
||||||
int change = 1;
|
int change = 1;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
// clear moves
|
// clear moves
|
||||||
while(nb_clear > 0){
|
while(nb_clear > 0){
|
||||||
i = rand()%nb_clear;
|
i = rand()%nb_clear;
|
||||||
@ -46,7 +47,6 @@ void resolve_moves(){
|
|||||||
}
|
}
|
||||||
clearMoves[i] = clearMoves[--nb_clear];
|
clearMoves[i] = clearMoves[--nb_clear];
|
||||||
}
|
}
|
||||||
|
|
||||||
// occupied moves
|
// occupied moves
|
||||||
while(change){
|
while(change){
|
||||||
change = 0;
|
change = 0;
|
||||||
@ -60,6 +60,37 @@ void resolve_moves(){
|
|||||||
nb_occupied = 0;
|
nb_occupied = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Uint32 getColor(t_pixel pixel){
|
||||||
|
t_dude* dudeData;
|
||||||
|
int* spawnData;
|
||||||
|
switch(pixel.type){
|
||||||
|
case BEDROCK : return 0x101020;
|
||||||
|
case GRASS : return 0x719678;
|
||||||
|
case ROCK : return 0x8C8C8C;
|
||||||
|
case IRON_ORE : return 0x917B61;
|
||||||
|
case TREE : return 0x003800;
|
||||||
|
case BERRIES : return 0x4D6394;
|
||||||
|
case FOOD : return 0xFF7A7A;
|
||||||
|
case WOOD : return 0x634A22;
|
||||||
|
case STONE : return 0x454545;
|
||||||
|
case IRON : return 0x4A4036;
|
||||||
|
case CORPSE : return 0xFF0000;
|
||||||
|
case DUDE :
|
||||||
|
dudeData = pixel.data;
|
||||||
|
return dudeData->team == ORANGE ? 0x7A4100 : 0x9900FF;
|
||||||
|
case SPAWN :
|
||||||
|
spawnData = (int*)(pixel.data);
|
||||||
|
if(spawnData == NULL) printf("WTF\n");
|
||||||
|
return *spawnData == ORANGE ? 0xFFC080 : 0xD596FF;
|
||||||
|
case WALL : return 0xE6B2A1;
|
||||||
|
case ROAD : return 0xEDB287;
|
||||||
|
case SWORD : return 0xEBEBEB;
|
||||||
|
case SIGN : return 0xA37A50;
|
||||||
|
default : return 0x0000FF; // bleu absolu = bug
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
Uint32 getpixel(SDL_Surface *surface, int x, int y)
|
Uint32 getpixel(SDL_Surface *surface, int x, int y)
|
||||||
{
|
{
|
||||||
int bpp = surface->format->BytesPerPixel;
|
int bpp = surface->format->BytesPerPixel;
|
||||||
|
4
tools.h
4
tools.h
@ -5,10 +5,12 @@
|
|||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include "team.h"
|
#include "team.h"
|
||||||
|
|
||||||
void add_move(t_dude* dude, t_coord dst, t_pixel** the_map);
|
void add_move(t_dude* dude, t_coord dst);
|
||||||
|
|
||||||
void resolve_moves();
|
void resolve_moves();
|
||||||
|
|
||||||
|
Uint32 getColor(t_pixel pixel);
|
||||||
|
|
||||||
void putpixel(SDL_Surface *surface, int x, int y, Uint32 pixel);
|
void putpixel(SDL_Surface *surface, int x, int y, Uint32 pixel);
|
||||||
|
|
||||||
Uint32 getpixel(SDL_Surface *surface, int x, int y);
|
Uint32 getpixel(SDL_Surface *surface, int x, int y);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user