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
#1

Escrito 18 abril 2009 - 00:01

se trata de mi primer juego, se juega a travas de la consola, lo hice mas que nada para practicar arrays etc.
se trata del juego mastermind. el que no sepa que juego es ni como se juega lo pongo aqui:

es un juego para dos jugadores, el primer jugador mete 4 cifras de una en una, una vez echo el segundo jugador tiene 10 intentos para adivinarla.
el juego te dice cuantos mates y jaques tienes .
mate es cuando as acertado de lleno un numero y su posición
jaque es cuando acertaste el numero pero no su posicion
lógicamente te dice cuantos mates tiene pero no el numero que es el mate, no se si me explico.
pues no hay nada mas que explicar. bueno si. si juegas solo te tapas los ojos y metes las cifras.

y recordar si jugáis las cifras se meten de una en una, es decir:

1
enter
2
enter
3
enter
4
enter

y no 1234

sin mas dilaciones

y recordar es cutre muy cutre, no me pegueis
juego


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



  • Ellolo17

  • Zodiark

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

Escrito 18 abril 2009 - 12:15

Te recomiendo para la proxima que cojas el numero entero, en vez de por cifras, y luego con un do-loop vayas tratandolo para poner cada cifra en su sitio del array ;)

Dentro de poco te nos presentas con un NetHack -esos juegos que son en la consola del DOS en el que el protagonista suele ser una arroba y esta todo el aspecto grafico hecho en ascii y se actualiza como por "turnos"-

Yo me hice uno a los pocos meses de empezar a aprender programacion, en cuanto en clase dimos los arrays ^^

Otra idea que puedes intentar explotar es hacerte un tamagotchi ;)

Un saludo

  • davidlie

  • TERRESTRIS VERITAS

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

Escrito 18 abril 2009 - 12:21

al principio pretendía eso pero no sabia como cojer cada cifra del entero y meterla en el array asi que opte por esto.
puf eso que dices ya me parece dificil XD y se hacen con arrays y eso??


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



  • Ellolo17

  • Zodiark

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

Escrito 18 abril 2009 - 12:45

Si, el escenario no es mas que un array de dos dimensiones de tipo texto. Tu le pones caracteres en ASCII por cada casilla.

Asi cada vez que el personaje se mueva, por ejemplo, hacia arriba, comprueba que en la posicion de arriba se puede mover -el caracter ascii no representa una pared u algo que no pueda atravesar- y si esta despejado, vuelve a poner en la posicion donde estaba el personaje el caracter ascii que corresponde al suelo y cambia el de la posicion a la que va el personaje por el simbolo ascii del personaje.

Aqui tienes todos los ascii: Los normales y los extendidos -usados para dibujar las mazmorras-
http://www.asciitable.com/

Bueno, es un poco lioso, pero prueba a hacerte un array de 10x10, de texto, haz que la primera y ultimas filas tengan el ascii 205, luego que la primera y ultima columnas tengan el 186. Y luego el resto un punto -ascii 46-

Si quieres rematarlo puedes dibujar las esquinas ;)

Luego, cogemos un simbolo para el personaje. Yo solia poner el 233, aunque puedes usar cualquier otro. Lo colocamos por ejemplo en la posicion 5,5 del array.

Ahora, lo que tienes que hacer es esperar que se presione una tecla.

Cuando ocurra, por ascii tratas la tecla que se ha pulsado. Si es la tecla para irse hacia arriba, entonces compruebas en la fila superior y la columna del protagonista -por cierto, necesitaras una variable aparte para ver la posicion x e y del protagonista, y lo mismo para todos los demas objetos que haya-

Si esa posicion esta vacia -tiene el ascii de un punto- entonces en la posicion en la que estaba el prota pones un punto, y en la fila superior columna del prota haces que el ascii cambie por el del prota.

Y con eso ya tienes lo basico del motor del juego hecho. Si luego ademas tratas otros objetos, enemigos, etc...
Incluso añades conversaciones, interaccion y cosas asi, puedes tener algo muy chulo.


PD: El mas chulo de estos juegos pero que ya es algo para MUY profesionales es el Dwarf Fortress, que te crea en ascii un mundo entero, dividido en varias zonas. Pongo fotos para que veas mas o menos ;)
Imagen Enviada
Imagen Enviada
Imagen Enviada

  • davidlie

  • TERRESTRIS VERITAS

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

Escrito 18 abril 2009 - 13:04

a ya te entiendo, la cosa es que se hace con matrices no? vectores bidimensionales, el problema es que todavía no e visto nada de ellos, y otro problema es que to voy a primero de bachillerato y asta segundo no ven las matrices en la asignatura de matemáticas, por lo que igual estoy perdido, de todas formas lo intentare


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



  • machakito

  • Adramalech

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

Escrito 18 abril 2009 - 13:51

[...]

Hola.

Ainssss, ¡qué recuerdos me trae de mis años mozos...!.

a ya te entiendo, la cosa es que se hace con matrices no? vectores bidimensionales, el problema es que todavía no e visto nada de ellos, y otro problema es que to voy a primero de bachillerato y asta segundo no ven las matrices en la asignatura de matemáticas, por lo que igual estoy perdido, de todas formas lo intentare


Creo que llevas un pequeño cacao mental con el concepto matriz. :)

No hace falta que esperes a verlas en la asignatura de matemáticas porque no tienen (casi) nada que ver con lo que te propone Ellolo17. Desconozco el actual plan de estudios pero imagino que en matemáticas os enseñarán como hacer operaciones con ellas (sumar un escalar, multiplicarlas, identidades, ...) y lo que te comenta Ellolo17 es crear un vector bidimensional. Si, coinciden en nombre, pero el nivel que requiere ese juego es básico y tan solo debes saber acceder a una posición, no realizar operaciones aritméticas.

Si hasta ahora usabas un vector, independientemente del lenguaje que emplearas, de la forma vector, ahora deberás usar [i]vector[i][j], así de fácil. Por ejemplo, el típico juego de barcos no es mas que una matriz donde cada casilla es una posición vector[i][j].

  • davidlie

  • TERRESTRIS VERITAS

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

Escrito 18 abril 2009 - 13:56

asi que no tiene nada que ver? pues ya me pondre a ello ^^ primero algo basico y luego ya me metere en algo como esto


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



  • davidlie

  • TERRESTRIS VERITAS

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

Escrito 19 abril 2009 - 12:43

buenas ya controlo un poco de matrices.
se por ejemplo como van y que se hace con dos for anidados etc

para esto habria que hacer el juego habria que hacer algo como esto no??

@->personaje k manejas
|->pared
S->suelo
| @ |
| S |
| S |

si tocas la flecha para abajo como hay una S se intercambian las letras si tocas la flecha de derecha e izquierda no hace nada por que con | no se puede intercambiar.
ahora bien hay que hacer una matriz, gigante tipo mapa[100][100] y hay que ir rellanando cada hueco para que te cree el mundo?? o se hace por ejemplo pa que segun vas avanzado desaparezca por un lado y aparezca en otro no se, estoy espeso

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



  • Ellolo17

  • Zodiark

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

Escrito 19 abril 2009 - 20:52

Si hay pared, no se intercambia y las coordenadas del prota son las mismas.

Si hay "hueco libre" -un punto, o una s en este caso- entonces se intercambia y se cambia la variable de coordenadas del protagonista -con esta variable te ahorraras el crearte una funcion que se recorra toda la matriz buscando al protagonista o a los enemigos. Yo al menos lo prefiero, aunque te puedes hacer esa funcion y luego tratar los datos-

Y luego si hay un enemigo o algun personaje no jugador -pnj- no se cambian, si es un enemigo se calcula como seria el combate si lo hubiese y si es un pnj pues soltaria una frase o algo de eso.

Si te haces un array de una sola dimension para el inventario -por ejemplo, inventario(10)- puedes hacer que al hablar por primera vez con un pnj este le de un objeto que se colocaria en el inventario -puedes hacer que se acceda a un objeto pulsando la tecla numerica del 1 al 0 a la derecha. Si es 0 no tiene nada y no pasa nada, si el array tiene un 1 entonces es una pocion que recupera la vida perdida en algun combate -variable vida-, si es un 2 es una llave y se usaria junto a una puerta o un cofre, etc...-

Am, y para lo del pnj que te da algo y luego habla eso se hace con una variable que yo suelo llamar "estado". Al andar hacia el si el estado es 0, entonces le da un objeto y el estado pasa a 1, si vuelve a andar hacia el y el estado es 1, entonces suelta una frase y el estado pasa a 2. y si se vuelve a hablar con el el estado vuelve a 1 para que diga la primera frase y asi sucesivamente, por ejemplo.


Para controlar estas cosas, conviene que te crees un "enum" por ejemplo:

enum enemigo
int posx //posicion x del enemigo
int posy //posicion y del enemigo
int vida //vida actual del enemigo
int daño //daño que hace cada golpe del enemigo
int estado // este se usaria para programarle algo de inteligencia. Por ejemplo, con un estado 1 y una variable mas en este enum para coger un numero, se puede hacer que se mueva desde la posicion x actual hacia el punto x de ese numero para hacer que se mueva en esa direccion. Tambien puedes hacer que con esta variable se vea si se esta protegiendo o si esta normal. O si ha visto al protagonista en caso de que quieras que se mueva hacia el.

Enum pnj
posx
posy
estado


Luego todo es programar eventos en caso de que el protagonista se dirija a un sitio en el que hay pared, enemigo, o pnj, o tesoro -en caso de que sea uno de coger tesoros-


Ten en cuenta que estos juegos son muy instructivos para pasar al siguiente nivel, cuando tengas una libreria como Allegro que te permita coger imagenes y cosas asi para hacerte un juego en 2d, pues solo es sustituir el codigo ascii del escenario por el numero de identificacion de una imagen. Y asi el punto o la s seria un cuadrado hecho en paint de 64 x 64 por ejemplo. Y el arroba seria ese dibujo pero con el prota dibujado encima.

Asi daras un gran paso en esto. Luego ya irian conceptos mas avanzados de programacion pero te pueden salir juegos de puta madre.

Un saludo.



EDIT:::::::::

Para hacer el mapeado: Lo suyo es si quieres narrar una historia y tenerlo todo atado y bien atado, te cojas papel cuadriculado.

En ese papel cada casilla representa una coordenada del array del mapa -bueno, de la matriz, solo que yo la suelo llamar array porque soy asi de chulo 8D - y ahi vas dibujando las paredes, donde hay enemigos, donde hay trampas, donde puertas que se abren con algun objeto, donde estan esos objetos, donde los tesoros, donde los pnj...

Y luego pues si tienes casi todo suelo, rellena todo el escenario de suelo. Si esta vacio, rellena todo de vacio. Si casi todo son paredes -caso de que sea un laberinto- pues todo paredes.

Luego create una funcion que rellene desde una coordenada a otra coordenada el array haciendo un cuadrado. Por ejemplo una que coja desde la coordenada 1,1 hasta la 5,10 y la rellene con un simbolo dado -por ejemplo, "rellenar( 1, 1, 5, 10, 255)". Esto rellenaria las coordenadas antes dadas con el simbolo ascii 255. Es facil, con un par de bucles.-.

Esa funcion te ayudara bastante para dibujar el mapa ;)

  • davidlie

  • TERRESTRIS VERITAS

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

Escrito 19 abril 2009 - 21:42

bendita explicación me as dado joder!!! en serio gracias.
la funcin enum no la e usado nunca, se que existia pero pensaba que era solo para hacer menus y tal y para eso usaba el swith y el case.
primero are lo que es el mapa. creo que me va a ser lo mas dificil. luego ya metere el personaje y luego trampas, enemigos etc
me parece un proyecto muy grande para mi pero lo are o por lo menos lo intentare
lo malo se que dejare el curso de lado aunque el que sigo es uno echo por afionados XD no e visto cosas como lo de boll( se que es lo de true y false )pero nada mas y lo de los punteros que eso ya no se lo que es.
estas dos cosas seran importantes o se utlizan???
animo david con dos huevos!!!

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



  • Ellolo17

  • Zodiark

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

Escrito 20 abril 2009 - 15:01

Enum no es una funcion, es para crearte variables de ese tipo.

Por ejemplo, con el enum pnj

-te recuerdo, este enum es asi:
Enum pnj
posx
posy
estado
-
Se pondria luego:

pnj /*este es el tipo de variable, para eso se usa el enum*/ pnj1
pnj1.x = 5 -con eso se le da el valor 5 a la variable que controla la coordenada x del objeto-
pnj1.y= 10 -y con esto la coordenada y. Asi que el juego sabe que el personaje esta en la posicion 5,10 del escenario-
pnj1.estado = 0 -con eso se le indica que el personaje ejecuta el codigo correspondiente a ese estado-

Para menus yo tambien uso un case, pero en mi caso al no haber objetos para el dakbasic para ver si el raton esta encima de las coordenadas de un boton y que boton esta pulsando-

Yo primero trataria el movimiento del personaje en un mundo infinito, luego añadiria un enemigo, y luego una cosa de cada cosa que vaya a poner -pnj, objetos, llaves, puertas- para asegurarme que va todo bien.

El escenario se suele dejar para cuando todo eso esta hecho. Asi es mas facil sustituir algo y saber que va a funcionar seguro.

Los punteros es basicamente y para que te hagas una idea rapida, para no sobrecargar mucho al ordenador. Es una variable que guarda la posicion en memoria de unos datos.

Por cierto, creo que me he confundido con lo de las variables esas -fallo mio-, que en mi lenguaje se declara como "type" y como hace mucho que no hago c me han bailado los conceptos. Releyendo esto creo que era con Struct. Echale un ojo a ver ;)

Un saludo.


EDIT:::::::::::::::
Ok, revisado ahora mismo. Si, me habia equivocado... era Struct... Creo que tendre que hacer un cursillo de refresco de todo esto :( porque veo que si algun dia quiero volver a c o a usar un lenguaje basado en el me quedare rodeado de bugs por todas partes XD

  • davidlie

  • TERRESTRIS VERITAS

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

Escrito 20 abril 2009 - 16:22

gracias por las explicaciones pero ya empiezan los problemas XD
a ver como es la primera vez que manejo cadenas de texto
ago esto

char jugador=233;
char suelo;
cout <<"el jugador es " <
compila etc etc y a la hora de ejecutar pone que el jugador es Ú cuando tendria que ser el circulo con la m :S

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



  • Ellolo17

  • Zodiark

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

Escrito 20 abril 2009 - 17:43

Mmmm... Ahora mismo no sabria decirte bien.

Si no encuentras un tuto por la red -te recomiendo la pagina cconclase, que consultaba masivamente en mi epoca de estudiante- te mirare entre mis apuntes y todo eso ;)

Un saludo.

  • davidlie

  • TERRESTRIS VERITAS

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

Escrito 20 abril 2009 - 18:02

Mmmm... Ahora mismo no sabria decirte bien.

Si no encuentras un tuto por la red -te recomiendo la pagina cconclase, que consultaba masivamente en mi epoca de estudiante- te mirare entre mis apuntes y todo eso ;)

Un saludo.


si en esa pagina tambien miro muchas cosas.
pero como digiste que el simbolo ese era el que utilizabas y tal pues me anime y se ve que no. a ver si miro ^^

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



  • davidlie

  • TERRESTRIS VERITAS

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

Escrito 20 abril 2009 - 18:15

estube mirando y en todas las tablas ascii me pone eso.
uso el compilador dev-c++ podra ser por eso?


-----------------------------------------------------------------------------
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