Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: yoxter en 19 Septiembre 2012, 00:00 am



Título: [C++] detectar una subida de nivel
Publicado por: yoxter en 19 Septiembre 2012, 00:00 am
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.

Código
  1. #include <iostream>
  2.  
  3.  
  4. using namespace std;
  5.  
  6. int main() {
  7.  
  8. long int level[100];
  9. level[0] = 100;
  10. //long int xp = 0;
  11.  
  12. cout << "nivel " << 1 << " = " << 0 << endl;
  13.  
  14. //cin >> xp;
  15. int i = 0;
  16. for (i = 1; i < 100; i++) {
  17.  
  18.  
  19.  
  20. cout << "nivel " << i + 1 << " = " << level[i-1] << endl;
  21.  
  22.    level[i] = level[i-1] + level[i-1] * 0.2;  
  23.  
  24.  /* if (level[i] >=! xp) {
  25.  
  26. if (xp >= level[i] ) {
  27.  
  28.  
  29.  
  30. cout << level[i] << endl;
  31.  
  32.  
  33.  
  34. }
  35.  
  36. } */
  37.  
  38.  
  39. }
  40.  
  41. }
  42.  
  43.  
  44.  
  45.  
  46.  


Gracias de antemano.


Título: Re: [C++] detectar una subida de nivel
Publicado por: El_Java en 19 Septiembre 2012, 00:22 am
¿Por qué no pruebas algo así?
Código
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. #include <iterator>
  5.  
  6. using namespace std;
  7.  
  8. int main(){
  9.    int experiencia, *levels;
  10.    levels = new int[3];
  11.    // levels[indice] = EXPERIENCIA
  12.    levels[0] = 0;
  13.    levels[1] = 100;
  14.    levels[2] = 500;
  15.  
  16.    cin >> experiencia;
  17.    int* ptr = upper_bound(levels, levels+3, experiencia);
  18.  
  19.    int l = (int)(ptr-levels);
  20.    cout << "level: " << l << endl;
  21.  
  22.    return 0;
  23. }
  24.  

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


Título: Re: [C++] detectar una subida de nivel
Publicado por: yoxter en 19 Septiembre 2012, 00:54 am
¿Por qué no pruebas algo así?
Código
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. #include <iterator>
  5.  
  6. using namespace std;
  7.  
  8. int main(){
  9.    int experiencia, *levels;
  10.    levels = new int[3];
  11.    // levels[indice] = EXPERIENCIA
  12.    levels[0] = 0;
  13.    levels[1] = 100;
  14.    levels[2] = 500;
  15.  
  16.    cin >> experiencia;
  17.    int* ptr = upper_bound(levels, levels+3, experiencia);
  18.  
  19.    int l = (int)(ptr-levels);
  20.    cout << "level: " << l << endl;
  21.  
  22.    return 0;
  23. }
  24.  

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.


Título: Re: [C++] detectar una subida de nivel
Publicado por: yoxter en 19 Septiembre 2012, 03:13 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

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


Título: Re: [C++] detectar una subida de nivel
Publicado por: anonimo12121 en 19 Septiembre 2012, 19:46 pm
Mira haber si esto te sirve o es lo que buscas.

Código
  1. #include <iostream>
  2. using namespace std;
  3.  
  4.    int GetCurrentLevel(int);
  5.    unsigned int CurrentExp=510;
  6.    unsigned int Levels[10];
  7.  
  8. int main(int argc,char* argv[]){
  9.    Levels[0]=100;
  10.    for(int i=1;i<10;i++){
  11.        Levels[i]= Levels[i-1] + Levels[i-1] * 0.2;
  12.    }
  13.    for(int i=0;i<10;i++)cout << "nivel "<< i+1 << ": " << Levels[i] << endl;
  14.    cout << "Tu experiencia es " << CurrentExp << " que corresponde al nivel: " << GetCurrentLevel(CurrentExp)<< endl;
  15.    return 0;
  16. }
  17.  
  18. int GetCurrentLevel(int x){
  19.    for(int i=0;i<10;i++){
  20.        if(x>=Levels[i] && x<Levels[i+1])return i+1;
  21.        else if(x<Levels[0])return 0;
  22.        else if(x>=Levels[9])return 10;
  23.    }
  24. }
  25.  


Título: Re: [C++] detectar una subida de nivel
Publicado por: yoxter en 19 Septiembre 2012, 21:06 pm
Mira haber si esto te sirve o es lo que buscas.

Código
  1. #include <iostream>
  2. using namespace std;
  3.  
  4.    int GetCurrentLevel(int);
  5.    unsigned int CurrentExp=510;
  6.    unsigned int Levels[10];
  7.  
  8. int main(int argc,char* argv[]){
  9.    Levels[0]=100;
  10.    for(int i=1;i<10;i++){
  11.        Levels[i]= Levels[i-1] + Levels[i-1] * 0.2;
  12.    }
  13.    for(int i=0;i<10;i++)cout << "nivel "<< i+1 << ": " << Levels[i] << endl;
  14.    cout << "Tu experiencia es " << CurrentExp << " que corresponde al nivel: " << GetCurrentLevel(CurrentExp)<< endl;
  15.    return 0;
  16. }
  17.  
  18. int GetCurrentLevel(int x){
  19.    for(int i=0;i<10;i++){
  20.        if(x>=Levels[i] && x<Levels[i+1])return i+1;
  21.        else if(x<Levels[0])return 0;
  22.        else if(x>=Levels[9])return 10;
  23.    }
  24. }
  25.  


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


Título: Re: [C++] detectar una subida de nivel
Publicado por: anonimo12121 en 19 Septiembre 2012, 21:16 pm
Cualquier cosa me avisa que me gusta mucho el desarrollo de juegos. Suerte