Sunteți pe pagina 1din 17

DEPARTAMENTO DE INFORMATICA

ESTRUCTURA DE DATOS

INTEGRANTES:
Christian Lpez
Patricio Cabrera

INDICE:

PROFESOR DE LA ASIGNATURA:
Laura Setti

DEPARTAMENTO DE INFORMATICA

Introduccin

Pgina 2

Problema a desarrollar

Pagina 4

Solucin propuesta para el problema

Pagina 5 a 14

Conclusiones

Pagina 15

INTRODUCCION:

DEPARTAMENTO DE INFORMATICA

Qu es un pokmon?
Un Pokmon es una criatura semejante a lo que nosotros
conocemos como animales, solo que estos cuentan con
grandiosas habilidades como son emanar fuego, lanzar
truenos, escupir potentes chorros de agua, etc. Pero eso no
es todo, ya que estas criaturas se dividen en tipos (especies),
y dependiendo del tipo, el Pokmon aprender ciertos
ataques (las habilidades que mencionaba anteriormente) de
acuerdo a sus capacidades.
Pokmon en la industria mundial.
La saga de videojuegos fue y es desarrollada por la compaa
programadora de software japonesa Game Freak, con
personajes creados por Satoshi Tajiri para la empresa de
juguetes Creatures Inc., y a su vez distribuida por Nintendo.
La misin en estos juegos es capturar y entrenar a los
pokmon que hasta la fecha alcanzan el nmero de 718(en
este trabajo se toman como tope los 152 de la primera
temporada). La posibilidad de intercambiarlos le hizo
conseguir una popularidad que se plasm en un xito de
ventas y la consiguiente aparicin de una serie animada,
pelculas y diverso merchandising(Entindase como
comercializacin ) como peluches, juguetes y cartas.
A continuacin se presentara un programa que logra simular
una Batalla Pokmon, dicho programa esta creado en el
lenguaje c++ en codeblocks tanto los pokemones como sus
atributos (DEF,ATK,PS) son capturados desde un arhivo

PROBLEMA A DESARROLLAR:

DEPARTAMENTO DE INFORMATICA

Hay que tomar en cuenta varios factores y pensar


lgicamente cada paso a seguir para poder tomar los datos o
tambin como imaginarse una batalla, existen varios mtodos
posibles pero se debe elegir bien el camino.
Para empezar se debe tener en cuenta en cmo crear el
pokmon que atributos puede tener y como se les puede dar
mediante uso de sentencias sus datos.
Un gran problema es simular dicha batalla ya que
necesitamos uso de cdigos bastante largos a pesar de que
se use recursividad, una vez creados los atributos de los
pokemones se debe pensar lgicamente como enfrentarlos
ya que hay varios factores que involucran velocidad y/o
ataques especiales con bonificaciones
Se debe tener presente que cada pokmon tiene debilidades
y fortalezas frente a otros pokemones. Otra de las grandes
dudas seria que se debe restar puntos de vida por cada
ataque y saber bien cuando el pokmon deber ser retirado
del campo de batalla.

SOLUCION PROPUESTA:

DEPARTAMENTO DE INFORMATICA

Para empezar se debe tomar primordialmente el ingreso de


datos para ellos se implemento esta funcin que cumple con
dicho objetivo:
Funcin (externa)
entero ingreso (entero n){
mientras (cin.fail()){
cin.clear();
cin.ignore();
EscribirDato no valido ingrese un numero dentro del
rango
Leer n;
}
Retorna n;
}

DEPARTAMENTO DE INFORMATICA

Se debe tambin tomar los datos de los pokemones


trabajando con los archivos
Se refleja en el siguiente cdigo
void Pokemon::Datos(int x)
{
ifstream fin("Pokemon.txt");
for (int i=0;i<x;i++){
fin >> Num >> Nombre >> Tipo >> Ps >> Atk >> Def >>
Esp >> Vel;
}
string a = "Normal";
string b = "Fuego";
string c = "Agua";
string d = "Electrico";
string e = "Veneno";
string f = "Tierra";
string g = "Roca";
if (Tipo == "Dragon"){
A1.Ataq(Tipo,0);
A2.Ataq(b,0);
A3.Ataq(c,0);
A4.Ataq(d,0);
}
else{
if (Tipo == "Normal"){
A1.Ataq(a,0);
A2.Ataq(a,0);
A3.Ataq(a,0);
A4.Ataq(a,0);
}
else{
if (Tipo == "Fantasma"){

DEPARTAMENTO DE INFORMATICA

A1.Ataq(Tipo,1);
A2.Ataq(Tipo,2);
A3.Ataq(e,0);
A4.Ataq(d,0);
}
else{
if (Tipo == "Roca"){
A1.Ataq(Tipo,1);
A2.Ataq(Tipo,2);
A3.Ataq(f,0);
A4.Ataq(a,0);
}
else{
if (Tipo == "Tierra"){
int ar;
srand(time(NULL));
ar = rand()%3+1;
A1.Ataq(Tipo,0);
A2.Ataq(Tipo,0);
A3.Ataq(g,ar);
A4.Ataq(a,0);
}
else{
A1.Ataq(Tipo,0);
A2.Ataq(Tipo,0);
A3.Ataq(a,0);
A4.Ataq(a,0);
}
}
}
}
}
}

DEPARTAMENTO DE INFORMATICA

Este cdigo es una de las funciones que toma parte de la clase


pokmon la que puedes capturar datos del archivo de texto
Otra cosa primordial es mostrar dichos datos
Para ellos se implemento el siguiente cdigo:
void Pokemon::VerP()
{
Escribir << Num << " " << Nombre << " " << Tipo << " " << Ps << " " << Atk << " "
<< Def << " " << Esp << " " << Vel << endl;
}
La siguiente funcin muestra sofisticadamente cada ataque de un pokmon
ingresado o al azar:
void Pokemon::VerA()
{
Escribir << "ATAQUES" << endl;
Escribir << endl;
Escribir << "1.- ";
A1.Mostrar();
Escribir << "2.- ";
A2.Mostrar();
Escribir << "3.- ";
A3.Mostrar();
Escribir << "4.- ";
A4.Mostrar();
}
La siguiente funcin arma aleatoriamente los equipos de batalla
void Equipo(Pokemon E[], entero e)
{
entero a;
para (entero i=0;i<e;i++){
Pokemon X;
a = rand()%152+1;
X.Datos(a);
E[i] = X;
}
}
int ingreso (int n){
Mientras (cin.fail()){
cin.clear();
cin.ignore();
Escribir<<"Dato no valido ingrese un numero"<<endl;
Leer>>n;
}
Retorna n;
}

DEPARTAMENTO DE INFORMATICA

Y lo mas importante de todo el programa


El algoritmo que describe y simula una batalla pokmon entre n pokmon del
entrenador y n pokmon para el retador:

void Batalla(Pokemon E[], int e, Pokemon R[], int r)


{
Pokemon X;
Pokemon Y;
int i = 0; //POKEMON EN POSICION DE ARREGLO
int j = 0;
int Pse; //PUNTOS DE SALUD POKEMON ENTRENADOR
int Psr; //PUNTOS DE SALUD POKEMON RETADOR
int Ve; //VELOCIDAD POKEMON ENTRENADOR
int Vr; //VELOCIDAD POKEMON RETADOR
int d; //DAO
int TA; //TURNO ATAQUE
int SA; // SELECCION DE ATAQUE
string NE; //NOMBRE POKEMON ENTRENADOR
string N; //NOMBRE POKEMON RIVAL
X = E[i]; //PRIMER POKEMON ENTRENADOR
Y = R[j]; //PRIMER POKEMON RIVAL
Pse = X.getPs(); //TOMA LOS PUNTOS DE SALUD POKEMON
ENTRENADOR
Psr = Y.getPs(); //TOMA LOS PUNTOS DE SALUD POKEMON
RIVAL
Ve = X.getVel(); //VELOCIDAD POKEMON ENTRENADOR
Vr = Y.getVel(); //VELOCIDAD POKEMON RIVAL
NE = X.getNom(); //NOMBRE P. ENTRENADOR
N = Y.getNom(); //NOMBRE P. RIVAL
if (Ve > Vr){
TA = 1;
}
else{
TA = 0;
}
while (i!=e && j!=r){

DEPARTAMENTO DE INFORMATICA

cout << "COMIENZA LA BATALLA" << endl;


cout << NE << " V/S " << N << endl;
cout << endl;
while (Pse>0 && Psr>0){
if (TA == 1){
cout << NE << " ATACA" << endl;
cout << endl;
cout << "SELECCIONE UN ATAQUE" << endl;
cout << endl;
X.VerA();
a:
cin>>SA;
SA=ingreso(SA);
if (SA>4 || SA<1){
cout<<"Ingrese una opcion dentro del rango"<<endl;
goto a;
}
cout << X.getN(SA) << endl;
d = Dano(X,Y,SA);
if (d == 0){
cout << "EL ATAQUE FALLO" << endl;
TA--;
}
else{
cout << N << " RECIBIO " << d << " DE DAO" << endl;
Psr = Psr - d;
TA--;
}
}
else{
cout << N << " ATACA" << endl;
cout << "SELECCIONE UN ATAQUE" << endl;
Y.VerA();
b:
cin>>SA;
SA=ingreso(SA);
if (SA>4 || SA<1){

DEPARTAMENTO DE INFORMATICA

cout<<"Ingrese una opcion dentro del rango"<<endl;


goto b;
}
cout << Y.getN(SA) << endl;
d = Dano(Y,X,SA);
if (d == 0){
cout << "EL ATAQUE FALLO" << endl;
TA++;
}
else{
cout << NE << " RECIBIO " << d << " DE DAO" << endl;
Pse = Pse - d;
TA++;
}
}
}
if (Pse < 0){
if (i<=e-2){
cout << NE << " ESTA DEBILITADO" << endl;
i++;
X = E[i];
Pse = X.getPs();
Ve = X.getVel();
NE = X.getNom();
cout << "CAMBIO DE POKEMON" << endl;
cout << "VE " << NE << endl;
if (Ve > Vr){
TA = 1;
}
else{
TA = 0;
}
}
else{
i++;
}
}
if (Psr < 0){

DEPARTAMENTO DE INFORMATICA

if (j<=r-2){
cout << N << " ESTA DEBILITADO" << endl;
j++;
Y = R[j];
Psr = Y.getPs();
Vr = Y.getVel();
N = Y.getNom();
cout << "CAMBIO DE POKEMON" << endl;
cout << "VE " << N << endl;
if (Ve > Vr){
TA = 1;
}
else{
TA = 0;
}
}
else{
j++;
}
}
}
if (i == e){
cout << "GANA RETADOR" << endl;
}
if (j == r){
cout << "GANA ENTRENADOR" << endl;
}
}

DEPARTAMENTO DE INFORMATICA

Cabe destacar que se le agrego un plus al programa que simula al


entrenador en una batalla con un pokmon salvaje aleatorio:
void Salvaje(Pokemon E[], int e, Pokemon S)
{
int i = 0;
int Pse, Pss; //PUNTOS DE SALUD POKEMON ENTRENADOR,
SALVAJE
int Ve, Vs; //VELOCIDA POKEMON ENTRENADOR, SALVAJE
int d; //DAO
int TA; //TURNO ATAQUE
int SA;
srand(time(NULL));
string NE, NS;
Pokemon X;
X = E[i];
NE = X.getNom();
NS = S.getNom();
Pse = X.getPs();
Pss = S.getPs();
Ve = X.getVel();
Vs = S.getVel();
if (Ve > Vs){
TA = 1;
}
else{
TA = 0;
}
while (i!=e && Pss>0){
cout << "COMIENZA LA BATALLA" << endl;
cout << NE << " V/S " << NS << endl;
while (Pse>0 && Pss>0){
if (TA == 1){
cout << NE << " ATACA" << endl;
cout << "SELECCIONE UN ATAQUE" << endl;

DEPARTAMENTO DE INFORMATICA

X.VerA();
a:
cin >> SA;
SA=ingreso(SA);
if (SA>4 || SA<1){
cout<<"Ingrese una opcion dentro del rango"<<endl;
goto a;
}
cout << X.getN(SA) << endl;
d = Dano(X,S,SA);
if (d == 0){
cout << "EL ATAQUE FALLO" << endl;
TA--;
}
else{
cout << NS << " RECIBIO " << d << " DE DAO" << endl;
Pss = Pss - d;
TA--;
}
}
else{
cout << NS << " ATACA" << endl;
SA = rand()%5+1;
cout << S.getN(SA) << endl;
d = Dano(S,X,SA);
if (d == 0){
cout << "EL ATAQUE FALLO" << endl;
TA++;
}
else{
cout << NE << " RECIBIO " << d << " DE DAO" << endl;
Pse = Pse - d;
TA++;
}
}
}
if (Pse < 0 && i<=e-2){
cout << NE << " ESTA DEBILITADO" << endl;
i++;

DEPARTAMENTO DE INFORMATICA

X = E[i];
Pse = X.getPs();
Ve = X.getVel();
NE = X.getNom();
cout << "CAMBIO DE POKEMON" << endl;
cout << "VE " << NE << endl;
if (Ve > Vs){
TA = 1;
}
else{
TA = 0;
}
}
else{
i++;
}
if (Pss < 0){
cout << NS << " ESTA DEBILITADO" << endl;
cout << "HAS GANADO LA BATALLA" << endl;
}
}
}

DEPARTAMENTO DE INFORMATICA

Conclusin:
Tanto las clases como las estructuras, listas
y punteros son una herramienta importante
para el mundo de la informtica
Especialmente si en la vida real se debe
implementar un programa que permita
simular un transaccin o estadsticas de
poblaciones, las clases son especialmente
tiles cuando se debe programar
orientndose a objetos, el curso en si logra
que el alumnado logre enriquecerse de
dichos conocimientos logrando as un mayor
aprendizaje y tambin permite mejorar el
pensamiento lgico-deductivo el cual en el
futuro ser de gran utilidad pudiendo as
desempearnos en varias areas de la vida
actual como bancos, colegios, grandes
tiendas,etc.

DEPARTAMENTO DE INFORMATICA

S-ar putea să vă placă și