[C++] detectar una subida de nivel

Iniciado por yoxter, 19 Septiembre 2012, 00:00 AM

0 Miembros y 1 Visitante están viendo este tema.

yoxter

Saludos, solo por diversion decidi empezar a realizar un rpg, pero tengo problemas para detectar en que lvl esta el personaje dependiendo de su experiencia. el codigo comentado es lo que se me ocurrio para detectar el nivel pero solo elimina los niveles superiores.


#include <iostream>


using namespace std;

int main() {

long int level[100];
level[0] = 100;
//long int xp = 0;

cout << "nivel " << 1 << " = " << 0 << endl;

//cin >> xp;
int i = 0;
for (i = 1; i < 100; i++) {



cout << "nivel " << i + 1 << " = " << level[i-1] << endl;

    level[i] = level[i-1] + level[i-1] * 0.2; 
   
  /* if (level[i] >=! xp) {

if (xp >= level[i] ) {



cout << level[i] << endl;



}

} */


}

}







Gracias de antemano.



Posiblemente soy el intento de programador mas fracaso de la historia !!

El_Java

¿Por qué no pruebas algo así?
Código (cpp) [Seleccionar]
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>

using namespace std;

int main(){
   int experiencia, *levels;
   levels = new int[3];
   // levels[indice] = EXPERIENCIA
   levels[0] = 0;
   levels[1] = 100;
   levels[2] = 500;

   cin >> experiencia;
   int* ptr = upper_bound(levels, levels+3, experiencia);

   int l = (int)(ptr-levels);
   cout << "level: " << l << endl;

   return 0;
}


Puede que haya algún fallo, lo he hecho demasiado rápido y tengo oxidado el estándar.

yoxter

Cita de: El_Java en 19 Septiembre 2012, 00:22 AM
¿Por qué no pruebas algo así?
Código (cpp) [Seleccionar]
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>

using namespace std;

int main(){
   int experiencia, *levels;
   levels = new int[3];
   // levels[indice] = EXPERIENCIA
   levels[0] = 0;
   levels[1] = 100;
   levels[2] = 500;

   cin >> experiencia;
   int* ptr = upper_bound(levels, levels+3, experiencia);

   int l = (int)(ptr-levels);
   cout << "level: " << l << endl;

   return 0;
}


Puede que haya algún fallo, lo he hecho demasiado rápido y tengo oxidado el estándar.
Gracias por la respuesta

Saludos es muy interesante (no entiendo lo que hace  :rolleyes:) pero no detecta niveles arriba del 3.



Posiblemente soy el intento de programador mas fracaso de la historia !!

yoxter

Cita de: yoxter en 19 Septiembre 2012, 00:54 AM
Gracias por la respuesta

Saludos es muy interesante (no entiendo lo que hace  :rolleyes:) pero no detecta niveles arriba del 3.

retiro lo dicho funciona de maravilla hay un par de warnings por corregir pero luego me preocupo por eso muchas gracias al final me quedo asi


#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>

using namespace std;

int main(){
    int experiencia, *levels;
    levels = new int[99];
    // levels[indice] = EXPERIENCIA
levels[0] = 0;
levels[1] = 100;
levels[2] = 120;
levels[3] = 144;
levels[4] = 172;
levels[5] = 206;
levels[6] = 247;
levels[7] = 296;
levels[8] = 355;
levels[9] = 426;
levels[10] = 511;
levels[11] = 613;
levels[12] = 735;
levels[13] = 882;
levels[14] = 1058;
levels[15] = 1269;
levels[16] = 1522;
levels[17] = 1826;
levels[18] = 2191;
levels[19] = 2629;
levels[20] = 3154;
levels[21] = 3784;
levels[22] = 4540;
levels[23] = 5448;
levels[24] = 6537;
levels[25] = 7844;
levels[26] = 9412;
levels[27] = 11294;
levels[28] = 13552;
levels[29] = 16262;
levels[30] = 19514;
levels[31] = 23416;
levels[32] = 28099;
levels[33] = 33718;
levels[34] = 40461;
levels[35] = 48553;
levels[36] = 58263;
levels[37] = 69915;
levels[38] = 83898;
levels[39] = 100677;
levels[40] = 120812;
levels[41] = 144974;
levels[42] = 173968;
levels[43] = 208761;
levels[44] = 250513;
levels[45] = 300615;
levels[46] = 360738;
levels[47] = 432885;
levels[48] = 519462;
levels[49] = 623354;
levels[50] = 748024;
levels[51] = 897628;
levels[52] = 1077153;
levels[53] = 1292583;
levels[54] = 1551099;
levels[55] = 1861318;
levels[56] = 2233581;
levels[57] = 2680297;
levels[58] = 3216356;
levels[59] = 3859627;
levels[60] = 4631552;
levels[61] = 5557862;
levels[62] = 6669434;
levels[63] = 8003320;
levels[64] = 9603984;
levels[65] = 11524780;
levels[66] = 13829736;
levels[67] = 16595683;
levels[68] = 19914819;
levels[69] = 23897782;
levels[70] = 28677338;
levels[71] = 34412805;
levels[72] = 41295366;
levels[73] = 49554439;
levels[74] = 59465326;
levels[75] = 71358391;
levels[76] = 85630069;
levels[77] = 102756082;
levels[78] = 123307298;
levels[79] = 147968757;
levels[80] = 177562508;
levels[81] = 213075009;
levels[82] = 255690010;
levels[83] = 306828012;
levels[84] = 368193614;
levels[85] = 441832336;
levels[86] = 530198803;
levels[87] = 636238563;
levels[88] = 763486275;
levels[89] = 916183530;
levels[90] = 1099420236;
levels[91] = 1319304283;
levels[92] = 1583165139;
levels[93] = 1899798166;
levels[94] = 2279757799;
levels[95] = 2735709358;
levels[96] = 3282851229;
levels[97] = 3939421474;
levels[98] = 4727305768;
levels[99] = 5672766921;


    cin >> experiencia;
    int* ptr = upper_bound(levels, levels+99, experiencia);

    int l = (int)(ptr-levels);
    cout << "level: " << l << endl;

    return 0;
}





Posiblemente soy el intento de programador mas fracaso de la historia !!

anonimo12121

Mira haber si esto te sirve o es lo que buscas.

Código (cpp) [Seleccionar]
#include <iostream>
using namespace std;

    int GetCurrentLevel(int);
    unsigned int CurrentExp=510;
    unsigned int Levels[10];

int main(int argc,char* argv[]){
    Levels[0]=100;
    for(int i=1;i<10;i++){
        Levels[i]= Levels[i-1] + Levels[i-1] * 0.2;
    }
    for(int i=0;i<10;i++)cout << "nivel "<< i+1 << ": " << Levels[i] << endl;
    cout << "Tu experiencia es " << CurrentExp << " que corresponde al nivel: " << GetCurrentLevel(CurrentExp)<< endl;
    return 0;
}

int GetCurrentLevel(int x){
    for(int i=0;i<10;i++){
        if(x>=Levels[i] && x<Levels[i+1])return i+1;
        else if(x<Levels[0])return 0;
        else if(x>=Levels[9])return 10;
    }
}
Página para ganar Bitcoins y Dinero: http://earnbit.hol.es/
Video de YouTube con Hack para el LoL: http://adf.ly/5033746/youtube-lolemuhack
Si quieres ganar dinero con adfly entra y registrate aquí -> http://adf.ly/?id=5033746

yoxter

Cita de: Xafi en 19 Septiembre 2012, 19:46 PM
Mira haber si esto te sirve o es lo que buscas.

Código (cpp) [Seleccionar]
#include <iostream>
using namespace std;

    int GetCurrentLevel(int);
    unsigned int CurrentExp=510;
    unsigned int Levels[10];

int main(int argc,char* argv[]){
    Levels[0]=100;
    for(int i=1;i<10;i++){
        Levels[i]= Levels[i-1] + Levels[i-1] * 0.2;
    }
    for(int i=0;i<10;i++)cout << "nivel "<< i+1 << ": " << Levels[i] << endl;
    cout << "Tu experiencia es " << CurrentExp << " que corresponde al nivel: " << GetCurrentLevel(CurrentExp)<< endl;
    return 0;
}

int GetCurrentLevel(int x){
    for(int i=0;i<10;i++){
        if(x>=Levels[i] && x<Levels[i+1])return i+1;
        else if(x<Levels[0])return 0;
        else if(x>=Levels[9])return 10;
    }
}



Muchas gracias este metodo tambien funciona, ya estare viendo cual se adapta mejor a mi problema a medida que avance  ;-)



Posiblemente soy el intento de programador mas fracaso de la historia !!

anonimo12121

Cualquier cosa me avisa que me gusta mucho el desarrollo de juegos. Suerte
Página para ganar Bitcoins y Dinero: http://earnbit.hol.es/
Video de YouTube con Hack para el LoL: http://adf.ly/5033746/youtube-lolemuhack
Si quieres ganar dinero con adfly entra y registrate aquí -> http://adf.ly/?id=5033746