main_stack.c 11.65 KiB
#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*/