因此,我正在编写一个程序,它应该生成一个随机的纵横填字游戏。我有一个方法读取一个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) + "*");
}
}正如你所知道的,拥有一个纵横填字游戏,也有填充未使用的方块,我需要使用一个"*“来代表未使用的方块。任何帮助都将不胜感激。
发布于 2020-12-10 07:05:52
您应该将“显示纵横填字游戏”逻辑与“填写纵横填字游戏”逻辑分开。通常,您将构建一个Crossword类,其中包含二维字符数组(您有一个二维字符串数组-但我认为字符更好),并将提供一个toString()方法来执行“显示纵横填字游戏”。您还可以使用addWord(String word)方法将一个单词添加到纵横填字游戏中--这是代码中当前缺少的部分。
构建纵横填字游戏需要:
创建空的new Crossword(rows, cols)的
在循环中添加
boolean full = false;while (!full) { //选择一个单词int randomNumber = randomNumber();String randomWord = words.get(randomNumber);words.remove(randomNumber);//如果(!crossword.addWord(randomWord)) { full = true;} }
添加一个单词需要搜索一个可以放置该单词的空格,但为了节省空间并获得一个纵横填字游戏,您实际上希望与纵横填字游戏中的现有单词共享至少一个字母--除了放置的第一个单词,它不能共享任何内容。如果你的纵横填字游戏看起来像这样,就更容易知道它是否是空的:
public class Crossword {
private Char[][] letters;
private int rows, cols;
private int totalWords; // incremented by 1 after each successful addWord
public boolean addWord(String word) { /* your implementation here */}
public String toString() { /* your printing code here */ }
}毫无疑问,最难的部分是来自addWord的“找到适合新词的位置”逻辑。您可以使用一些辅助方法来简化这一过程:
// inside Crossword class
// returns true if word fits vertically with 1st letter at letters[col][row]
private boolean fitsVertical(int row, int col, String word);
// returns true if word fits horizontally with 1st letter at letters[col][row]
private boolean fitsHorizontal(int row, int col, String word);https://stackoverflow.com/questions/65225833
复制相似问题