Java实现英文猜词游戏的示例代码

网友投稿 281 2022-08-26


Java实现英文猜词游戏的示例代码

目录前言主要设计功能截图代码实现游戏启动类处理单词判断总结

前言

《英文猜词游戏》代码行数没有超过200行,是之前为了背英语单词,特意研发的小游戏。

主要设计

1.事先准备单词文本。

2.为了让玩家能与程序互动,使用下面这个命令可达效果

Scanner sc = new Scanner(System.in);

3.运行WordleMaster里的main方法

4.在Wordle中输入第一个单词(默认第一个单词是abort,会显示在console中。可在代码中修改)

5.将Wordle中的判定结果输入到console中。

0表示不包含该字母,即灰色。1表示包含该字母,但是位置不正确,即黄色。2表示包含该字母且在正确的位置,即绿色。

6.在console输出的结果中选择一个单词输入Wordle中,并在console中输入该词的序号。

7.重复5-6步,直至找到正确答案。

功能截图

游戏开始:

输入单词(这个单词可以自己设定)

代码实现

游戏启动类

public class WordleMaster {

public static void main(String[] args) throws IOException {

final String DEFAULT_FIRST_WORD = "abort";

Scanner sc = new Scanner(System.in);

System.out.println("欢迎使用 wordle-master !请在Wordle游戏中输入第一个单词:(输入回车则默认使用abort作为初始词)");

System.out.println("提示:英文单词长度要为5!");

Word lastWord = new Word(sc.nextLine());

while (!lastWord.isValid()) {

if (lastWord.getWord().equals("")) {

lastWord = new Word(DEFAULT_FIRST_WORD);

break;

}

System.out.println("请输入一个有效的单词!");

lastWord = new Word(sc.nextLine());

}

System.out.println("初始词为:" + lastWord.getWord());

Pattern pattern = new Pattern();

// 输入Wordle结果

int[] res = pattern.result();

// 读取所有的单词

List allWords = new ArrayList<>();

File file = new File("wordle_words.txt");

InputStreamReader reader = new InputStreamReader(new FileInputStream(file));

BufferedReader bufferedReader = new BufferedReader(reader);

String word = bufferedReader.readLine();

while (word != null){

Word w = new Word(word);

allWords.add(w);

word = bufferedReader.readLine();

}

bufferedReader.close();

reader.close();

// 符合条件的单词

List hope = allWords;

while (hope.size() > 1){

for (int i = 0; i < res.length; i++) {

int finalI = i;

Word finalLastWord = lastWord;

// 如果出现单词中有两个相同字母的情况(如cheer)

for (int j = 0; j < finalLastWord.getWord().length(); j++) {

for (int k = j + 1; k < finalLastWord.getWord().length(); k++) {

if (finalLastWord.getWord().charAt(j) == finalLastWord.getWord().charAt(k)){

if (res[j] == 0 && res[k] != 0){

res[j] = 3;

hope.remove(lastWord);

}else if(res[j] != 0 && res[k] == 0){

kOBFjFlhU res[k] = 3;

hope.remove(lastWord);

}

}

}

}

switch (res[i]) {

case 0:

hope = hope.stream().filter(w -> w.notInclude(finalLastWord.getWord().charAt(finalI))).collect(Collectors.toList());

break;

case 2:

hope = hope.stream().filter(w -> w.getWord().charAt(finalI) == finalLastWord.getWord().charhttp://At(finalI)).collect(Collectors.toList());

break;

case 1:

hope = hope.stream().filter(w -> w.notLocate(finalLastWord.getWord().charAt(finalI), finalI)).collect(Collectors.toList());

break;

default:

}

}

System.out.println("size: " + hhttp://ope.size());

for (int i = 0; i < Math.min(10, hope.size()); i++) {

System.out.print(i + ". " + hope.get(i).getWord() + " ");

}

System.out.println();

if (hope.size() > 1) {

Scanner scanner = new Scanner(System.in);

int chose = Integer.MAX_VALUE;

while (chose > 9 || chose < 0) {

System.out.println("请选择一个:");

String s = scanner.nextLine();

chose = s.length() == 1 ? Integer.parseInt(s) : Integer.MAX_VALUE;

}

lastWord = hope.get(chose);

System.out.println(lastWord.getWord());

res = pattern.result();

}

}

}

}

处理

public class Pattern {

private int[] pattern;

/**

* 输入wordle结果,五位数字组成。

* 0:The letter is not in the word in any spot.

* 1:The letter is in the word and in the correct spot.

* 2:The letter is in the word but in the wrong spot.

* @return int数组

*/

public int[] result(){

String s = "";

while (input(s) == null){

System.out.println("输入单词判定结果:0为灰色,1为黄色,2为绿色。例如10120。");

Scanner scanner = new Scanner(System.in);

s = scanner.nextLine();

}

pattern = input(s);

return pattern;

}

public int[] input(String s){

if (s.length() != 5) return null;

int[] res = new int[5];

for (int i = 0; i < s.length(); i++) {

if (s.charAt(i) < '0' || s.charAt(i) > '2') {

return null;

}

res[i] = s.charAt(i) - '0';

}

return res;

}

public int[] getPattern() {

return pattern;

}

}

单词判断

public class Word {

private final String word;

Word(String word){

this.word = word;

}

public boolean notInclude(char c){

return !word.contains(String.valueOf(c));

}

public boolean notLocate(char c, int i){

return word.contains(String.valueOf(c)) && word.charAt(i) != c;

}

public String getWord(){

return this.word;

}

public boolean isValid() {

if (word.length() != 5) {

return false;

}

for (int i = 0; i < word.length(); i++) {

if (word.charAt(i) < 'a' || word.charAt(i) > 'z') {

return false;

}

}

return true;

}

}

总结

通过此次的《英文猜词游戏》实现,让我对java的相关知识有了进一步的了解,对java这门语言也有了比以前更深刻的认识。

java的一些基本语法,比如数据类型、运算符、程序流程控制和数组等,理解更加透彻。java最核心的核心就是面向对象思想,对于这一个概念,终于悟到了一些。

以上就是Java实现英文猜词游戏的示例代码的详细内容,更多关于Java猜词游戏的资料请关注我们其它相关文章!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:TensorFlow入门(tensorflow入门显卡)
下一篇:python tensorflow框架(python是什么意思)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~