[Duda] Cуmo hacer para...?
#1

He intentado tantas cosas que no me quedу otra que pedir ayuda.


Necesito saber cуmo hacer para que una funciуn devuelva la ID del jugador con mбs puntos.

Hice esto:


pawn Код:
stock SearchPlayerWhitHighPoints()
{
    new Value = -1;
    new player = -1;
    new Float:Var;
   
    foreach(new i: Player)
    {
        Var = PlayerInfo[i][RadarSpeed]; // Los puntos serнa 'PlayerInfo[i][RadarSpeed]'.
        if(Var > Value)
        {
            player = i;
        }
    }
    return player;
}

Y no funciona, es mбs, ni yo le veo la lуgica a esa funciуn .
Alguien me podrнa decir cуmo hacer eso?

Saludos.
Reply
#2

return i; ?
Reply
#3

Quote:
Originally Posted by CrossOv3r
Посмотреть сообщение
return i; ?
Darнa errores. La funciуn que quiero hacer devolverнa la ID con mбs puntos.
Reply
#4

explicate un poco mas, como con mas puntos?, explica un poco para que quieres la funcion.
Reply
#5

Quote:
Originally Posted by OTACON
Посмотреть сообщение
explicate un poco mas, como con mas puntos?, explica un poco para que quieres la funcion.
Estoy haciendo un FS de carreras de Radar (Tipo NFS), y cada vez que un jugador llega a 'X' checkpoint, se extrae la velocidad del vehнculo y se le suma a la variable 'RadarSpeed'. Entonces, cada vez que el jugador llega al checkpoint, que la funciуn que necesito extraiga al jugador con mбs puntos.

Cappichi? xd.
Reply
#6

pawn Код:
static PuntosPlayers[MAX_PLAYERS],
SumandoPuntosPlayers[MAX_PLAYERS];
pawn Код:
SumandoPuntosPlayers[playerid]++;
PuntosPlayers[playerid] = VELOCIDAD * SumandoPuntosPlayers[playerid];
pawn Код:
stock SearchPlayerWhitHighPoints(puntosMAX){
    new puntos=0;
    foreach(new user: Player){
        if(PuntosPlayers[user] > puntosMAX){
            puntos = user;
        }
    } return puntos;
}
pawn Код:
stock SearchPlayerWhitHighPoints(puntosMAX){
    new puntos=0, contar=0;
    foreach(new user: Player){
        if(PuntosPlayers[user] > puntosMAX){
            puntos = user;
            contar++;
        }
    }
    if(contar == 1) return puntos;
    else if(contar > 1) return -1;
}
es lo que entendi :/...
Reply
#7

Se te ha olvidado cambiar el valor de Value, para que no sea cero siempre:

pawn Код:
stock SearchPlayerWhitHighPoints()
{
    new Value = -1;
    new player = -1;
    new Float:Var;

    foreach(new i: Player)
    {
        Var = PlayerInfo[i][RadarSpeed]; // Los puntos serнa 'PlayerInfo[i][RadarSpeed]'.
        if(Var > Value)
        {
            Value = floatround(Var); // esto, ademбs se convierte el float con floatround para evitar "tag mismatch"
            player = i;
        }
    }
    return player;
}
Reply
#8

Esta forma es un poco mas rбpida ya que evitas asignaciones extra. (Si quieres una versiуn aun mas optimizada, te sugiero utilizar el algoritmo bubblesort, u otros algoritmos de bъsqueda)

pawn Код:
stock SearchPlayerWhitHighPoints()
{
    new
        tmp,
        Float:val;

    foreach(new i : Player)
    {
        if(PlayerInfo[i][RadarSpeed] > val)
        {
            tmp = i;
            val = PlayerInfo[i][RadarSpeed];
        }
    }
   
    return tmp;
}
Reply
#9

Quote:
Originally Posted by the_chaoz
Посмотреть сообщение
Esta forma es un poco mas rбpida ya que evitas asignaciones extra. (Si quieres una versiуn aun mas optimizada, te sugiero utilizar el algoritmo bubblesort, u otros algoritmos de bъsqueda)

pawn Код:
stock SearchPlayerWhitHighPoints()
{
    new
        tmp,
        Float:val;

    foreach(new i : Player)
    {
        if(PlayerInfo[i][RadarSpeed] > val)
        {
            tmp = i;
            val = PlayerInfo[i][RadarSpeed];
        }
    }
   
    return tmp;
}
Tienes razуn xD. Reciйn me doy cuenta que las otras variables eran innecesarias xd.


Muchas gracias, y a los demбs tambiйn se lo agradezco xd.


EDIT: Tu cуdigo no funciona :/.

EDIT2: Sн, ahora funciona xd.
Reply
#10

yo pregunto ...

la variable Float:val no esta de mas o esta mal colocada?.

pawn Код:
stock SearchPlayerWhitHighPoints()
{
    new
        tmp,
        Float:val; //xa se xrea cuando utiliza SearchPlayerWhitHighPoints

    foreach(new i : Player)
    {
        if(PlayerInfo[i][RadarSpeed] > val) //aca estaria en 0.0 la variable val
        {
            tmp = i;
            val = PlayerInfo[i][RadarSpeed]; //aca le establetemos el valor de la variable RadarSpeed a la variable val, pero despues no se usa o_O.
        }
    }

    return tmp;
}
EDIT: por lo que tu me explicaste, lo que quieres es esto peor bueh ...


pawn Код:
stock SearchPlayerWhitHighPoints(){
    new puntos=0;
    foreach(new user: Player){
        if(PlayerInfo[user][RadarSpeed] > puntosMAX){
            puntos = user;
        }
    } return puntos;
}
pawn Код:
stock SearchPlayerWhitHighPoints(){
    new puntos=0, contar=0;
    foreach(new user: Player){
        if(PlayerInfo[user][RadarSpeed] > puntosMAX){
            contar++;
            puntos = user;
        }
    }
    if(contar == 1) return puntos;
    else if(contar > 1) return INVALID_PLAYER_ID;
}
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)