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

  • machakito

  • Adramalech

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

Escrito 25 abril 2009 - 16:47

Bueno, me he tomado una pequeña licencia (espero que al Sr. moderador no le moleste) y después del cafelito de comer he echo esto: (los sábados lluviosos son muy aburridos ;)
[...]

Hola, Ollydbg.

Pero, ¿qué le has puesto al café?. ;)

Si señor, muy buen trabajo.

  • davidlie

  • TERRESTRIS VERITAS

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

Escrito 25 abril 2009 - 17:54

Bueno, me he tomado una pequeña licencia (espero que al Sr. moderador no le moleste) y después del cafelito de comer he echo esto: (los sábados lluviosos son muy aburridos ;)
[...]

Hola, Ollydbg.

Pero, ¿qué le has puesto al café?. ;)

Si señor, muy buen trabajo.


la verdad es que muy buen trabajo aver si aprendo yo me dais envidia todos ¬¬
pd. lo consegui por fin!!! ya no hace falta pulsar enter!!!!! toma ya!!!!
pd2. ahora a por la vida y el enemigo

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



#78

Escrito 25 abril 2009 - 18:41

Hola, ya se que me repito, pero ésto lo acabo de compilar con Dev-C++ (V4.9.9.2) y funciona perfectamente:

[code:1]#include
#include

char getkey(void)
{
return (char) getch();
}

char c;

int main()
{
do
{
c = getkey(); /*compruebo la pulsación de una tecla*/
switch©
{
case '4':
cout << "Has pulsado el 4" << endl;
break;
case 'a':
cout << "Has pulsado la a" << endl;
break;
default:
break;
}
} while (c != 'Q');
}
[/code]

  • davidlie

  • TERRESTRIS VERITAS

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

Escrito 25 abril 2009 - 19:19

buenas!
si al final lo hice asi lo que pasa es que me daba error la librearia conio.h(vaya nombre)
ahora me da menos aunque en cosas como la de colorear no me deja :S


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



  • davidlie

  • TERRESTRIS VERITAS

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

Escrito 27 abril 2009 - 15:19

ola
ya tengo un boceto de lo que es la vida
una funcion aparte que dando el valor de daño revivido te retorne la vida(una barra echa por 10 cachos de un símbolo)con un cacho menos

pero antes me gustaria que me digerais si el codigo esta bien(aunque funciona se que se pueden ir por otros sitios mas faciles. lo unico que no me gusta es lo echo por el personaje pero hay va comentad por favor.
se que tenia que hacer una matriz temporal y hacerlo alli, no lo hcie ya lo are cuando empiece el proyecto serio

[code:1]#include
#include
#include

using namespace std;

int main()
{

// a es = b es || c es espacio
char a=205, b=186, c=32, d=64, e=153;
char suelo[20][20];
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
char movimiento;
int ay=0; //incremento de y
int ax=0; //incremento de x
suelo[x+ax][y+ay]=d;//personaje
suelo[15][10]=e;//enemigo

do
{
getch();
// movimiento cuando es S la tecla pulsada
if(getch()=='s')
{
if(suelo[x+ax][y+ay+1]==c)
{
suelo[x+ax][y+ay+1]=suelo[x+ax][y+ay];
suelo[x+ax][y+ay]=c;
ay+=1;
}
if(suelo[x+ax][y+ay+1]==e)
{

}
}
// movimiento cuando es d la tecla pulsada
if(getch()=='d')
{
if(suelo[x+ax+1][y+ay]==c)
{
suelo[x+ax+1][y+ay]=suelo[x+ax][y+ay];
suelo[x+ax][y+ay]=c;
ax+=1;
}
}
// movimiento cuando es w la tecla pulsada
if(getch()=='w')
{
if(suelo[x+ax][y+ay-1]==c)
{
suelo[x+ax][y+ay-1]=suelo[x+ax][y+ay];
suelo[x+ax][y+ay]=c;
ay-=1;
}
}
// movimiento cuando es a la tecla pulsada
if(getch()=='a')
{
if(suelo[x+ax-1][y+ay]==c)
{
suelo[x+ax-1][y+ay]=suelo[x+ax][y+ay];
suelo[x+ax][y+ay]=c;
ax-=1;
}
}

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(movimiento !='p');
system("PAUSE");
return 0;
}
[/code]

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



#81

Escrito 27 abril 2009 - 16:22

Hazte una función que devuelva 0 (FALSE) si el espacio al que te vas a mover está ocupado o 1 (TRUE) si está libre.

Defínela así ( bool is_open(coordenada x del mapa, coordenada y del mapa); )

Dentro de esa función puedes comprobar todo tipo de símbolos y decidir si puede pasar por ellos o no.

Eso facilitará la lectura del código también.
Y lo de los if's supongo que ya te lo dirá alguien :P

  • davidlie

  • TERRESTRIS VERITAS

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

Escrito 27 abril 2009 - 20:21

ya lo pondre
que pasa con los ifs?
mejor poner un swith case?


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



  • Gagle

  • Yojimbo

  • vida restante: 100%
  • Registrado: 22 mar 2008
  • Mensajes: 9.856
#83

Escrito 27 abril 2009 - 20:45

casi que si XD

"640KB tendrían que ser suficientes para cualquiera."


Bill Gates, 1981.
¿Será cierto?



  • Ellolo17

  • Zodiark

  • vida restante: 100%
  • Registrado: 16 nov 2006
  • Mensajes: 6.208
#84

Escrito 27 abril 2009 - 21:37

Sobre el switch y el if, bueno, en la epoca actual mas bien da igual, lo unico que ganas con el case es que el codigo sea mas legible. Pero no todos los lenguajes lo tienen tan facil como aqui.

Por ejemplo en el mio, en el Darkbasic, reniego lo que puedo de los select-case porque te ahorras mucho mas de codigo, de tiempo escribiendo, etc... que con ifs.

La diferencia entre usar uno y otro es que para los casos en los que se puede usar el select, se ahorra mas tiempo de calculo que con varios ifs, pues tiene que leer menos filas y hacer menos calculos que con los ifs.

Pero eso, en la epoca actual, solo por hacerlo mas legible y segun el lenguaje que se use.

Un saludo.

  • machakito

  • Adramalech

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

Escrito 27 abril 2009 - 22:01

Hola.

Si pones un getch en la condición de cada if, el programa se va a marear (por no hablar de quien lo mire).

Supongamos que, sólo arrancar el programa, pulsas la tecla "a" (ignoramos el getch posterior al do porque no sé que sentido tiene ahí): comprueba si la tecla pulsada es la "s". Como no lo es salta al otro if, donde espera que pulses una tecla. Si pulsas (otra vez) la "s"… salta al otro if y espera que pulses una tecla.

Y así hasta el infinito y más allá…

¿La solución?, mantener los ifs (aunque duelen a la vista) pero pidiendo una única vez la pulsación de una tecla o cambiar a un switch (como ya te han comentado) que es mas estético y rápido. Te en cuenta que, tal y como tienes el interior del do..while, se debe comprobar cada if (imagina que tienes 100 ifs, de la forma que tú lo has puesto habría que hacer 100 comprobaciones) mientras que en el switch sólo haces una comprobación.


Otras cosas:
¿Te has fijado que nunca sales del programa?. No usas la variable movimiento.
¿Para que sirven las variables de incremento ax y ay?.

Esto ya son gustos y cada programador escribe como le viene en gana, pero creo que el programa principal debería ser lo mas escueto posible. Para eso, lo mejor es que crees funciones (por ejemplo, una que muestre la matriz).


Ánimo, sigue con el código y nos lo vas enseñando.

  • davidlie

  • TERRESTRIS VERITAS

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

Escrito 27 abril 2009 - 22:30

ahora lo cambio por los case
para salir del programa basta con pulsar p
las variables de incremento AX y AY las utlizo para el movimiento del personaje ejemplo
el personaje esta en 10x y 5y si pulsamos S se iría a 10x y 6y o como se pone en el codigo 10x 5y+1y donde 1y en este caso es AY, si vuelves a pulsar s seria 10x 5y+2y y si pulsas luego d seria 10x+1x5y+2y entiendes? de esto estoy buscando una forma mas facil

con las funciones lo e estado practicando con la vida, si no me equivoco esta la funcion void cuando quieres mostrar algo y la funcion normal que la das dos datos y te devuelve una operacion no?
tengo que practicar con eso :S


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



  • davidlie

  • TERRESTRIS VERITAS

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

Escrito 27 abril 2009 - 23:03

nos e como meter el bool ser como ser usa y para que sirve pero es la primera vez que lo uso
lo e puesto con los case y no me va, solo para ir a la izquierda

[code:1]
#include
#include
#include

using namespace std;

int main()
{

// a es = b es || c es espacio
char a=205, b=186, c=32, d=64, e=153;
char suelo[20][20];
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
char movimiento;
int ay=0; //incremento de y
int ax=0; //incremento de x
suelo[x+ax][y+ay]=d;//personaje
suelo[15][10]=e;//enemigo

do
{
getch();
switch (getch())
{
case 's':
if(suelo[x+ax][y+ay+1]==c)
{
suelo[x+ax][y+ay+1]=suelo[x+ax][y+ay];
suelo[x+ax][y+ay]=c;
ay+=1;
}


case 'd':
if(suelo[x+ax+1][y+ay]==c)
{
suelo[x+ax+1][y+ay]=suelo[x+ax][y+ay];
suelo[x+ax][y+ay]=c;
ax+=1;
}

case 'w':
if(suelo[x+ax][y+ay-1]==c)
{
suelo[x+ax][y+ay-1]=suelo[x+ax][y+ay];
suelo[x+ax][y+ay]=c;
ay-=1;
}
case 'a':
if(suelo[x+ax-1][y+ay]==c)
{
suelo[x+ax-1][y+ay]=suelo[x+ax][y+ay];
suelo[x+ax][y+ay]=c;
ax-=1;
}
}

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(getch() !='p');
system("PAUSE");
return 0;
}[/code]

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



  • machakito

  • Adramalech

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

Escrito 28 abril 2009 - 00:10

para salir del programa basta con pulsar p

Esto..., ejem, ahora que lo has cambiado, sí.

las variables de incremento AX y AY las utlizo para el movimiento del personaje ejemplo
el personaje esta en 10x y 5y si pulsamos S se iría a 10x y 6y o como se pone en el codigo 10x 5y+1y donde 1y en este caso es AY, si vuelves a pulsar s seria 10x 5y+2y y si pulsas luego d seria 10x+1x5y+2y entiendes? de esto estoy buscando una forma mas facil

Si, si, pero insisto, ¿para que las usas?. No las necesitas para nada (o al menos según el código que has puesto). Puedes emplear directamente x e y, evitando usar mas variables y liar el código.

lo e puesto con los case y no me va, solo para ir a la izquierda

Te faltan los puntos de finalización (break).

  • davidlie

  • TERRESTRIS VERITAS

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

Escrito 28 abril 2009 - 15:33

buenas, la verdad es que con lo de las AX me lie XD
eso esta bien
y me acuerdo que al principio lo hice case swicth case y break
y aunque se mueve cuando se choca contra una pared se mueve o acia la derecha o hacia arriba menos en la s :S


[code:1]#include
#include
#include

using namespace std;

int main()
{

// a es = b es || c es espacio
char a=205, b=186, c=32, d=64, e=153;
char suelo[20][20];
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

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


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

case 'w':
if(suelo[x][y-1]==c)
{
suelo[x][y-1]=suelo[x][y];
suelo[x][y]=c;
y-=1;
break;
}
case 'a':
if(suelo[x-1][y]==c)
{
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(getch() !='p');
system("PAUSE");
return 0;
}[/code]

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



  • Gagle

  • Yojimbo

  • vida restante: 100%
  • Registrado: 22 mar 2008
  • Mensajes: 9.856
#90

Escrito 28 abril 2009 - 19:25

Mensaje para elollo:

No puedes cerrar un hilo (o no deberias) asi por las buenas cuando tu tambien has dado tu opinion y por tanto no dejas oportunidad para la replica. Yo por lo menos si tengo que cerrar un hilo lo hago por X motivos, pero no dejo con la palabra en la boca a los demas por haber dicho la ultima opinion.

Tampoco me parece correcto cerrar el hilo por los motivos que has dado, el hilo no se estaba desvirtuando demasiado. Si no hay ninguna falta de respeto no se porque deberia de cerrarse.

Me parece que te estas tomando muy en serio esto de ser moderador. Yo tambien he sido moderador de algunos foros en periodos de tiempo bastante largos. Solo te puedo dar el siguiente consejo: Moderador = Usuario en todos los aspectos, con la diferencia que uno puede cerrar hilos y el otro no. En tu caso mas bien es: Moderador > Usuario.

Saludos.

PD: Este mensaje si que es una desvirtuada como un templo, pero prefiero que todos lo lean.

EDIT: te hablo del hilo de software gratuito y de pago.

"640KB tendrían que ser suficientes para cualquiera."


Bill Gates, 1981.
¿Será cierto?




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