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

  • davidlie

  • TERRESTRIS VERITAS

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

Escrito 22 abril 2009 - 20:34

ola sigo teniendo problemas a la hora de mostrar el cuadrado
si no me equivoco todas las aristas del cuadrado estan definidas
pero a la hora de mostrarlas me aparecen cosas raras
ahora tengo esto, esta mal lo de representarlas seguro por que no hay saltos de lienas ni nada pero tampoco se como ponerlo :S

[code:1] char a=205, b=186, c=32;
char suelo[20][20];
int x;
int y;
for(x=1;x<=20;x++)
{
suelo[1][x]=a;
suelo[20][x]=a;
}
for(y=2;y<20;y++)
{
suelo[y][1]=b;
suelo[y][20]=b;
}
for (x=1;x<=20;x++)
{
for(y=1;y<=20;y++)
{
cout < }
}[/code]

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



  • machakito

  • Adramalech

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

Escrito 22 abril 2009 - 21:26

ola sigo teniendo problemas a la hora de mostrar el cuadrado
si no me equivoco todas las aristas del cuadrado estan definidas
pero a la hora de mostrarlas me aparecen cosas raras
ahora tengo esto, esta mal lo de representarlas seguro por que no hay saltos de lienas ni nada pero tampoco se como ponerlo :S

Hola.

Por partes…

- Las cosas raras (en mi época las llamábamos chinos) te salen porque sólo has rellenado el array bidimensional con los bordes del cuadrado, pero el resto de posiciones a saber que contienen.

- Sigues sin poner un salto de línea al final de cada fila. Puedes usar el cout enviándole fin de línea.

- Siempre digo lo mismo pero, ¿has hecho el algoritmo del programa?. Lo mejor es coger un papel y escribir con tus palabras (no intentes usar un lenguaje concreto) lo que quieres que haga el programa. Una vez lo tengas haz la traza...

¿Por qué no miras la solución que te puso Ollydbg y la transformas a C/C++?. Para que vayas entendiendo como funciona creo que es la más fácil, pero ten en cuenta que no sirve si la matriz no es cuadrada. Otra cosa que deberás tener en cuenta es que la primera posición del vector está en vector[0].

  • Ollydbg

  • Valefor

  • vida restante: 100%
  • Registrado: 05 sep 2008
  • Mensajes: 6.259
#33

Escrito 22 abril 2009 - 23:00

A ver, por partes, lo más parecido que tengo al c++ es C#. Yo soy programador de VB.NET, pero como C# también es de la "familia .NET", casi que me da lo mismo :)

Te te dejo el código completo aquí: http://ollydbg.pastebin.com/f736f4b10

Y una captura de la consola con el resultado final aqui:
Imagen Enviada
(click para agrandar)

En lugar de cout <, pues yo uso Console.Write(caracterSuelo); donde char caracterSuelo=suelo[j,i];

Si no entiendes algo, pregunta, que no muerdo, aunque vamos, si esto tiene complicación, apaga y vámonos ;). Ánimo.

Saludos.

  • davidlie

  • TERRESTRIS VERITAS

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

Escrito 22 abril 2009 - 23:27

buenas pues lo e pasado a c++ y ami no me sale
me sale lo que ya consegui hacer esta tarde XD

Imagen Enviada

aqui el codigo

[code:1]int main()
{
// a es = b es || c es espacio
char a=205, b=186, c=32;
char suelo[20][20];
int i;
int j;

for (i = 0; i < 20; i++)
{
suelo[i][0] = a;
suelo[i][19] = a;
suelo[0][i] = b;
suelo[19][i] = b;
}
for (i =1; i < 19; i++)
{
for (j = 1; j < 19; j++)
{
suelo[i][j] = c;
}
}
for (i = 0; i < 20; i++)
{
for (j = 0; j < 20; j++)
{
char caracterSuelo=suelo[j][i];
cout < }
}
system("PAUSE");
return 0;
}[/code]

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



  • Ollydbg

  • Valefor

  • vida restante: 100%
  • Registrado: 05 sep 2008
  • Mensajes: 6.259
#35

Escrito 22 abril 2009 - 23:48

Vale....tienes un pequeño bug aqui:

Tú código:

[code:1]for (i = 0; i < 20; i++)
{
for (j = 0; j < 20; j++)
{
char caracterSuelo=suelo[j][i];
cout < }
} [/code]

Y mi código (quitando la paranoya de los colorines):

[code:1]for (int i = 0; i < 20; i++)
{
for (int j = 0; j < 20; j++)
{
char caracterSuelo=suelo[j,i];

Console.Write(caracterSuelo);
}
Console.WriteLine();
}[/code]
Fijate que en ese bucle anidado se representan primero las columnas (en bucle mas interno, el de j) y luego las filas, el bucle externo (el bucle i)

De tal forma que lo que va haciendo el ordenado es (en negrita el char que se dibuja):
X
luego:
XX
luego:
XXX
luego:
XXXX
total, que al final del bucle más interno se han dibujado las 20 columnas de la fila que estas dibujado:

XXXXXXXXXXXXXXXXXXXX

al acabar el bucle interno, tienes que hacer un salto de carro y un retorno de linea para que la siguiente fila te vuelva a imprimir en la columna 0

fijate que en mí codigo, al acabar el bucle interno tengo está instrucción:

[code:1]Console.WriteLine();[/code]

Pues bien, esa instrucción hace un retorno de carro y un salto de linea
de tal forma que la siguiente linea me la dibujará abajo:

XXXXXXXXXXXXXXXXXXXX
X

XXXXXXXXXXXXXXXXXXXX
XX

XXXXXXXXXXXXXXXXXXXX
XXX

XXXXXXXXXXXXXXXXXXXX
XXXX

etc etc.

Por lo tanto, tienes que meter un retorno de linea:

for (i = 0; i < 20; i++)
{
for (j = 0; j < 20; j++)
{
char caracterSuelo=suelo[j][i];
cout < }
cout << "\n";
}

(Suponiendo que el CR+LF en c++ sea con cout << "\n";, qué no lo sé)

Saludos.

  • davidlie

  • TERRESTRIS VERITAS

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

Escrito 23 abril 2009 - 00:28

joder asik siempre e tenido el mismo fallo por el puto salto ese
por que de diferentes formas siempre me salia eso XD
gracias
ahora tengo que inluir un personaje y darle movimiento a ver k tal :S


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



  • machakito

  • Adramalech

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

Escrito 23 abril 2009 - 00:40

Hola.

Una opción más "cplusplusera" es utilizar endl en vez de \n.

Si quieres seguir depurando el código te hago unos apuntes:

[code:1] for (i = 0; i < 20; i++)
{
for (j = 0; j < 20; j++)
{
char caracterSuelo=suelo[j][i];
cout < }
}
[/code]

Por un lado está invirtiendo el orden en el que recorres la matriz y, por otro, ¿para que declaras la variable caracterSuelo si no la usas en ningún lado?.

Para acabar de rematar tu suelo, añade el siguiente código antes de imprimir la matriz y así tendrás las esquinas.
[code:1] suelo[0][0]=a;
suelo[0][19]=b;
suelo[19][0]=c;
suelo[19][19]=d; [/code]

donde a=201, b=187, c=200, d=188.

  • davidlie

  • TERRESTRIS VERITAS

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

Escrito 23 abril 2009 - 00:58

siento decirte que ya lo hhice antes de que escribieras nada ^^ XD
y lo de declarar caracter suelo tambien lo cambie
aun asi gracias
mañana me pongo con lo otro


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



  • Ellolo17

  • Zodiark

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

Escrito 23 abril 2009 - 10:13

Joer, anoche a la que posteabais eso yo ya estaba durmiendo ^^.

Me alegro de que al final lo solucionases.

Ahora a por el movimiento del personaje por esa sala!

  • davidlie

  • TERRESTRIS VERITAS

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

Escrito 23 abril 2009 - 12:30

vamos a ver
ahora meto en la matriz el personaje que estará en por ejemplo suelo[1][10]
si pulsamos S para que vaya para abajo si hay un espacio que intercambie si no que no aga nada.
luego lo mismo con la D la A y la W. no?
para representar el movimiento, primero seria un cin>> S por ejemplo y después meto un system("cls") y represento otra vez todo el cuadro.
luego le meto un do while para que lo aga mientras no pulses la tecla escape por ejemplo.(esto no se hacerlo(como pongo escape en c++??))
y a si no?


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



  • Ellolo17

  • Zodiark

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

Escrito 23 abril 2009 - 12:40

Buenas.

Pues si, seria algo asi a lo primro que has dicho. Al pulsar la tecla "s" por ejemplo, que mire en [i, j+1] (j son las columnas). Si en esa casilla hay vacio, entonces pones vacio en la casilla [i, j] y pones el protagonista en el [i, j+1]

Si se pulsa W seria en la [i,j-1]

si se pulsa a seria [i-1, j]

y si es d entonces [i+1, j]

Una vez que has cambiado la matriz, hay que representarla. Asi que se hace un cls y se redibuja toda la matriz.

Y de nuevo a esperar que el jugador introduzca el comando.

Ahora, si son esos comandos, ni idea.

Un saludo.

  • wiyarmir

  • Elder

  • vida restante: 100%
  • Registrado: 27 mar 2009
  • Mensajes: 108
#42

Escrito 23 abril 2009 - 12:40

Una pequeña puntualización, en vez de "\n" usa la constante endl, estilo

cout << endl;

ya que en las macros esta bien definida para todos los compiladores :)

  • davidlie

  • TERRESTRIS VERITAS

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

Escrito 23 abril 2009 - 13:09

gracias por esos apuntes
e echo con la tecla s
nada complicado esta hay, savblo que solo me lo hace una vez, si vuelvo a pulsar la tecla s no hace nada, lo mirare ahora
lo que pasa es que para moverlo tienes que pulsar s y después enter, y luego otra vez asta que quieras
ahora cambio eso que decis

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



  • davidlie

  • TERRESTRIS VERITAS

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

Escrito 23 abril 2009 - 15:09

pues ya lo hice ^^
lo mas dificil creo que va a ser dibujar el mapa aunque primero lo dibujare aparte y luego poco a poco lo are
el movimiento lo hice algo diferente es tipo juego estratégico XD
por si lo quereis ver

http://rapidshare.co...01652/juego.rar


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



  • Ollydbg

  • Valefor

  • vida restante: 100%
  • Registrado: 05 sep 2008
  • Mensajes: 6.259
#45

Escrito 23 abril 2009 - 20:34

A ver, por partes, como diría Jack Shepard...digo...Jack el Destripador (en que estaré pensado...4,8,15,16....)

Las cosas se pueden hacer bien, mal o regular.

Sería bueno que te acostumbrases a usar clases o estructuras o incluso clases con estructuras ya que a la postre te facilitarán muchísimo más la vida.

¿Donde se ha visto cambiar la "matriz" del tu "mapa" he ir cambiando valores según el movimiento de tu meco?

Primero has de preguntarte cual es la característica principal de tu personaje. A bote pronto tu personaje tiene una característica única: Tiene una posición variable.

Pues bien, te puedes crear una "estructura" tipo personaje. Yo lo haré con el pseudo-código que más entiendo (vb.net). Lo importante es el concpeto, no el lenguaje "x" de programación final (y si, en c++ podrás usar clases / estructuras, faltaría más)

Yo me puedo crear esto:
[code:1]Private Structure sPersonaje
Dim X As Integer
Dim Y As Integer
End Structure
Private miPersonaje As sPersonaje[/code]
¿Con esto que consigo? Pues tener una variable, miPersonaje, que no es ni int, ni char, ni ULong, ni byte...es del "tipo" sPersonaje.

¿Cómo accedo a esta variable?. Pues así
[code:1]miPersonaje.X = 8
miPersonaje.Y = 10[/code]
o la forma que me gusta a mi (todo con total que escribir menos)
[code:1]With miPersonaje
.X = 8
.Y = 10
End With[/code]

¿Qué significa esto para mi?. Pues según lo anterior, "mi personaje" está en la columna 8, fila 10. Creo que sobran las explicaciones.

Supongamos que tu pj se mueve con las teclas A,S,D,W (izq,abajo,derecha y arriba respectivamente)

Pues bien, ¿qué necesitamos? una función que devuelva o No que verifica si el "futuro" movimiento es correcto.

Algo así como:
[code:1]Funcion MovimientoCorrecto (TeclaPulsada) As Booleano
Caso TeclaPulsada es "A"
Si miPersonaje.X=0 devuelve NO en caso contrario
ValorSuelo=Suelo(miPersonaje.X-1,miPersonaje.Y)
Caso TeclaPulsada es "S"
Si miPersonaje.Y=19 devuelve NO en caso contrario
ValorSuelo=Suelo(miPersonaje.X,miPersonaje.Y+1)
Caso TeclaPulsada es "D"
Si miPersonaje.X=19 devuelve NO en caso contrario
ValorSuelo=Suelo(miPersonaje.X+1,miPersonaje.Y)
Caso TeclaPulsada es "W"
Si miPersonaje.Y=0 devuelve NO en caso contrario
ValorSuelo=Suelo(miPersonaje.X,miPersonaje.Y-1)

Si ValorSuelo = " "
Devuelve Sí
En caso contrario
Devuelve No[/code]

Creo que la función se explica por si misma, pero vamos:
Si he pulsado la tecla "A" (izquierda):
comprueba que la posición X actual de tu personaje no sea la columna 0, ya que en este caso, por mucho que pulses la tecla "A" tu personaje NO puede moverse mas a la izquierda. En caso contrario guarda en una variable, el valor futuro que tienes en tu array de suelo si el personaje se moviese 1 columna hacia la izquierda.

Al final de la función, se verifica que ese valor futuro corresponde con el caracter " ", lo cual indica que que te podrás mover a la posición futura que calculaste antes.

Con las demás teclas ocurre tres cuartos de lo mismo.

Pues bien, como funcionaría el programa:
[code:1]Inicializar Matriz Suelo
Repetir Mientras que la TeclaPulsada != ESCAPE
TeclaPulsada
Si MovimientoCorrecto (TeclaPulsada) = Si
Caso Tecla "A"
miPersonaje.X --
Caso Tecla "S"
miPersonaje.Y ++
Caso Tecla "D"
miPersonaje.X ++
Caso Tecla "W"
miPersonaje.Y --

BorrarConsola

Copiar "Suelo" a arrayTemporal

arrayTemporal (miPersonaje.X,miPersonaje.Y) = "X"

Mostrar arrayTemporal en pantalla
Fin SI
Repetir [/code]

¿Que consigues con esto?
Pues dos cosas:
1º La matriz "Suelo" NO LA MODIFICAS en ningún momento
2º Usas una matriz "temporal" para:
2.1: copias todo el "Suelo" en la matriz "temporal"
2.2: copias el caracter "X", o el que decidas para tu personaje en la matriz temporal
2.3: Muestras en la consola la matriz "temporal"

Como consejo, aunque creo que ya te lo han dado: Antes de meterte con el "código" (sea del lenguaje que sea) intenta hacer un algoritmo de lo que quieres hacer. Es mucho más rápido y ayuda enormemente. Sí, probablemente tu programa funcione, pero como ya dije al principio, las cosas se pueden hacer bien, mal o regular ;)

PD: DioX, pedazo ladrillo X-D

Saludos.


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