Jump to content

Palabras cruzadas (Word Crosses) en C


Recommended Posts

Bueno el problema es asi

Ejemplo de entrada:

MATCHES CHEESECAKE PICNIC EXCUSES

 

Sample output

 

C

H

E

E

S

E E

C X

MATCHES PICNIC

K U

E S

E

S

//se deja un espacio antes de otra instruccion u otras palabras a ingresar

# //Con este simbolo se le dice al programa que debe terminar.

user$

 

 

//Bueno ese es el programa en si , ahora en lo que necesito ayuda es como posicionar las palabras y los caracteres de esta forma(Es obligatorio que las palabras cruzadas queden alineadas).

NO quiero que me hagan la tarea solo pido ayuda de como hacerlo. :) :)

 

 

//EDIT

ya que al publicar el mje las palabras cruzadas no se ven bien

aca les dejo el link para que vean como tienen que formarse.

 

Tarea

Edited by tuinvl
Link to comment
Share on other sites

Complejita la tarea que te dieron cumpita

Vamos desglosando de mas grande a mas chico.

 

----------------

 

Antes que todo de todo, el tablero debe ser asi:

tablero[x][y]. osea es como un plano cartesiano.

V:palabra vertical

H:palabra horizontal

 

------------------------------------------------

 

Primero debes tener una base de dato con todas las palabras en español de modo que la pc pueda dicernir si la(s) palabra(s) introducida y generadas por el cruce existen. ya que si no fuera asi el juego no tendria gracia, seria meter y meter palabras en un array... 0 aporte la tarea.

 

----------------

 

El analisis e ingreso de palabras lo dejo para el final*

 

----------------

 

Segundo debes preocuparte que la palabra ingresada no salga del tablero eso se logra de esta manera

V:

yInicial+largoPalabra-1<=Y

H:

xInicial+largoPalabra-1<=X

 

----------------

 

Tercero el ingreso de palabras debe cumplir lo siguente:

La palabra ingresada debe intersectar con una palabra antigua. (debe cursarse con una), la manera de

lograr eso es sencilla.

V:

Recorrer todo el Y del X dado, y verificar que exista una letra.

Es decir

tablero[xDado][yInicial+recorreriendoY] hay letras?

H:

Recorrer todo el X del Y dado, y verificar que exista una letra

Es decir

tablero[xInicial+recorriendoX][yDado] hay letras?

 

La interseccion de letras (palabra nueva-palabra antigua(s)), deben concidir. esta es igual de sencillo:

Analizar la posicion de cada letra de la palabra y verificarla en el tablero.

V:

tablero[yDado][xInicial+recorriendoX] = palabra[recorriendoX]

H:

tablero[yInicial+recorriendoY][xDado] = palabra[recorriendoY]

 

----------------

Eso seria principalmente el esqueleto del juego....

 

*:

 

La forma de agregar palabras o analizarlas es asi:

 

H:

for(int x=xInicial; x<xInicial+largoPalabra-1; x++){

añadir = tablero[x][yDado]

}

 

V:

 

for(int y=yInicial; y<yInicial+largoPalabra-1; y++){

añadir = tablero[xDado][y]

}

 

----------------

Eso seria como las venas del programa, y ya los musculos seria ver que si cada vez que agregas una palabra se generan nuevas, en este caso analizando horizontal o verticalmente, RECORRE la palabra, pensnado que cada letra asi:

 

789

456

123

 

siendo 5 la letra recorrida para:

V:

Si en 4,6; hay una letra presente, revizar que la palabra nueva generada exista...

ejemplo

 

posicion = palabra[xDado][yInicial+recorriendoY]

contiguo1 = palabra[xDado--][yInicial+recorriendoY]

contiguo2 = palabra[xDado++][yInicial+recorriendoY]

hay letras en contiguo1 o contiguo2?

 

H:

Si en 2,8; hay una letra presente, revizar que la palabra nueva generada exista...

 

posicion = palabra[xInicial+recorriendoX][yDado]

contiguo1 = palabra[xInicial+recorriendoX][yDado--]

contiguo2 = palabra[xInicial+recorriendoX][yDado++]

hay letras en contiguo1 o contiguo2?

 

 

----------------

 

Eso es el juego en su totalidad, creo que no me salto nada...

 

Bueno viendo de lejos no veo la necesidad de recursividad ni cosas complejas se puede programar con poco conocimiento supongo...

 

Si tienes dudas me dices

 

Denuevo espero no haberme saltado nada

Edited by alvaroxz
Link to comment
Share on other sites

ufff, que difícil

 

costo, pero salio. :)

 

Me enfoque solo en la parte de procesar las palabras, lo de la lectura desde un archivo es lo de menos creo.

No se si sera la mejor solución, pero me salio una función como con 500 if y 250 else....

 

Imagen IPB

 

Como dicen anteriormente l@s colegas de arriba, recorres en 2 for anidados cada posición del primer par de letras (Como una matriz) y vas comparando cada letra si son iguales, cuando esto ocurra, guardas el indice de cada palabra en el que compartían una misma letra, luego te sales de los dos for.

 

Para mostrar las palabras de la forma que lo piden, nuevamente a través de 2 for anidados, preguntas, cuando la posicion en x sea igual al indice de la palabra, muestras una letra de la palabra vertical y asi sucesivamente tambien en el caso de las posiciones horizontales.

 

Por cada ciclo finalizado del for que recorre verticalmente, das un salto de linea (\n), por cada posicion en donde no corresponde escribir una letra, escribes un espacio.

 

 

saludos

Edited by RigoPerdido
Link to comment
Share on other sites

  • 4 months later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...