Ir al contenido

publicidad
publicidad

Foto

mi primer juego: mastermind [c++, consola][juego cutre]


Este tema ha sido archivado. Esto significa que no puedes responder en este tema.
108 respuestas en este tema

#91

Escrito 28 abril 2009 - 21:37

Haz esto:

[code:1]
char tecla;
do
{
tecla = getch();
switch (tecla)
{
[/code]

y al final while(tecla !='p')

  • davidlie

  • TERRESTRIS VERITAS

  • vida restante: 100%
  • Registrado: 25 feb 2007
  • Mensajes: 26.266
#92

Escrito 28 abril 2009 - 22:00

sigue pasando :S
relato mejor las cosas que pasan
si pulso S cuando llega al borde de abajo se mueve a la derecha asta que se topa con la pared de la derecha, hay se queda subiendo una unidad y bajando otra asta que se suelta
si pulso A fuciona correctamente
si pulso D va hacia la derecha asta que se topa contra la pared, después sube hacia arriba asta que se topa con la pared de arriba y tambalea una unidad a la izquierda otra a la derecha
si pulso w suvue hacia arriba cuando se choca contra la pared de arriba se va hacia la izquierda, cuando choca con la pared de la izquierda se queda parado

pd. al que se queja tanto si de evrdad tienes motivos tratalo por pm y no lo escribas donde no se debe


-----------------------------------------------------------------------------
Imagen Enviada
Imagen Enviada
mi dibujo del killzone2 pintando aqui



#93

Escrito 28 abril 2009 - 22:26

Pon los break; fuera de los if

  • davidlie

  • TERRESTRIS VERITAS

  • vida restante: 100%
  • Registrado: 25 feb 2007
  • Mensajes: 26.266
#94

Escrito 28 abril 2009 - 23:08

venga no me jodas pero k tonto doy XD eso lo tengo mas que sabido y no me doy cuenta :S
pd. ahora a que voy? pense en la vida. un bicho cuando lo toques llame a la funcion vida dandole un valor que sera el daño recibido, esta te devolvera un array con 10- el daño trozos representados. el daño logicamente sera siempre entero 1,2,....

-----------------------------------------------------------------------------
Imagen Enviada
Imagen Enviada
mi dibujo del killzone2 pintando aqui



#95

Escrito 29 abril 2009 - 21:57

Unas pequeñas modificaciones:
[code:1]
#include
#include
#include

using namespace std;

#define TRUE 1
#define FALSE 0

char suelo[20][20];

/* comprobar si una posición es accesible */
int esta_abierto(char x,char y)
{
switch (suelo[x][y])
{
case 205:
case 186:
case 153:
case 200:
case 201:
case 187:
case 188:
return FALSE;

default:
return TRUE;
}
}


int main()
{

// a es = b es || c es espacio
char a=205, b=186, c=32, d=64, e=153;

int i;
int j;
for (i = 0; i < 20; i++) //rellenamos el cuadrado
{
suelo[i][0] = a;
suelo[i][19] = a;
suelo[0][i] = b;
suelo[19][i] = b;
}
for (i =1; i < 19; i++) //rellenamos cuados vacios
{
for (j = 1; j < 19; j++)
{
suelo[i][j] = c;
}
}
suelo[0][0]=201; //hacemos las aristas del cuadrado
suelo[0][19]=200;
suelo[19][0]=187;
suelo[19][19]=188;
suelo[10][1]=d; //personaje del juego
suelo[15][10]=e;//enemigo
cout<<"utliza las letras W-S-A-D para moverte, pulsa p para salir";
cout< for (i = 0; i < 20; i++) //representamos el cuadrado
{
for (j = 0; j < 20; j++)
{
cout< }
cout < }
int x=10, y=1; //movimiento del personaje
suelo[x][y]=d;//personaje
suelo[15][10]=e;//enemigo
char tecla;

do
{
tecla = getch();
switch (tecla)
{
case 's':
if(esta_abierto(x,y+1))
{
suelo[x][y+1]=suelo[x][y];
suelo[x][y]=c;
y+=1;
}
break;


case 'd':
if(esta_abierto(x+1,y))
{
suelo[x+1][y]=suelo[x][y];
suelo[x][y]=c;
x+=1;
}
break;

case 'w':
if(esta_abierto(x,y-1))
{
suelo[x][y-1]=suelo[x][y];
suelo[x][y]=c;
y-=1;
}
break;
case 'a':
if(esta_abierto(x-1,y))
{
suelo[x-1][y]=suelo[x][y];
suelo[x][y]=c;
x-=1;
}
break;
}

system("cls");
cout<<"utliza las letras W-S-A-D para moverte, pulsa p para salir"< for (i = 0; i < 20; i++)
{
for (j = 0; j < 20; j++)
{
cout < }
cout < }
}
while(tecla !='p');
system("PAUSE");
return 0;
}
[/code]

  • davidlie

  • TERRESTRIS VERITAS

  • vida restante: 100%
  • Registrado: 25 feb 2007
  • Mensajes: 26.266
#96

Escrito 29 abril 2009 - 22:21

por lo que veo as ehco una funcion afuera con true y false para el movimiento, vale gracias
pero aunque la mia no esta mal y eso es por simple comodidad y facilidad al leer es problema no? lo cambiare gracias ^^


-----------------------------------------------------------------------------
Imagen Enviada
Imagen Enviada
mi dibujo del killzone2 pintando aqui



#97

Escrito 29 abril 2009 - 22:37

En realidad con tu código sólo puedes moverte por casillas de suelo. Al añadir esa función esta_abierto() puedes decidir a través de qué cosas puedes pasar (por ejemplo puedes pasar por encima de objetos o cadáveres), sólo tienes que añadirlos a la función.

También hay que hacer algo con el código que tienes dentro de los ifs. El jugador debe tener unas coordenadas dentro del mapa pero no estar en el mapa (suelo[10][1]=d; //personaje del juego ) . De igual manera el enemigo tampoco debe estar dentro de la tabla del mapa. Al mover al jugador hay que alterar las coordenadas y luego después de dibujar el mapa dibujas al jugador.

El proceso en plan sencillo será así:
dibujas el mapa --> dibujas los objetos --> dibujas monstruos --> dibujas jugador.

El mapa estará en su tabla. Los objetos y monstruos en dos tablas. Y para el jugador tendrías que crear una estructura (o clase).

Hablo de tablas pero es para no complicar las cosas todavía. Si sigues con esto ya hablaremos de estructuras de datos y clases.

  • davidlie

  • TERRESTRIS VERITAS

  • vida restante: 100%
  • Registrado: 25 feb 2007
  • Mensajes: 26.266
#98

Escrito 29 abril 2009 - 22:39

si eso lo entiendo perfectamente es mas lo quiso hacer, pero para dibujar coass encima de otras?? siempre lo ara debajo :S


-----------------------------------------------------------------------------
Imagen Enviada
Imagen Enviada
mi dibujo del killzone2 pintando aqui



  • machakito

  • Adramalech

  • vida restante: 100%
  • Registrado: 25 ago 2007
  • Mensajes: 1.345
#99

Escrito 29 abril 2009 - 23:15

si eso lo entiendo perfectamente es mas lo quiso hacer, pero para dibujar coass encima de otras?? siempre lo ara debajo :S

Tus mensajes cada vez son más crípticos. :?

¿Quién "lo quiso hacer"?. ¿Vas a querer dibujar un objeto encima de otro y que aparezcan ambos?. Al nivel en el que estamos mucho me temo que no lo vas a poder hacer. Lo que te dice Sagitto Abdo es que, en un futuro, deberás mantener diferentes estructuras separadas para el mapa, objetos, etc.

[…]

Hola, Sagitto Abdo.

Estoy de acuerdo contigo en lo que le dices pero creo que, de momento, no deberíamos marearlo mas añadiendo estructuras nuevas (y mucho menos clases). Me parece que es preferible que termine una primera versión simple y funcional, y luego ya le iremos guiando para que mejore el juego.

  • davidlie

  • TERRESTRIS VERITAS

  • vida restante: 100%
  • Registrado: 25 feb 2007
  • Mensajes: 26.266
#100

Escrito 29 abril 2009 - 23:19

si yo creo que mejor :S XD
bueno pues me paso a hacer una funcion de la vida ^^


-----------------------------------------------------------------------------
Imagen Enviada
Imagen Enviada
mi dibujo del killzone2 pintando aqui



  • davidlie

  • TERRESTRIS VERITAS

  • vida restante: 100%
  • Registrado: 25 feb 2007
  • Mensajes: 26.266
#101

Escrito 30 abril 2009 - 16:43

hice una especie de funcion con lod e true y false para la vida aunque creono lo tengo que cambiar. solo esta echo para cuando al muñeco lo pillas de frente, y cuando vas avanzando no se ve la vida(por eso de la tercera opcion ya que con true y false creo que no sirve) cuando te chocas con el muñeco te salta la vida y se rebaja un poco asta llegar a 0. cuando llegas a cero puedes seguir jugando pero ya se ira cambiando


EDITO: ya muestra la vida siempre si te chocas con el enemigo te rebaja un punto y si llegas a 0 de vida se acaba el juego, ahora que ago?

[code:1]#include
#include
#include

using namespace std;

#define TRUE 1
#define FALSE 0

char suelo[20][20];
char vida[10];
int z;
int v=0;
/*comprobar si algo te quita vida*/
int vida_menu(char x, char y)
{
switch (suelo[x][y])
{
case 153:
return TRUE;
default:
return FALSE;
}
}

/* comprobar si una posición es accesible */
int esta_abierto(char x,char y)
{
switch (suelo[x][y])
{
case 205:
case 186:
case 153:
case 200:
case 201:
case 187:
case 188:
return FALSE;
default:
return TRUE;
}
}


int main()
{

//hacemos la barra de vida
char vida[10];
int z;
int v=0;
for(z=0;z<10;z++)
{
vida[z]=178;
}

// a es = b es || c es espacio
char a=205, b=186, c=32, d=64, e=153;
int x=10, y=1; //movimiento del personaje
suelo[x][y]=d;//personaje
suelo[15][10]=e;//enemigo
char tecla;

int i;
int j;
for (i = 0; i < 20; i++) //rellenamos el cuadrado
{
suelo[i][0] = a;
suelo[i][19] = a;
suelo[0][i] = b;
suelo[19][i] = b;
}
for (i =1; i < 19; i++) //rellenamos cuadros vacios
{
for (j = 1; j < 19; j++)
{
suelo[i][j] = c;
}
}
suelo[0][0]=201; //hacemos las aristas del cuadrado
suelo[0][19]=200;
suelo[19][0]=187;
suelo[19][19]=188;
suelo[10][1]=d; //personaje del juego
suelo[15][10]=e;//enemigo
cout<<"utliza las letras W-S-A-D para moverte, pulsa p para salir";
cout< cout<<"VIDA-->";
for(z=0;z<10-v;z++)
{
cout< }
cout< for (i = 0; i < 20; i++) //representamos el cuadrado
{
for (j = 0; j < 20; j++)
{
cout< }
cout < }
//movimiento!
do
{
tecla = getch();
switch (tecla)
{
case 's':
if(esta_abierto(x,y+1))
{
suelo[x][y+1]=suelo[x][y];
suelo[x][y]=c;
y+=1;
}
if(vida_menu(x,y+1))
{
v+=1;
}
break;


case 'd':
if(esta_abierto(x+1,y))
{
suelo[x+1][y]=suelo[x][y];
suelo[x][y]=c;
x+=1;
}
if(vida_menu(x+1,y))
{
v+=1;
}
break;

case 'w':
if(esta_abierto(x,y-1))
{
suelo[x][y-1]=suelo[x][y];
suelo[x][y]=c;
y-=1;
}
if(vida_menu(x,y-1))
{
v+=1;
}
break;
case 'a':
if(esta_abierto(x-1,y))
{
suelo[x-1][y]=suelo[x][y];
suelo[x][y]=c;
x-=1;
}
if(vida_menu(x-1,y))
{
v+=1;
}
break;
}

system("cls");
cout<<"utliza las letras W-S-A-D para moverte, pulsa p para salir"< cout<<"VIDA-->";
for(z=0;z<10-v;z++)
{
cout< }
cout< for (i = 0; i < 20; i++)
{
for (j = 0; j < 20; j++)
{
cout < }
cout < }
if (v==10)
{
system("cls");
cout<<"game over"< system("PAUSE");
return 0;
}
}
while(tecla !='p');

system("PAUSE");
return 0;
} [/code]


-----------------------------------------------------------------------------
Imagen Enviada
Imagen Enviada
mi dibujo del killzone2 pintando aqui



#102

Escrito 30 abril 2009 - 21:31

Pues ahora lo que haces es cambiarlo para hacerlo de otra forma :D

En los juegos tipo Rogue si estás al lado de un enemigo no pasa nada, no te baja la vida. Cuando intentas ocupar su casilla le golpeas y le quitas vida a él. Cuando le toca el turno a él, intentará ocupar tu casilla y entonces te quitará vida a ti.

Ahora piensa un poco cómo puedes hacer eso.

  • davidlie

  • TERRESTRIS VERITAS

  • vida restante: 100%
  • Registrado: 25 feb 2007
  • Mensajes: 26.266
#103

Escrito 30 abril 2009 - 21:39

Pues ahora lo que haces es cambiarlo para hacerlo de otra forma :D

En los juegos tipo Rogue si estás al lado de un enemigo no pasa nada, no te baja la vida. Cuando intentas ocupar su casilla le golpeas y le quitas vida a él. Cuando le toca el turno a él, intentará ocupar tu casilla y entonces te quitará vida a ti.

Ahora piensa un poco cómo puedes hacer eso.


venga no me jodas XD!!!
y como marco la vida del enemigo con una barra al lado que se muestra cuando estas en una casilla ayadtante??
se me ocurre la forma de hacerlo pero loa re mañana ya seguramente!
pd. gracias por todos estos consejos

-----------------------------------------------------------------------------
Imagen Enviada
Imagen Enviada
mi dibujo del killzone2 pintando aqui



  • davidlie

  • TERRESTRIS VERITAS

  • vida restante: 100%
  • Registrado: 25 feb 2007
  • Mensajes: 26.266
#104

Escrito 02 mayo 2009 - 00:47

nueva actualizacion!
ele enemigo tiene vida! se le puede matar! y hay una pocion en el escenario!
pero sigue pasando lo de al estar en una casilla proxima a la tuya ^^
la cosa entre tanto simbolo no hay quien se aclare. sabeis de alguna libreria para pintar?



-----------------------------------------------------------------------------
Imagen Enviada
Imagen Enviada
mi dibujo del killzone2 pintando aqui



  • davidlie

  • TERRESTRIS VERITAS

  • vida restante: 100%
  • Registrado: 25 feb 2007
  • Mensajes: 26.266
#105

Escrito 02 mayo 2009 - 20:28

siento hacer doble post, pero es que sigo actualizando ^^

e incluido llave y puerta ^^
si alguien lo quiere probar que copie pegue y compile ^^

[code:1]#include
#include
#include

using namespace std;

#define TRUE 1
#define FALSE 0

//inicializamos variables que usamos en funciones//

char suelo[20][20];
int puerta(char x, char y)
{
switch (suelo[x][y])
{
case 219:
return TRUE;
default:
return FALSE;
}
}

int llave(char x, char y)
{
switch (suelo[x][y])
{
case 156:
return TRUE;
default:
return FALSE;
}
}
int pociones(char x, char y)
{
switch (suelo[x][y])
{
case 157:
return TRUE;
default:
return FALSE;
}
}
/*comprobar si algo te quita vida*/

int vida_menu(char x, char y)
{
switch (suelo[x][y])
{
case 153:
return TRUE;
default:
return FALSE;
}
}

/* comprobar si una posición es accesible */

int esta_abierto(char x,char y)
{
switch (suelo[x][y])
{
case 205:
case 186:
case 200:
case 153:
case 201:
case 219:
case 187:
case 188:
return FALSE;
default:
return TRUE;
}
}


int main()
{


char vida[10];
char vidaene[10];
int w=0;
int z;
int v=0;


//hacemos la barra de vida
for(z=0;z<10;z++)
{
vida[z]=178;
vidaene[z]=178;
}



// a es = b es || c es espacio d es personaje e es enemigo y d es pocion g // es puerta!
char a=205, b=186, c=32, d=64, e=153, f=157, g=156;
int x=10, y=1; //movimiento del personaje
char tecla;

int i;
int j;



//rellenamos el cuadrado
for (i = 0; i < 20; i++)
{
suelo[i][0] = a;
suelo[i][19] = a;
suelo[0][i] = b;
suelo[19][i] = b;
}


//rellenamos cuadros vacios
for (i =1; i < 19; i++)
{
for (j = 1; j < 19; j++)
{
suelo[i][j] = c;
}
}


//hacemos las aristas del cuadrado
suelo[0][0]=201;
suelo[0][19]=200;
suelo[19][0]=187;
suelo[19][19]=188;
suelo[2][16]=187;
suelo[2][17]=b;
suelo[2][18]=b;
suelo[2][19]=202;
suelo[0][16]=204;
suelo[1][16]=219;

suelo[x][y]=d;//personaje
suelo[15][10]=e;//enemigo
suelo[10][1]=d; //personaje del juego
suelo[15][10]=e;//enemigo
suelo[1][18]=f;//pocion
suelo[6][7]=g; //llave


cout<<"utliza las letras W-S-A-D para moverte, pulsa p para salir";
cout<


//representamos nuestra vida!
cout<<"VIDA-->";
for(z=0;z<10-v;z++)
{
cout< }
cout<


//representamos el cuadrado
for (i = 0; i < 20; i++)
{
for (j = 0; j < 20; j++)
{
cout< }
cout < }


//representamos la vida del enemigo!
if(vida_menu(x,y+1))
{
cout <<"vida del enemigo";
for(z=0;z<5-v;z++)
{
cout< }
cout<
}


//movimiento y vida!
do
{
tecla = getch();
switch (tecla)
{
case 's':
if(esta_abierto(x,y+1))
{
suelo[x][y+1]=suelo[x][y];
suelo[x][y]=c;
y+=1;
}
if(vida_menu(x,y+1))
{
v+=1;
w+=1;

}
if(pociones(x,y+1))
{
suelo[1][18]=c;
v=0;
cout <<"as recivido una pocion"< system("pause");
}
if(llave(x,y+1))
{
suelo[6][7]=c;

cout <<"as recivido una llave"< system("pause");

}
if(puerta(x,y+1))
{
if (suelo[6][7]==c)
{
suelo[1][16]=c;
}

}
break;


case 'd':
if(esta_abierto(x+1,y))
{
suelo[x+1][y]=suelo[x][y];
suelo[x][y]=c;
x+=1;
}
if(vida_menu(x+1,y))
{
v+=1;
}
if(llave(x+1,y))
{
suelo[6][7]=c;
cout <<"as recivido una llave"< system("pause");

}
break;

case 'w':
if(esta_abierto(x,y-1))
{
suelo[x][y-1]=suelo[x][y];
suelo[x][y]=c;
y-=1;
}
if(vida_menu(x,y-1))
{
v+=1;
}
if(llave(x,y-1))
{
suelo[6][7]=c;
cout <<"as recivido una llave"< system("pause");

}
break;
case 'a':
if(esta_abierto(x-1,y))
{
suelo[x-1][y]=suelo[x][y];
suelo[x][y]=c;
x-=1;
}
if(vida_menu(x-1,y))
{
v+=1;
}
if(llave(x-1,y))
{
suelo[6][7]=c;
cout <<"as recivido una llave"< system("pause");

}
break;
}



//representamos el cuadrado otra vez, borrando lo anterior
system("cls");
cout<<"utliza las letras W-S-A-D para moverte, pulsa p para salir"<
//vida
cout<<"VIDA-->";
for(z=0;z<10-v;z++)
{
cout< }
cout<
//rectangulo
for (i = 0; i < 20; i++)
{
for (j = 0; j < 20; j++)
{
cout < }
cout < }

//vida del enemigo
if(vida_menu(x,y+1))
{
cout<<"vida del enemigo-->";
for(z=0;z<5-v;z++)
{
cout< }
cout<
}



//si la vida llega a 0
if (v==10)
{
system("cls");
cout<<"game over"< system("PAUSE");
return 0;
}

//si la vida del enemigo llega a 0
if(w==5)
{
suelo[15][10]=c;
w=0;
}
//para salir del programa
}
while(tecla !='p');

system("PAUSE");
return 0;
}[/code]




-----------------------------------------------------------------------------
Imagen Enviada
Imagen Enviada
mi dibujo del killzone2 pintando aqui




Este tema ha sido archivado. Esto significa que no puedes responder en este tema.
publicidad
publicidad