首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java CrossWord难题

Java CrossWord难题
EN

Stack Overflow用户
提问于 2020-12-10 06:26:34
回答 1查看 162关注 0票数 0

因此,我正在编写一个程序,它应该生成一个随机的纵横填字游戏。我有一个方法读取一个txt文件,该文件有一个大约3000个单词的列表,将其存储到一个数组列表中,并返回该数组列表。我有一个驱动程序方法,它询问用户他们想要的纵横填字游戏的行数和列数,并从那里生成一个随机的字谜游戏。我正在使用一个二维数组来构造整个拼图,但是我不知道如何在拼图中添加单词。这就是我到目前为止应该填充纵横填字游戏的方法( randomNumber方法只是一个返回随机索引的方法,该索引用于访问列表中的随机单词)

代码语言:javascript
复制
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) + "*");
    }
}

正如你所知道的,拥有一个纵横填字游戏,也有填充未使用的方块,我需要使用一个"*“来代表未使用的方块。任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 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;} }

添加一个单词需要搜索一个可以放置该单词的空格,但为了节省空间并获得一个纵横填字游戏,您实际上希望与纵横填字游戏中的现有单词共享至少一个字母--除了放置的第一个单词,它不能共享任何内容。如果你的纵横填字游戏看起来像这样,就更容易知道它是否是空的:

代码语言:javascript
复制
  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的“找到适合新词的位置”逻辑。您可以使用一些辅助方法来简化这一过程:

代码语言:javascript
复制
     // 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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65225833

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档