-
Gabriela Sepúlveda Bravo authored6fe80a05
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "inih/ini.h"
//-------------------------------------------------------------------------------
/*DEFINICION DE MATCH*/
#define MATCH(s, n) strcmp(section, s) == 0 && strcmp(name, n) == 0
//-------------------------------------------------------------------------------
/*ESTRUCTURAS*/
/*Estructura del elepemon*/
struct ELEPEMON
{
const char* name;
int hp;
const char* type;
int power;
int defense;
const char* attacks;
};
/*Estructura de los nodos del stack*/
struct elepemon_node
{
struct ELEPEMON elepemon;
struct elepemon_node* next;
};
/*Estructura de un arreglo para almacenar
*nombres de elepemones*/
typedef char cadena_elepemon[6];
//-------------------------------------------------------------------------------
/*VARIABLES GLOBALES*/
char nombre_elepemon[20];
char P1[30];
char P2[30];
int cantidad_elepemones;
int opcion;
int i=1;
//-------------------------------------------------------------------------------
/*FUNCIONES*/
/*Init_elepemon*/
void init_elepemon(struct ELEPEMON* elepemon)
{
elepemon = malloc(sizeof(struct ELEPEMON));
elepemon->name = "";
elepemon->hp = 0;
elepemon->defense = 0;
elepemon->power = 0;
elepemon->type = "NORMAL";
elepemon->attacks= "";
}
/*Funcion para recorrer el arreglo
*de elepemones y/o imprimir*/
void print_arreglo(cadena_elepemon A[],int i)
{
for(int x=0;x<i;x++){
printf("%s\n",A[x]);
}
}
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
//-------------------------------------------------------------------------------
/*FUNCIONES STACK*/
/*Funcion que verifica si una pila
*esta vacia. Se pasa como argumento
*un puntero al ultimo nodo del stack
*/
int stack_vacio(struct elepemon_node* stack)
{
if(stack==NULL){
return 1;
}else{
return 0;
}
}
/*Funcion que agrega un elepemon
*al stack. Se pasa como argumento
*un puntero al ultimo nodo del
*stack y el nombre del elepemon}
*a agregar*/
struct elepemon_node* push_elepemon(struct elepemon_node** stack, const char* name)
{
/*Se pide memoria*/
struct elepemon_node* nuevo = malloc(sizeof(struct elepemon_node));
/*Se inicializa el nuevo elepemon con
*los valores por defecto, a exepcion
*del nombre
init_elepemon(&(nuevo->elepemon));*/
nuevo->elepemon.name = strdup(name);
/*Se agrega el nodo al stack*/
nuevo->next = *stack;
*stack = nuevo;
/*Se retorna el puntero al nodo agregado*/
return *stack;
}
/*Funcion que saca un elepemon
*del stack, y libera la memoria*/
void pop_elepemon(struct elepemon_node* stack, const char* name)
{
if (strcmp(stack->elepemon.name,name)==0){
struct elepemon_node *auxiliar = malloc(sizeof(struct elepemon_node));
auxiliar = stack;
stack = auxiliar->next;
//free_elepemon(auxiliar->elepemon);
free(auxiliar);
}else if (strcmp((stack->next)->elepemon.name,name)==0){
struct elepemon_node *auxiliar = malloc(sizeof(struct elepemon_node));
auxiliar = stack->next;
stack->next = auxiliar->next;
//free_elepemon(&(aux->elepemon));
free(auxiliar);
}else{
pop_elepemon(stack->next,name);
}
}
141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
/*Funcion que mueve un elepemon
*de un stack a otro*/
void move_elepemon(struct elepemon_node* stack, struct elepemon_node* stack_P, const char* name)
{
}
/*Funcion que recorre el stack e
*imprime los elepemones en el.*/
char* go_over_stack(struct elepemon_node** stack){
/*Variables auxiliares*/
struct elepemon_node* auxiliar;
int posicion = 1;
/*Mientras el nodo que se
*esta recorriendo apunte a
*un sgte nodo, el ciclo for
*sigue*/
for(auxiliar = *stack;auxiliar != 0;auxiliar = auxiliar->next){
printf("\t %d. %s\n",posicion,auxiliar->elepemon.name);
posicion++;
}
}
/*Funcion que retorna un elepemon
*del stack a partir del nombre*/
struct ELEPEMON* get_elepemon(struct elepemon_node* stack, const char* name)
{
/*Si el stack esta vacio
*retornamos NULL */
if(stack_vacio(stack)){
return NULL;
}
/*Si no, procedemos a evaluar
*los nodos del stack*/
else{
if(strcmp(stack->elepemon.name,name)==0){
return &(stack->elepemon);
}else{
get_elepemon(stack->next,name);
}
}
}
/*Funcion que verifica si un elepemon
*ya existe en la pila.
*0 = NO EXISTE
*1 = EXISTE*/
int check_elepemon(struct elepemon_node* stack, const char* name)
{
/*Si el stack esta vacio
*retornamos 0
*/
if(stack_vacio(stack)==1){
return 0;
}
/*Empezamos a recorrer los
*nodos del stack*/
if(strcmp(stack->elepemon.name,name)==0){
return 1;
}else{
check_elepemon(stack->next,name);
}
}
/*Funcion que carga elepemones desde el stack
*principal al stack del jugador*/