所以我在做一个程序,它应该会产生一个随机的纵横字谜。我有一个方法读入一个txt文件,这个文件有大约3000个单词的列表,将它存储到数组列表中并返回数组列表。我有一个驱动程序的方法,它要求用户的行和列的数量,他们想要的纵横字谜,并从那里它应该产生一个随机的难题。我用一个二维数组来构建整个拼图,但我不知道如何在拼图中添加单词。这就是我到目前为止对填填纵横字谜的方法所做的(randomnumber方法只是一个返回随机索引的方法,用于访问列表中的随机字)
public static void buildCrossword(ArrayList<String> words, int rows, int columns)
{
String[][] board = new String[rows][columns];
//Picks a random number from the arrayList using a random index from the randomNumber method
int randomNumber = randomNumber();
String randomWord = words.get(randomNumber);
//we remove it right after it is selected to ensure that it doesn't get used again in the puzzle
words.remove(randomNumber);
char[] temp = randomWord.toCharArray();
char[][] word = new char[temp.length][temp.length];
word[0] = temp;
System.out.println("*----".repeat(rows) + "*");
for(int i = 0; i < columns; i++)
{
System.out.println("| ".repeat(rows) + "|");
System.out.println(word[0][i]);
System.out.println("*----" .repeat(rows) + "*");
}
}
你知道,填字游戏中也有未使用的方块,我需要用“*”来表示未使用的方块。任何帮助都将不胜感激。
1条答案
按热度按时间nbysray51#
你应该把你的“显示纵横字谜”逻辑和你的“填写纵横字谜”逻辑分开。通常,您会构建一个
Crossword
类中包含字符的二维数组(您有字符串的二维数组-但我相信字符更好),并将提供toString()
方法做“显示纵横字谜”。你也可以有一个addWord(String word)
方法将一个单词添加到纵横填字游戏中--当前缺少的代码部分。制作填字游戏需要:
创建一个空的,
new Crossword(rows, cols)
在一个循环中,选择要添加的单词,直到它已满;对于每个单词,加上:添加一个单词需要搜索一个可以放置它的空白区域,但是为了节省空间并获得一个纵横填字游戏,实际上您至少需要与纵横填字游戏中现有的单词共享一个字母——除了放置的第一个单词,它不能共享任何内容。如果填字游戏看起来像这样,那么更容易知道它是否为空:
毫无疑问,最难的部分是“找到适合一个新词的地方”的逻辑
addWord
. 您可以使用一些助手方法使其更简单: