Jump to content

Lísias de Castro

Members
  • Content count

    3
  • Joined

  • Last visited

Community Reputation

0 Comum

About Lísias de Castro

  • Rank
    Bean Dragon
  • Birthday December 11

Informações Pessoais

  • Sexo
    Masculino
  1. Lísias de Castro

    trajeto linear em linguagem c

    Ola, sou Lísias e gostaria de saber se alguém poderia me ajudar nessa tarefa tão difícil para finalizar minha biblioteca. Eu fiz um motor de jogos, e nele já consegui implementar todas as funções básicas para um uso primário. Fazendo a criação de jogos simples através dela. Mas estou desenvolvendo um rpg, e resolvi fazer com que os personagens atirem a longa distância. Porém, para que isso aconteça, tenho que fazer com que o objeto a ser atirado sempre corra em linha reta. Criei uma função que faz com que todos os objetos se movam na tela, mas ela não funciona de uma maneira linear. O que posso modificar nessa função para que ela me proporcione isso? static STATUS place_user_move(OBJECT_SET * U, BP32 x, BP32 y) { if (U == NULL)return (Off); if (U->x_route == x) { if (U->y_route > y) { U->y_route -= U->y_speed; U->where_stop_but(U, NORTH); if (U->y_route < y) { U->y_route = y; U->where_stop(U); return (On); } } if (U->y_route < y) { U->y_route += U->y_speed; U->where_stop_but(U, SOUTH); if (U->y_route > y) { U->where_stop(U); U->y_route = y; return (On); } } return (Off); } if (U->y_route == y) { if (U->x_route > x) { U->x_route -= U->x_speed; U->where_stop_but(U, WEST); if (U->x_route < x) { U->where_stop(U); U->x_route = x; return (On); } } if (U->x_route < x) { U->x_route += U->x_speed; U->where_stop_but(U, EAST); if (U->x_route > x) { U->where_stop(U); U->x_route = x; return (On); } } return (Off); } if (U->x_route > x) { U->x_route -= U->x_speed; if (U->x_route < x)U->x_route = x; if (U->y_route > y) { U->y_route -= U->y_speed; U->where_stop_but_and(U, NORTH, WEST); if (U->y_route < y)U->y_route = y; } if (U->y_route < y) { U->where_stop_but_and(U, SOUTH, WEST); U->y_route += U->y_speed; } } if (U->x_route < x) { U->x_route += U->x_speed; if (U->x_route > x)U->x_route = x; if (U->y_route < y) { U->y_route += U->y_speed; U->where_stop_but_and(U, SOUTH, EAST); if (U->y_route > y)U->y_route = y; } if (U->y_route > y) { U->y_route -= U->y_speed; U->where_stop_but_and(U, NORTH, EAST); if (U->y_route < y)U->y_route = y; } } return (Off); } PLACE_CALL STATUS PLACE_TYPE place_user_route(CHAINED * user, BP32 x, BP32 y) { if (user && USER_C(user->it)->object && bit_is_on(USER_C(user->it)->object->status, OBJECT_VISIBLE)) { OBJECT_SET * U = USER_C(user->it)->object; if (U->x_route == x && U->y_route == y) { obj_where_stop_all(U); return (On); } //printf("xs %f ys %f\n",object->x_speed,object->y_speed); return (place_user_move(U, x, y)); } return (Off); } #define sign(x) ((x > 0) ? 1 : ((x < 0) ? -1 : 0) ) PLACE_CALL STATUS PLACE_TYPE place_user_straight(CHAINED * user, BP32 x1, BP32 y1) { if (user && USER_C(user->it)->object && bit_is_on(USER_C(user->it)->object->status, OBJECT_VISIBLE)) { OBJECT_SET * O = USER_C(user->it)->object; BP32 dx, dy; dx = x1 - O->x_route; dy = y1 - O->y_route; static BP32 x = -1, y = -1, p = -1; if (x == -1)x = O->x_route; if (y == -1)y = O->y_route; if (p == -1)p = 2 * dy - dx; printf("x %lf y %lf\n", x, y); if (x < x1) { if (p >= 0) { y = y + 1; p = p + 2 * dy - 2 * dx; } else { p = p + 2 * dy; } x = x + 1; } else { O->x_route = x; O->y_route = y; x = -1; y = -1; p = -1; return (On); } O->x_route = x; O->y_route = y; x = -1; y = -1; p = -1; } return (Off); } a função user_place_straight foi minha tentativa de implementar bresenham que promete fazer o que estou tentando. Isso é o que fá fiz com o motor: https://www.youtube.com/watch?v=nuLi_lB6c4Y&feature=youtu.be Mas até agora não estou conseguindo resultado
  2. Lísias de Castro

    Rota em linguagem c

    Ola galera. Estou com uma duvida insolente Estou desenvolvendo uma engine em cima do sdl2. A maioria da parada já ta pelo. Porém, eu fiz uma função nomeada object_route. Que move as coordenas cartesianas do objeto até que chegue em seu destino. A função funciona. Porém, muitas vezes não executa a rota com precisão, muitas vezes dando-se por completa no meio do caminho. Se alguém conseguir localizar o erro de lógica eu agradeço. Ass: Mister Bean STATUS object_route(PLACE * to,OBJECT * object,int x,int y){ if(to==NULL||to->map==NULL||object==NULL)return(Off); if(object->x==x&&object->y>y){ object->where = NORTH; object->y -= object->y_speed; if(object->y<=y){ object->where = NOWHERE; object->y = y; return(On); } } else if(object->x==x&&object->y<y){ object->where = SOUTH; object->y += object->y_speed; if(object->y>=y){ object->where = NOWHERE; object->y = y; return(On); } } else if(object->x<x&&object->y==y){ object->where = EAST; object->x += object->x_speed; if(object->x>=x){ object->where = NOWHERE; object->x = x; return(On); } } else if(object->x>x&&object->y==y){ object->where = WEST; object->x -= object->x_speed; if(object->x<=x){ object->where = NOWHERE; object->x = x; return(On); } } else { if(object->x>x&&object->y>y){ object->where = NORTHWEST; object->x -= object->x_speed; object->y -= object->y_speed; if(object->x<=x&&object->y<=y){ object->where = NOWHERE; object->x = x; object->y = y; return(On); } if(object->x<=x){object->x = x;} if(object->y<=y){object->y = y;} } if(object->x<x&&object->y>y){ object->where = NORTHEAST; object->x += object->x_speed; object->y -= object->y_speed; if(object->x>=x&&object->y<=y){ object->where = NOWHERE; object->x = x; object->x = y; return(On); } if(object->x>=x){object->x = x;} if(object->y<=y){object->y = y;} } if(object->x<x&&object->y<y){ object->where = SOUTHEAST; object->x += object->x_speed; object->y += object->y_speed; if(object->x>=x&&object->y>=y){ object->where = NOWHERE; object->x = x; object->y = y; return(On); } if(object->x>=x){object->x = x;} if(object->y>=y){object->y = y;} } if(object->x>x&&object->y<y){ object->where = SOUTHWEST; object->x -= object->x_speed; object->y += object->y_speed; if(object->x<=x&&object->y>=y){ object->where = NOWHERE; object->x = x; object->y = y; return(On); } if(object->x<=x){object->x = x;} if(object->y>=y){object->y = y;} } } if(object->x==x&&object->y==y){ object->where = NOWHERE; return(On); } return(Off); }
  3. Lísias de Castro

    Funçoes linguagem c

    <code> void entrada(){ int numero = 0; printf("digite um numero\n"); scanf("%d",&numero); if((numero % 2) == 0){ printf("seu numero é par\n"); } else printf("seu numero é impar\n"); } int main(){ entrada(); return(0); } </code>
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.