Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * File: main.c
- * Author: owner
- *
- * Created on 12 de junio de 2015, 12:52 AM
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include<conio.h>
- #include <windows.h>
- #include "juego.h"
- #define N 38
- #define E 20
- #define Factor 2//factor para calcular la cantidad de enemigos
- #define MAX 30
- /*
- * PROCEDIMIENTOS DE ALVARO
- Estos procedimientos fueron creados por Alvaro, asi que no es perra de nadie
- */
- void cargarMonstruosGen(TObject arrMonst [MAX]){
- FILE* archivo;
- char name[30];//le asigno una capacidad maxima a name
- int health,atack,defense,speed,i;
- i=0;//inicializo contador
- archivo=fopen("monstruos.txt","r");//abro el archivo que usare
- if (archivo!=NULL)
- while (fscanf(archivo, "%s %d %d %d %d", name, &health,&atack,&defense,&speed) == 5){ //leo cada registro
- crearMonstruo(&arrMonst[i], name,health,atack, defense, speed); // uso el procedimiento creado por Neil
- //notese que envio el elemtno objeto del arreglo con ampersan para que el procedimiento
- //reciba un puntero a tipo objeto
- i++;//incremento el contador para seguir recorriendo el arreglo
- }
- }
- void cargarPocionesGen(TObject arrPociones[MAX]){
- FILE* archivo;
- char name[30];//le asigno una capacidad maxima a name
- int peso,consumible,i;
- i=0;//inicializo contador
- archivo=fopen("pociones.txt","r");//abro el archivo que usare
- if (archivo!=NULL)
- while (fscanf(archivo, "%s %d %d", name, &peso,&consumible) == 3){//leo cada registro
- crearConsumible(&arrPociones[i],name,peso,consumible);// uso el procedimiento creado por Neil
- //notese que envio el elemtno objeto del arreglo con ampersan para que el procedimiento
- //reciba un puntero a tipo objeto
- i++;//incremento el contador para seguir recorriendo el arreglo
- }
- }
- void cargarArmasGen(TObject arrArmas[MAX]){
- FILE* archivo;
- char name[30]; //le asigno una capacidad maxima a name
- int peso,atack,defense,speed,i;
- i=0;//inicializo contador
- archivo=fopen("armas.txt","r");//abro el archivo que usare
- if (archivo!=NULL)
- while (fscanf(archivo, "%s %d %d %d %d", name, &peso,&atack,&defense,&speed) == 5){//leo cada registro
- crearArma(&arrArmas[i],name,peso,atack,defense,speed);
- /*
- uso el procedimiento creado por Neil
- notese que envio el elemetno objeto del arreglo con ampersan para que el procedimiento
- reciba un puntero a tipo objeto
- */
- i++;//incremento el contador para seguir recorriendo el arreglo
- }
- }
- /////////////////////////////FIN DE PROCEDIMIENTOS DE ALVARO/////////////////////////////////
- void gotoxy(int x,int y){
- HANDLE hcon;
- hcon = GetStdHandle(STD_OUTPUT_HANDLE);
- COORD dwPos;
- dwPos.X = x;
- dwPos.Y= y;
- SetConsoleCursorPosition(hcon,dwPos);
- }
- void actualizarItem(TObject *hero){ //actualiza todos los items (armas) que el heroe tiene equipado
- TNodo *ptrnodo; //degrada las armas para que se vuelvan inservibles
- ptrnodo = hero->hero->cinturon->head; //apunta al primer nodo del cinturon
- int i;
- for(i = 1;i <= hero->hero->cinturon->max; i++){
- if(ptrnodo->elemento != NULL && ptrnodo->elemento->id == 1){ //solo cuando es un arma y el elemnto no es null
- if(ptrnodo->elemento->arma->atack > 0){
- ptrnodo->elemento->arma->atack = ptrnodo->elemento->arma->atack -3;
- } else ptrnodo->elemento->arma->atack = 0;
- if(ptrnodo->elemento->arma->defense > 0){
- ptrnodo->elemento->arma->defense = ptrnodo->elemento->arma->defense -3;
- } else ptrnodo->elemento->arma->defense = 0;
- if(ptrnodo->elemento->arma->speed > 0){
- ptrnodo->elemento->arma->speed = ptrnodo->elemento->arma->speed -3;
- } else ptrnodo->elemento->arma->speed = 0;
- ptrnodo = ptrnodo->sig; //avanza al siguiente nodo
- }else ptrnodo = ptrnodo->sig;
- }
- }
- void actualizarHeroe(TObject *hero){ //segun lo que lleve el heroe se actualiza los stats del heroe
- TNodo *ptrnodo;
- ptrnodo = hero->hero->cinturon->head; //apunta al primer nodo del cinturon
- int i;
- for(i = 1;i <= hero->hero->cinturon->max; i++){
- if(ptrnodo->elemento != NULL && ptrnodo->elemento->id == 1){ //solo cuando es un arma y el elemnto no es null
- hero->hero->atack = hero->hero->atack + ptrnodo->elemento->arma->atack;
- hero->hero->defense = hero->hero->defense + ptrnodo->elemento->arma->defense;
- hero->hero->speed = hero->hero->speed + ptrnodo->elemento->arma->speed;
- ptrnodo = ptrnodo->sig; //avanza al siguiente nodo
- } else ptrnodo = ptrnodo->sig;
- }
- }
- void refrescarHeroe(TObject *hero){ //se actulaiza el heroe a su condicion original sin items
- TNodo *ptrnodo;
- ptrnodo = hero->hero->cinturon->head; //apunta al primer nodo del cinturon
- int i;
- for(i = 1;i <= hero->hero->cinturon->max; i++){
- if(ptrnodo->elemento != NULL && ptrnodo->elemento->id == 1){ //solo cuando es un arma y el elemnto no es null
- hero->hero->atack = hero->hero->atack - ptrnodo->elemento->arma->atack;
- hero->hero->defense = hero->hero->defense - ptrnodo->elemento->arma->defense;
- hero->hero->speed = hero->hero->speed - ptrnodo->elemento->arma->speed;
- ptrnodo = ptrnodo->sig; //avanza al siguiente nodo
- } else ptrnodo = ptrnodo->sig;
- }
- } //hace lo contrario a actualizarHeroe
- int usarPocion (TObject *hero, TItem *pocion){ //usa la pocion y destruye el item, recibe un item sacado con desapilar item o quitarcinturon
- if (pocion->id == 2){ //verifica si de verdad es una pocion
- hero->hero->health = hero->hero->health + pocion->consumible->consumible;
- if(hero->hero->health > hero->hero->healthMax) hero->hero->health = hero->hero->healthMax;
- TObject *poc = malloc(sizeof(TObject));
- poc->item = pocion;
- eliminarItem(poc); //esto fue estupidamente redundante
- free(poc);
- return 1; //tuvo exito
- }else{
- return 0; //no es una pocion
- }
- }
- void moverHeroe(int i,int j){//estos deben ser pasado como punteros a enteros
- //cambio de movimiento
- //cabeza
- gotoxy(i,j);
- printf("%c",254);
- //brazos
- gotoxy(i-1,j+1);
- printf("%c",200);
- gotoxy(i,j+1);
- printf("%c",177);
- gotoxy(i+1,j+1);
- printf("%c",188);
- //piernas
- gotoxy(i,j+2);
- printf("%c",186);
- //elimianr el anterior
- i=i-4;
- //cabeza
- gotoxy(i,j);
- printf(" ");
- //brazos
- gotoxy(i-1,j+1);
- printf(" ");
- gotoxy(i,j+1);
- printf(" ");
- gotoxy(i+1,j+1);
- printf(" ");
- //piernas
- gotoxy(i,j+2);
- printf(" ");
- }
- void entrarMenu(TObject *hero){
- int opc = 0;
- char c;
- printf(" /////////////////////MENU///////////////////// \n");
- while (opc != 1){
- printf("¿que deseas hacer? \n" );
- printf("1. usar a la mochila \n" );
- printf("2. usar cinturon \n" );
- printf("3. EXIT \n" );
- c = getch();
- if(c == '1'){ //cambio de pantalla
- char c1 = '5';
- while(c1 != 3){
- printf(" /////////////////////MENU///////////////////// \n");
- printf("¿que quieres hacer con la mochila? \n" );
- printf("1. mover objeto al cinturon \n" );
- printf("2. eliminar objeto de mochila \n");
- printf("3. volver al menu anterior \n");
- c1 = getch(); // si c1 = 3 termina
- if(c1 == '1'){ //actualiza la pantalla
- int pos = 11;
- int verif = 2;
- TItem *ptrItem;
- ptrItem = desapilarItem(hero->hero->mochila);
- while (verif!=1 && pos != 0){
- printf(" /////////////////////MENU///////////////////// \n");
- printf("¿en que posicion del cinturon quieres guardar el item? \n");
- printf("ingrese cero para volver... \n");
- scanf("%d",&pos);
- verif = agregarCinturon(hero->hero->cinturon,ptrItem, pos);
- if(verif==0 && pos != 0)printf("no es posible agregar en este espacio \n");
- if( pos == 0)apilarItem(hero->hero->mochila, ptrItem); //para cuando no se hace nada
- }
- if(verif == 1 || pos == 0) c1='3'; // para salir
- }
- if(c1 == '2'){ //actualiza la pantalla
- TItem *ptrItem;
- TObject *ptrObj;
- ptrItem = desapilarItem(hero->hero->mochila);
- if(ptrItem!=NULL){
- ptrObj->id = 3;
- ptrObj->hero= NULL;
- ptrObj->monstruo = NULL;
- ptrObj->item = ptrItem;
- eliminarItem(ptrObj);
- }
- if (ptrItem==NULL) printf("no hay nada que eliminar");
- else printf("se elimino el item!!");
- c1='3';
- }
- }
- }
- if(c == '2'){//actuaizar pantalla
- char c2 = '6';
- while(c2 != '5'){
- printf(" /////////////////////MENU///////////////////// \n");
- printf("¿que quieres hacer en el cinturon? \n" );
- printf("1. mover objeto a otro espacio en el cintron \n" );
- printf("2. guardar item a la mochila \n");
- printf("3. eliminar del cinturon \n");
- printf("4. usar pocion desde cinturon \n");
- printf("5. volver al menu anterior... \n");
- c2 = getch();
- if(c2=='1'){ ///actualizar pantalla
- int pos1;
- int pos2;
- while(1){
- printf(" /////////////////////MENU///////////////////// \n");
- printf("para salir ingrese cero \n" );
- printf("Ingrese posicion del item que quiere mover \n" );
- scanf("%d",&pos1);
- if(pos1==0)break;
- printf("Ingrese la posicion destino \n" );
- scanf("%d",&pos2);
- if(pos2==0)break;
- TItem *ptrItem;
- ptrItem = quitarCinturon(hero->hero->cinturon, pos1);
- int verif = agregarCinturon(hero->hero->cinturon,ptrItem,pos2) ;
- if(verif == 0){
- agregarCinturon(hero->hero->cinturon,ptrItem,pos1) ;
- printf("Ingrese posiciones validas, puede que no estes considerando la capacidad \n");
- //borrar la pantalla
- }
- else {
- break;
- }
- }///borrar pantalla actual
- (c2='5');
- }
- if(c2=='2'){ //actualizar pantalla
- while(1){
- printf(" /////////////////////MENU///////////////////// \n");
- printf("para salir ingrese cero \n" );
- printf("ingrese la posicion del item a guardar en la mochila \n" );
- TItem *ptrItem;
- int pos1;
- scanf("%d",&pos1);
- if(pos1==0)break;
- ptrItem = quitarCinturon(hero->hero->cinturon, pos1);
- if(ptrItem != NULL){
- apilarItem(hero->hero->mochila, ptrItem);
- //actualizar pantalla
- printf("movido exitosamente \n");
- //borrar pantalla
- break;
- }else{//actializar pantalla
- agregarCinturon(hero->hero->cinturon,ptrItem,pos1);
- printf("ingresa una posicion correcta mierda!! \n");
- }
- }
- (c2='5');
- }
- if(c2=='3'){ //actualizar pantalla
- while(1){
- printf(" /////////////////////MENU///////////////////// \n");
- printf("para salir ingrese cero \n" );
- printf("Ingrese la posicion del item que quiere eliminar \n" );
- TItem *ptrItem;
- int pos1;
- scanf("%d",&pos1);
- if(pos1==0)break;
- ptrItem = quitarCinturon(hero->hero->cinturon, pos1);
- if(ptrItem != NULL){ //actualizar pantalla
- TObject *ptrObj;
- ptrObj->id = 3;
- ptrObj->hero= NULL;
- ptrObj->monstruo = NULL;
- ptrObj->item = ptrItem;
- eliminarItem(ptrObj);
- printf("se elimino correctamente \n");
- break;
- //borrar pantalla
- }else{
- agregarCinturon(hero->hero->cinturon,ptrItem,pos1);
- printf("aqui no hay nada, ingresa de nuevo la posicion \n");
- }
- }
- (c2='5');
- }
- if(c2=='4'){ //actualizar pantalla
- while(1){
- printf(" /////////////////////MENU///////////////////// \n");
- printf("para salir ingrese cero \n" );
- printf("Ingrese la posicion de la pocion en el cinturon \n" );
- TItem *ptrItem;
- int pos1;
- scanf("%d",&pos1);
- if(pos1==0)break;
- ptrItem = quitarCinturon(hero->hero->cinturon, pos1);
- if(ptrItem != NULL && ptrItem->id == 2){ //si es una pocion
- //actualizar pantalla
- usarPocion (hero, ptrItem);
- printf("a que eso te sienta bien \n");
- //borrar pantalla
- break;
- }else{
- //actualizar pantalla
- agregarCinturon(hero->hero->cinturon,ptrItem,pos1);
- printf("eso no es un pocion!! \n");
- //borrar pantalla
- }
- }
- }
- }
- }
- if(c == 3) opc = 1; //sale del menu
- }
- }
- void pintar(char nombre[],int nivel,int *animacion){
- int i;
- gotoxy(0,0);
- printf(" JUEGO DE AVENTURA \n");
- printf("Nombre del Jugador: %s",nombre);
- printf(" Nivel :%d\n",nivel);
- //Lineas horizontales
- for (i=2;i<78;i++){
- gotoxy(i,3);
- printf("%c",205);
- gotoxy(i,23);
- printf("%c",205);
- }
- //Lineas Verticales
- for (i=4;i<23;i++){
- gotoxy(2,i);
- printf("%c",186);
- gotoxy(77,i);
- printf("%c",186);
- }
- //Esquinas
- gotoxy(2,3); printf("%c",201);
- gotoxy(2,23); printf("%c",200);
- gotoxy(77,3); printf("%c",187);
- gotoxy(77,23); printf("%c",188);
- //Pasto
- for (i=3;i<77;i++){
- gotoxy(i,21);
- printf("%c",176);
- gotoxy(i,22);
- printf("%c",177);
- }
- //Nubes
- int n; i=7;
- for (n=20;n<26;n++){
- gotoxy(n,i);
- printf("%c",64);
- gotoxy(n,i+1);
- printf("%c",64);
- gotoxy(n,i+2);
- printf("%c",64);
- }
- for (n=20+20;n<26+20;n++){
- gotoxy(n,i);
- printf("%c",64);
- gotoxy(n,i+1);
- printf("%c",64);
- gotoxy(n,i+2);
- printf("%c",64);
- }
- //arbol
- int k,a;
- if (*animacion==0){
- for (k=60;k<67;k++){
- gotoxy(k,15);
- printf("%c",177);
- gotoxy(k,16);
- printf("%c",177);
- gotoxy(k,17);
- printf("%c",177);
- if (k==62 || k==63 || k==64){
- gotoxy(k,18);
- printf("%c",186);
- gotoxy(k,19);
- printf("%c",186);
- gotoxy(k,20);
- printf("%c",186);
- }
- }
- }else if ((*animacion)<3){
- srand(time(NULL));//randomize
- int arbol=176,tronco=179;
- for(a=0;a<=(*animacion);a++){
- for (k=60-a*10;k<67-a*10;k++){
- gotoxy(k,15);
- printf("%c",arbol);//178,177,176
- gotoxy(k,16);
- printf("%c",arbol);
- gotoxy(k,17);
- printf("%c",arbol);
- if (k==(62-a*10) || k==(63-a*10) || k==(64-a*10)){
- gotoxy(k,18);
- printf("%c",tronco);//186,240,169,179
- gotoxy(k,19);
- printf("%c",tronco);
- gotoxy(k,20);
- printf("%c",tronco);
- }
- }
- int t[4]={240,169,179,186};
- int r=rand() % 4;
- tronco=t[r];
- if (arbol==178 ) arbol=176;
- else arbol++;
- }
- /*if (*animacion!=0)
- (*animacion)=0;*/
- } else if ((*animacion)>=3 && (*animacion)<5 ){
- int t=16,p,b=30,g;
- //cueva
- for (g=0;g<2;g++){
- int cont=1;
- gotoxy(b,t);
- printf("%c",176);
- for (p=t;p<22;p++){
- gotoxy(b-cont,p);
- printf("%c",176);
- gotoxy(b+cont,p);
- printf("%c",176);
- cont++;
- }
- b=b+40;
- }
- //arbol
- for (k=50;k<57;k++){
- gotoxy(k,15);
- printf("%c",177);
- gotoxy(k,16);
- printf("%c",177);
- gotoxy(k,17);
- printf("%c",177);
- if (k==52 || k==53 || k==54){
- gotoxy(k,18);
- printf("%c",186);
- gotoxy(k,19);
- printf("%c",186);
- gotoxy(k,20);
- printf("%c",186);
- }
- }
- }
- else if (*animacion==5){
- (*animacion)=0;
- //aves
- //203,40,41
- gotoxy (60,6);
- printf("%c",157);
- gotoxy(54,10);
- printf("%c",157);
- gotoxy(68,8);
- printf("%c",157);
- gotoxy(60,15);
- printf("%c",157);
- gotoxy(60,12);
- printf("%c",157);
- gotoxy(55,14);
- printf("%c",157);
- gotoxy(65,13);
- printf("%c",157);
- }
- }
- void eliminarMapa(TObject mapa[E]){
- int i;
- for (i=0;i<E;i++){
- free(mapa[i].hero);
- free(mapa[i].item);
- free(mapa[i].monstruo);
- }
- }
- ///colocarObjeto soporta cualquier arreglo por lo que se tiene que colocar bien los arreglos correspondiente al objeto
- int colocarObjeto(TObject *objeto,int nivel,TObject arr[]){ /// desde el arreglo cargado desde
- //los archivos se seleccinan aleatoriamente dependiendo el nivel
- int lmtInf, lmtSup ;
- int random;
- if(objeto->id != 0) return 0; //esta lleno el espacio y no se puede agregar nada
- lmtInf = (nivel-2)*3;
- if (lmtInf < 0) {
- lmtInf = 0;
- lmtSup = 2;
- } else lmtSup = lmtInf + 5; /// se selecciona en nivel 1 del 0 al 3, nivel 2 del 0 a 5
- // nivel 3 del 3 al 8 , nivel 4 del 6 a 11 , nivel 5 del 9 a 14
- random = lmtInf + (rand() % (lmtSup - lmtInf));
- objeto = arr[random];
- return 1;
- }
- void crearMapasAleatorios(TObject mapaxnivel[E],int nivel,char heroe[],TObject* Hero ){
- srand(time(NULL));//randomize
- int e,p,o,pos;//enemigos y posiciones
- TObject *mapa[E] = malloc((E+1)*sizeof(TObject));//E cantidad de espacios en el mapa, creando un mapa con punteros a objetos en cada posicion
- int i;
- for(i=0;i<E;i++){
- if (i==0) {
- crearHeroe(Hero,heroe);//El heroe debe estar en el primer bloque //correguir
- mapa[i]= Hero;
- }else {
- mapa[i]->id=0; //cada parte del mapa lo inicializamos como vacio
- mapa[i]->hero=NULL;
- mapa[i]->item=NULL;
- mapa[i]->monstruo=NULL;
- }
- }
- /// soporta solo hasta 5 niveles
- //Cantidad de enemigos
- e=(rand() % 2*Factor) + 2*nivel; // aumentar ratio de aparcion
- //Posiones
- p = (10 - nivel) + (rand() % Factor) ; //disminuye el ratio de aparicion ,
- //colocar enemigos
- // cantidad de armas
- o = (10 - nivel) - (rand() % 2*Factor);
- ////////////////////////////////
- TObject arrMonst[MAX];
- cargarMonstruosGen(arrMonst);
- int j=0; int verif;
- while (j<e){//aqui coloco a los mounstruos en el mapa
- pos= (rand() % (E-2) ) + 2 ;
- verif = colocarObjeto(mapa[pos],nivel,arrMonst); // si existe lo carga a mapa[pos]]
- if(verif==1)j++; //si verif 0 entonces no se coloco satisfactoriamente y se vuelve a ha
- // invocar el mismo bucle
- }
- j=0;
- //colocar posiones
- TObject arrPociones[MAX];//Anderson puso esto porque me salia error
- cargarPocionesGen(arrPociones);
- while (j<p){// coloco las pociones en el mapa
- pos= (rand() % (E-2) ) + 2 ;
- verif = colocarObjeto(mapa[pos],nivel,arrPociones);//sacar del archivo
- if(verif==1)j++;
- }
- // agregamos items
- TObject arrArmas[MAX];//Anderson puso esto porque me salia error
- cargarArmasGen(arrArmas);
- while (j<o){//coloca las armas en el mapa
- pos= (rand() % (E-2) ) + 2 ;
- verif = colocarObjeto(mapa[pos],nivel,arrArmas);//sacar del archivo
- if(verif==1)j++;
- }
- //generamos el mapa
- i=0;
- for (i=0;i<E;i++){
- mapaxnivel[i].id = mapa[i]->id;
- mapaxnivel[i].hero = mapa[i]->hero;
- mapaxnivel[i].item = mapa[i]->item;
- mapaxnivel[i].monstruo = mapa[i]->monstruo;
- }
- }
- void estoEsGuerra(THero* hero,TMonst* mons,int* est ){
- int turno,pos;
- int opcAcc;
- int opcPoci;
- TItem* item;
- char C;
- //graficamos los dibujitos del heroe y el moustruo
- // graficaCabecera(hero,mons);//grafica la vida de los contrincates y sus demas skills
- if (hero->speed > mons->speed)
- turno=0;//pares para que ataque heroe
- else
- turno=1;//impares para que ataque monstruo
- //habra un menu en el que te saldran las opciones
- while(hero->health > 0 && mons->health>0 ){
- if (turno % 2==0){
- //colocar el MENU de seleccion entre atacar y curarse
- printf("Selecciones que accion toma");
- C=getch();
- if (C=='1'){//eligio atacar
- //degenera la vida del monstruo
- mons->health=( mons->health )-((hero->atack - mons->defense)*(hero->atack >= mons->defense)+5*(hero->atack < mons->defense));
- //actualiza graficamente la vida del monstruo
- }
- else if (C=='2'){//elijo seleccionar item
- //siempre tendremos la leyenda disponible para visualizar los numeros al que corresponden ciertas pociones
- printf("Seleccione la pocion que necesite");//esto ira en el cuadro de texto
- C=getch();
- //limpiar el cuadro de texto
- pos=int(C-48);
- while(1){
- item=quitarCinturon(hero->cinturon, pos);//quitamos al item de la correa
- if (item==NULL || item->id==1)
- printf("No seas pendejo, elije una pocion por favor");
- else{
- //limpiar cuadro de texto
- break;
- }
- }
- usarPocion (TObject *hero, TItem *item);// con esto actualizamos al heroe, enviamos un item que es de tipo pocion
- }
- }
- else{
- hero->health=( hero->health )-((mons->atack - hero->defense)*(mons->atack >= hero->defense)+5*(mons->atack < hero->defense));
- };
- turno++;
- }
- if (hero->health==0)//pierde la guerra
- //en el cuadro de mensaje colocamos has muerto
- *est=0;
- else{//aca gana la guerra
- //en el cuadro de mensaje colocamos has ganado
- refrescarHeroe(hero);
- actualizarItem(hero);
- actualizarHeroe(hero);
- }
- //en el cuadro de mensaje colocamos "presiona enter"
- C=getch;
- if (C==13){
- //borra el cuadro de mensaje
- break;// solo hemos colocado esto temporalmente para queno haya error
- }
- }
- void recogerItems(TObject* hero,TObject* objectnew){
- char C;
- //gotoxy a pantalla de mensaje de texto
- printf("Has encontrado un item, que perra que eres!!!");
- if (objectnew->item->id==1){
- printf("(Es un arma)");
- printf("Caracteristicas:\n");
- printf("Nombre: ",objectnew->item->name);
- printf("Peso: ",objectnew->item->peso);
- printf("Ataque:",objectnew->item->arma->atack);
- printf("Defensa:",objectnew->item->arma->defense);
- printf("Velocidad:",objectnew->item->arma->speed);
- }
- else{
- printf("(Es una pocion)");
- printf("Caracteristicas:\n");
- printf("Nombre: ",objectnew->item->name);
- printf("Peso: ",objectnew->item->peso);
- printf("Curabilidad:",objectnew->item->consumible->consumible);
- }
- printf("\n\n\n");
- while(1){
- //imprime esto debajo de las caracteristicas de item encontrado
- printf("Opciones:");
- printf("1. Guardar\n");
- printf("2. Salir \n");
- C=getch();
- if (C=='1'){
- //borra lo escrito en pantalla de texto a partir de Opciones
- printf("Elegir lugar en el que se va a guardar:\n");
- printf("1. Mochila\n");
- printf("2. Correa\n");
- printf("3. Volver\n");
- C=getch();
- if (C=='1'){
- void apilarItem(hero->hero->mochila, objectnew.item);
- //borro todo
- printf("El item %s fue guardado en la mochila",objectnew.item->name);
- printf("\nPresiona Enter para volver al juego");
- C=getch();
- if (C==13){
- //borra el cuadro de mensajes
- //regresa a la pantalla principal del juego
- }
- }
- else if (C=='2'){
- int pos;
- //borro la pantalla de mensaje de texto apartir de Elegir en el lugar que se va a guardar
- printf("Ingrese la posicion de la mochila a la que desee ingresar");
- scanf("%d",&pos);
- while(1){
- if (agregarCinturon(hero->hero->cinturon,objectnew->item,pos )){
- objectnew->id=0;
- objectnew->NULL;
- break;
- }
- else
- printf("Ingrese una nueva posicion:");scanf("%d",&pos);
- }
- printf("El item %s fue guardado en la correa",objectnew.item->name);
- printf("\nPresiona Enter para volver al juego");
- C=getch();
- if (C==13){
- //borra el cuadro de mensajes
- //regresa a la pantalla principal del juego
- }
- }
- else if (C=='3'){
- //borra el mensaje actual desde "Elegir lugar en el que se va a guardar"
- }
- }
- else if (C=='2'){
- //borramos al item de la posicion
- objectnew->id=0;
- objectnew->NULL;
- //borra el cuadro de mensajes
- //regresa a la pantalla principal del juego
- break;
- }
- }
- // cuando encontramos un item, lo comunicamos por medio del cuadro de texto
- // ahi generamos un menu en el cuadro de texto como lo siguiente:
- ///////////Has encontrado un item, que perra que eres!!!/////////////
- //Imprimir caracteristicas de item encontrado
- //Opciones:
- //1.Guardar
- //2.Salir
- //Si elige Guardar, borra la pantalla del cuadro de texto, y escribe a donde lo quiere guardar:
- //1.1 En la mochila
- //1.2 En la correa
- //Si se guarda en la mochila lo hace altoque y elimina la pantalla de menu y manda un mensaje de objeto guardado
- //Si se guarda en la correa, te manda en la pantalla un texto "Ingrese posicion a guardar
- //si no se puede guardar te volvera a salir "ingrese la posicion a la que desee guardar"
- //1.3 Volver al menu anterior, borra lo que este en cuadro de texto y escribe el menu anterior gracias al While
- //Si elige salir borra lo que este en el cuadro de texto
- //elige entre tres opciones para cargar en la mochila, en la correa o no hacer nada
- // en caso de que no quiera hacer nada se tendra que eliminar el item de esa posicion
- //para que podamos colorcar el puntero al heroe que pisara esa nueva posicion
- //y se prepara para simplemente pisar ese lugar donde estaba el item, borrando el item de la posicion
- }
- int main(int argc, char** argv) {
- /*
- Debemos tomar en cuenta que por cada ves que salgamos de batallas o salgamos de modos de seleccion de mochila debemos
- * volver a representar el mapa donde se quedo, ademas contaremos con un area de cuadro de texto que brindara
- * informacion oportuna de acuerdo a lo que esta sucediendo
- */
- TObject mapa[E];// es un arreglo de estructuras tipo objetos con maximo E
- int r;
- for (r=0;r<E;r++){//aca empieza a reservar espacio para los apuntadores de cada elemento del arreglo ya que pueden ir cualquiera de los 3
- mapa[r].hero=malloc(sizeof(THero));
- mapa[r].item=malloc(sizeof(TItem));
- mapa[r].monstruo=malloc(sizeof(TMonst));
- }
- TObject *Hero = malloc(sizeof(TObject));
- char C;
- char nombre[N];
- int i=4,j=18,nivel=1;//comenzamos en el nivel 1
- int animacion=0;//Le da animacion al campo
- printf("Ingrese el nombre del jugador :");
- gets(nombre);//obtenemos el nombre
- system("cls");
- //pintar(nombre,nivel);
- gotoxy(i,j);
- moverHeroe(i,j);
- int estadoJuego=1; //1 vivo 0 muerto
- int mov=0;//movimiento del arreglo a medida que el jugador se mueve
- crearMapasAleatorios(mapa,nivel,nombre,Hero);//iniciamos el juego
- pintar(nombre,nivel,&animacion);
- while (estadoJuego){
- //pintar(nombre,nivel,&animacion); //se nota un poco la impresion pero no debria notarse
- C = getch();
- //system("cls");
- if (C==77){//DERECHA
- mov++;
- i=i+4;//para moverse mas
- //hemos movido el mu;equito a la nueva posicion a la que entraria, pero aun no hemos hecho la modificacion
- // a nivel de punteros, eso esta bien!!!
- if (i<76){
- gotoxy(i,j);
- moverHeroe(i,j);
- }else {
- animacion++;
- gotoxy(4,j);
- moverHeroe(4,j);
- i=4;
- /*gotoxy(75,j);
- moverHeroe(75,j);
- i=75;*/
- }
- if (mov != E){
- if (mapa[mov].id==0){//vaci0
- estadoJuego=1;//no hace nada
- C=getch();
- if (C==32)
- entrarMenu(Hero);
- }else if (mapa[mov].id==2){//Enemigo
- //Manda mensaje a la pantalla auxiliar que empezara el dududuelo,se usa gotoxy
- estoEsGuerra(Hero,mapa[mov].monstruo,&estadoJuego);
- eliminarMonstruo(mapa[mov]);// elimino al monstruo del mapa
- // aqui volvemos a mostrar el mapa
- }else if (mapa[mov].id==3){//Consumible o Arma
- recogerItems(Hero,&mapa[mov]);
- }
- if (estadoJuego){//Si continua y todavia no pierde
- mapa[mov].id=mapa[mov-1].id;//Nos movemos
- mapa[mov].hero=mapa[mov-1].hero;
- /*
- * Creo que estos 2 no deberian estarse moviendo
- mapa[mov].item=mapa[mov-1].item;
- mapa[mov].monstruo=mapa[mov-1].monstruo;
- */ //anteriormente solo estaba el heroe por lo que solo ponemos en nulo lo anterior
- mapa[mov-1].id=0;//el casillero anterior queda vacio
- mapa[mov-1].hero=NULL;
- //
- }else{
- //eliminarMapa(mapa);
- system("cls");
- gotoxy(36,12);
- printf("GAME OVER\n");
- gotoxy(36,15);
- printf("Deseas jugar de nuevo ? (S/N)");
- char g=getchar();
- if (g=='s' || g=='S'){
- estadoJuego=1;
- nivel=1;
- mov=0;
- }else {
- estadoJuego=0;//fin del juego
- }
- }
- }else {
- estadoJuego=1;
- nivel++;
- //eliminarMapa(mapa);
- mov=0;
- system("cls");
- gotoxy(36,12);
- printf("Nivel %d\n",nivel);
- pintar(nombre,nivel,&animacion);//Si pongo la impresion aca , cuando el personaje pasa se borra un poco el arbol pqeo el movimiento es mejor
- i=4;
- j=18;
- //crearMapasAleatorios(&mapa[E],nivel,nombre);//iniciamos el juego
- }
- } /*else
- if (C==75) {//IZQUIERDA
- i=i-2;//para moverse mas
- if (i>3){
- gotoxy(i,j);
- moverHeroe(i,j);
- }else {
- gotoxy(4,j);
- moverHeroe(4,j);
- i=4;
- }
- } else
- if (C==72) {//ARRIBA
- j=j-2;//para moverse mas
- if (j>3){
- gotoxy(i,j);
- moverHeroe(i,j);
- }else {
- gotoxy(i,4);
- moverHeroe(i,4);
- j=4;
- }
- }else
- if (C==80) {//ABAJO
- j=j+2;//para moverse mas
- if (j<19){
- gotoxy(i,j);
- moverHeroe(i,j);
- }else {
- gotoxy(i,18);
- moverHeroe(i,18);
- j=18;
- }
- }*/ else if (C==27){
- eliminarMapa(mapa);
- system("cls");
- break;
- }
- else {
- gotoxy(i,j);
- moverHeroe(i,j);
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement