/Ayudantía 3/ejercicio2.cpp

https://gitlab.com/JohnBidwell/ayudantias-programacion-avanzada · C++ · 166 lines · 146 code · 20 blank · 0 comment · 16 complexity · 6210c8946c711b0b625914c84ac91103 MD5 · raw file

  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. class Pokemon{
  5. private:
  6. string nombre;
  7. int numero;
  8. int nivel;
  9. float ps;
  10. float pc;
  11. string ataque;
  12. float poder;
  13. float defensa;
  14. public:
  15. Pokemon(string nombre, int numero, int nivel, int ps, int pc, string ataque, int poder, float defensa){
  16. this->nombre=nombre;
  17. this->numero=numero;
  18. this->nivel=nivel;
  19. this->ps=ps;
  20. this->pc=pc;
  21. this->defensa=defensa;
  22. this->ataque=ataque;
  23. this->poder=poder;
  24. }
  25. void setNivel(){
  26. nivel+=1;
  27. }
  28. string getNombre(){
  29. return nombre;
  30. }
  31. int getNumero(){
  32. return numero;
  33. }
  34. int getNivel(){
  35. return nivel;
  36. }
  37. int getPS(){
  38. return ps;
  39. }
  40. int getPC(){
  41. return pc;
  42. }
  43. string getAtaque(){
  44. return ataque;
  45. }
  46. int getPoder(){
  47. return poder;
  48. }
  49. void danoRecibido(Pokemon *pkmn){
  50. cout << pkmn->getNombre() << " ha realizado " << pkmn->getAtaque() << endl;
  51. float dano = 0.6*(((((0.5*float(pkmn->getNivel())+1.0)*pkmn->getPC()*pkmn->getPoder())/(25.0*defensa)))+2.0);
  52. cout << nombre << " ha recibido " << dano << " puntos de dano." << endl;
  53. descontarPS(dano); //Llamamos a esta funcion para que descuente el dano recibido a los PS del Pokemon
  54. }
  55. void descontarPS(float dano){
  56. ps -= dano;
  57. if(ps<0){ //ESto es porque los PS no pueden ser negativos
  58. ps = 0;
  59. }
  60. cout << "Salud de " << nombre << " " << ps << "PS." << endl;
  61. if(ps == 0){
  62. cout << nombre << " ha sido derrotado." << endl;
  63. cout << endl;
  64. }
  65. }
  66. };
  67. class Pokedex{
  68. private:
  69. string entrenador;
  70. Pokemon *pokedex[151];
  71. public:
  72. Pokedex(string entrenador){
  73. this->entrenador=entrenador;
  74. for(int i=0; i<151; i++){
  75. pokedex[i]=NULL;
  76. }
  77. }
  78. void registrarPokemon(Pokemon *pokemon){
  79. if(pokedex[pokemon->getNumero()-1]==NULL){
  80. pokedex[pokemon->getNumero()-1] = pokemon;
  81. cout << "Pokemon registrado en la Pokedex" << endl;
  82. }
  83. else{
  84. cout << "Este Pokemon ya ha sido registrado" << endl;
  85. }
  86. }
  87. void buscarPokemon(string buscar){
  88. for(int i=0; i<151; i++){
  89. if(pokedex[i]==NULL){
  90. continue;
  91. }
  92. if(pokedex[i]->getNombre()==buscar){
  93. cout << pokedex[i]->getNumero() << " " << pokedex[i]->getNombre() << " Nivel " << pokedex[i]->getNivel() << endl;
  94. }
  95. else if(i==150){
  96. cout << "Pokemon no encontrado" << endl;
  97. }
  98. }
  99. }
  100. string getEntrenador(){
  101. return entrenador;
  102. }
  103. void imprimirPokedex(){
  104. cout << "Pokedex de " << entrenador << endl;
  105. for(int i=0; i<151; i++){
  106. if(pokedex[i]!=NULL){
  107. cout << i+1 << " " << pokedex[i]->getNombre() << " nivel " << pokedex[i]->getNivel() << endl;
  108. }
  109. else{
  110. cout << i+1 << " ???" << endl;
  111. }
  112. }
  113. }
  114. };
  115. int main(){
  116. Pokemon *inicial = new Pokemon("Charmander", 4, 5, 40, 30, "ascuas", 30, 20 );
  117. Pokedex *pokedex = new Pokedex("John");
  118. pokedex->registrarPokemon(inicial);
  119. Pokemon *p1 = new Pokemon("Pikachu", 25, 10, 50, 40, "Impactrueno", 50, 35);
  120. Pokemon *p2 = new Pokemon("Pidgey", 16, 8, 25, 25, "remolino", 10, 28 );
  121. Pokemon *p3 = new Pokemon("Caterpie", 10, 4, 20, 20, "Placaje", 10, 20);
  122. Pokemon *p4 = new Pokemon("Growlithe", 58 , 15, 60, 70, "Ascuas", 30,80 );
  123. Pokemon *p5 = new Pokemon("Ponyta",77 , 18, 70, 80, "Rueda de fuego", 40, 80);
  124. pokedex->registrarPokemon(p1);
  125. pokedex->registrarPokemon(p2);
  126. pokedex->registrarPokemon(p3);
  127. pokedex->registrarPokemon(p4);
  128. pokedex->registrarPokemon(p5);
  129. Pokemon *trainer1[6] = {inicial, p1, p2, p3, p4, p5};
  130. Pokemon *trainer2[6] = {p3 ,p2, inicial, p5, p4, p1};
  131. cout << endl;
  132. int pokemon1=0; //Contadores para saber que pokemon estamos utilizando
  133. int pokemon2=0; //Contadores para saber que pokemon estamos utilizando
  134. while(pokemon1<6 || pokemon2<6){ //Mientras estemos utilizando alguno de nuestros 6 Pokemon del equipo
  135. trainer2[pokemon2]->danoRecibido(trainer1[pokemon1]); //Al pokemon del trainer 2 lo ataca el pokemon del trainer 1
  136. if(trainer2[pokemon2]->getPS()==0) { //Comprobamos si el Pokemon que recibio dano esta debilitado o no
  137. pokemon2+=1; //Pasamos a utilizar el siguiente Pokemon de nuestro equipo
  138. continue;
  139. }
  140. trainer1[pokemon1]->danoRecibido(trainer2[pokemon2]); //Al pokemon del trainer 1 lo ataca el pokemon del trainer 2
  141. if(trainer1[pokemon1]->getPS()==0){ //Comprobamos si el Pokemon que recibio dano esta debilitado o no
  142. pokemon1+=1; //Pasamos a utilizar el siguiente Pokemon de nuestro equipo
  143. continue;
  144. }
  145. }
  146. }