En primer lugar, esto no es tarea;). Intento crear un juego de sopa de letras desde cero y he topado con una barrera en la que necesito orientación.¿Cuál es un método efectivo para atravesar una 2d matriz verticalmente para encontrar programáticamente un conjunto "vacío"?
Estoy usando una matriz 2d de caracteres para la cuadrícula de una sopa de letras. Me siento cómodo colocando palabras en estos arreglos horizontalmente, pero estoy realmente atrapado por ideas sobre cómo hacerlo verticalmente.
Esto es lo que tengo hasta ahora, sólo debe ser capaz de copiar/pegar y ejecutarlo
import java.util.ArrayList;
import java.util.List;
public class WordGame
{
private static List<String> words = new ArrayList<String>();
private static int longestWordLength = 0;
private static int padSize = 4;
private static char[][] grid = null;
public static void main(String[] args)
{
initialiseWords();
workOutLongestWord();
setupGrid();
printIt();
}
private static void printIt()
{
for (int i = 0; i < grid.length; i++)
{
for (int j = 0; j < grid.length; j++)
{
System.out.print(grid[i][j]);
}
System.out.print("\n");
}
}
private static void setupGrid()
{
grid = new char[longestWordLength + padSize][longestWordLength + padSize];
for (int i = 0; i < grid.length; i++)
{
String w = (i >= words.size()) ? "?" : words.get(i);
for (int j = 0; j < grid.length; j++)
{
grid[i][j] = (j >= w.length()) ? '?' : w.charAt(j);
}
}
}
private static void workOutLongestWord()
{
for (String word : words)
{
if (word.length() > longestWordLength)
{
longestWordLength = word.length();
}
}
}
private static void initialiseWords()
{
words.add("monkey");
words.add("cow");
words.add("elephant");
words.add("kangaroo");
}
}
que imprime algo como ...
monkey??????
cow?????????
elephant????
kangaroo????
????????????
????????????
????????????
????????????
????????????
????????????
????????????
????????????
necesito los rellenan aleatoriamente en el lado izquierdo/derecho, pero puedo hacerlo yo mismo.
Pregunta: ¿Cuál es una forma efectiva de intentar colocar palabras verticalmente en una matriz 2D como la anterior? Mi idea inicial fue contar hacia abajo la longitud de palabra requerida, rompiendo si se encuentra algo más que ?
, y seguir haciendo esto hasta que pueda encontrar un espacio para la palabra. Sin embargo, esto no se vuelve bonito una vez que tomo en cuenta la superposición de palabras.
¿Alguna sugerencia?