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<Word> 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<Word> 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){
                                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().charAt(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: " + hope.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猜词游戏的资料请关注我们其它相关文章!

(0)

相关推荐

  • java实战之猜字小游戏

    一.题目描述 二.思路 语法基础:StringBuilder 类似列表,可以更改元素. package Practice; public class tt { public static void main(String[] args) { String str = "banana"; System.out.println(str.indexOf('z')); // -1 System.out.println(str.indexOf('a', 2)); // 3 StringBuild

  • java实现猜字母游戏

    本文实例为大家分享了java实现猜字母游戏的具体代码,供大家参考,具体内容如下 案例需求: StepOne: 系统随机生成一组随机的字符数组(不重复) StepTwo: 控制台输入一组字符串与系统生成的字符数组进行对比 StepThree: 若控制台输入与系统随机生成的不符则提示字符正确个数及对位正确个数 StepFour: 若控制台输入与系统随机生成的完全一致则提示"恭喜你猜对了,游戏结束"程序退出.若不完全一致则需要一直猜 StepFive: 若控制台输入的是EXIT则提示&quo

  • Java控制台实现猜拳游戏

    本文实例为大家分享了Java控制台实现猜拳游戏的具体代码,供大家参考,具体内容如下 1.目标 通过控制台实现一个人机对战的猜拳游戏,用户通过输入(1.剪刀 2.石头 3.布),机器随机生成(1.剪刀 2.石头 3.布),胜者积分,n 局以后通过积分的多少判定胜负. 2.源码 根据目标的要求,可以大概知道,我们需要的类有: ①一个用户类User,用于获得和存储用户的出拳: ②一个机器人的类Robot,用于随机生成机器人的出拳: ③一个Game类,是存放核心代码的类,用户和机器人的出拳在这里进行对比

  • java实现简单猜拳小游戏

    本文实例为大家分享了java实现猜拳小游戏的具体代码,供大家参考,具体内容如下 User.java import java.util.Scanner; public class User { String name; int score; public int showFist(){ System.out.println ("请出拳:1.剪刀\t2.石头\t3.布"); Scanner input=new Scanner ( System.in ); int choice=input.

  • java实现简单的猜数字小游戏

    本文实例为大家分享了java实现简单的猜数字的具体代码,供大家参考,具体内容如下 题目描述: 猜数字(又称 Bulls and Cows )是一种古老的的密码破译类益智类小游戏,起源于20世纪中期,一般由两个人或多人玩,也可以由一个人和电脑玩.通常由两个人玩,一方出数字,一方猜.出数字的人要想好一个没有重复数字的4个数,不能让猜的人知道.猜的人就可以开始猜.每猜一个数字,出数者就要根据这个数字给出nAmB,其中A前面的数字n表示数字正确且位置也正确的数的个数,而B前的数字m表示数字正确但位置不正

  • 使用java实现猜拳小游戏

    本文实例为大家分享了java实现猜拳小游戏的具体代码,供大家参考,具体内容如下 实现下图要求 public class User { private String u_name; private int u_score; public User() { super(); } public User(String name, int score) { super(); this.u_name = name; this.u_score = score; } public String getName

  • Java编写简单猜数游戏

    Java基础编写猜数游戏,供大家参考,具体内容如下 设计内容及要求 产生一个100以内的随机数,游戏者进行猜数,猜中即胜,猜不中,提示是大了还是小了,继续猜,直至猜对为止.游戏结束后计算出玩家所猜的次数. 目的及意义 通过猜数游戏的设计过程,深刻了解掌握面向对象程序设计语言Java的j核心概念和特性: 了解编程技术知识,会处理异常情况. 掌握Java应用软件的开发环境和开发过程: 灵活选择程序设计思想. 思路 使用Random()函数生成一个100以内的随机数,作为被猜数字. 使用Scanner

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

    目录 前言 主要设计 功能截图 代码实现 游戏启动类 处理 单词判断 总结 前言 <英文猜词游戏>代码行数没有超过200行,是之前为了背英语单词,特意研发的小游戏. 主要设计 1.事先准备单词文本. 2.为了让玩家能与程序互动,使用下面这个命令可达效果 Scanner sc = new Scanner(System.in); 3.运行WordleMaster里的main方法 4.在Wordle中输入第一个单词(默认第一个单词是abort,会显示在console中.可在代码中修改) 5.将Wor

  • 使用c#实现随机数猜数游戏的示例代码

    本文主要介绍了使用c#实现随机数猜数游戏,分享给大家,具体如下: using System;//在任何 C# 程序中的第一条语句都是:using System的意思是引用名称为baiSystem的命名空间 using System.Runtime.InteropServices.ComTypes;//c#语言的互操作服务, namespace ConsoleApp5//namespace 声明.一个 namespace 里包含了一系列的类. { class Program//定义类名 { sta

  • 通过Python实现猜灯谜游戏的示例代码

    目录 导语 猜灯谜界面 程序讲解 构造初始界面 构造灯谜类对象 监控鼠标事件 源码 导语 新的一年迎来了元宵节,元宵佳节在陪伴家人的同时,自然也少不了赏花灯,猜灯谜的项目.当然,受到疫情的影响,许多地方今年无法出门赏花灯,猜灯谜. 但是不要紧,小编昨晚用Python弄了一猜灯谜的小程序让大家享受一把猜灯谜乐趣 猜灯谜界面 来看一下猜灯谜的小程序是怎么玩的.先看一下效果图: 程序讲解 构造初始界面 对于程序界面的构造,利用的是python3.6版本下安装2.0.1版本的pygame库.其界面的初始

  • Java实现经典捕鱼达人游戏的示例代码

    目录 前言 主要设计 功能截图 代码实现 游戏窗体 鱼 鱼池类继承自Jpanel 总结 前言 <捕鱼达人>是一款以深海狩猎为题材的休闲竞技游戏.这是一场海底世界的远征,享受捕获大鱼的乐趣,但不是所有的鱼都是友善的,它们会用自己的方式保护自己,保卫属于自己的海底世界.当然,这里也是冒险与机遇共存的地方,诸多埋藏于海底的宝藏等待着被探寻. 游戏是用java语言实现,采用了swing技术进行了界面化处理,设计思路用了面向对象思想. 主要需求 在鱼池中有很多鱼,鱼各自游动. 有一张渔网,随鼠标移动,点

  • Java实现接月饼小游戏的示例代码

    目录 前言 主要设计 功能截图 代码实现 游戏启动类 核心类 画面绘制 总结 前言 <接月饼小游戏>是一个基于java的自制游戏,不要被月亮砸到,尽可能地多接月饼. 此小项目可用来巩固JAVA基础语法,swing的技巧用法. 主要设计 设计游戏界面,用swing实现 设计背景 设计得分物体-月饼,碰到加一分 设计障碍物-月亮,碰到会死亡 监听鼠标的左右键,用来控制篮子左右移动 设计积分系统 将resource文件夹设为resource(Project Manage中可以设置),因为要用里面的图

  • Java实现蓝桥杯数独游戏的示例代码

    你一定听说过"数独"游戏. 如图,玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行.每一列.每一个同色九宫内的数字均含1-9,不重复. 数独的答案都是唯一的,所以,多个解也称为无解. 本图的数字据说是芬兰数学家花了3个月的时间设计出来的较难的题目.但对会使用计算机编程的你来说,恐怕易如反掌了. 本题的要求就是输入数独题目,程序输出数独的唯一解.我们保证所有已知数据的格式都是合法的,并且题目有唯一的解. 格式要求: 输入9行,每行9个数字,0代表未知,其它数字为

  • Java实现的猜数字游戏示例

    本文实例讲述了Java实现的猜数字游戏.分享给大家供大家参考,具体如下: 这里演示一段java语言猜数字代码,流程如下: 系统随机生成0-9中的不重复四位数字. 然后用户输入四个数字 如果数字对了,位置不对 则显示 nB,n是有几个是位置对的. 如果数字对了,位置也是对的 则显示mA,m代表有几个数字是正确位置上的. 例如:  生成的是0369    用户输入的是0396 则显示2A2B,两个位置是正确并且数字正确的,另外两个是数字正确,位置不正确的. Java代码: package com.e

  • Java实现经典角色扮演侦探游戏游戏的示例代码

    目录 前言 游戏背景 主要需求 主要设计 功能截图 代码实现 游戏主界面 主卧 初始化 大厅 总结 前言 游戏背景 百变山庄坐落于太平洋的一座小岛上,山庄主人亦是小岛的主人.这个神秘主人细致周到,邀请函里不仅附着往返港口的机票,港口的邮船也是通往小岛的专线. 初登小岛,恢宏大气的山庄直入眼帘,通过门廊,金碧辉煌的大厅震人心魄. 受邀的侦探们陆续到齐,[侍者]彬彬有礼地站在一旁,他安排你们围坐在一个奇特十边形的桌子旁稍加等待.[侦探指尖]回忆着自己临行前调查的各位名侦探的资料,除了那个神秘的[电话

  • java实现简单猜数字游戏

    本文实例为大家分享了java实现猜数字游戏的具体代码,供大家参考,具体内容如下 1.游戏分析: 游戏第一步:需要一个随机数,并且该随机数有范围:(java的包中有一个Random类可产生随机数,需要导入这个包,如下) 游戏第二步:猜数字的设计,猜的次数为5次 2.编程实现: import java.util.Random; import java.util.Scanner; public class Guess_num { public static void main(String[] arg

  • java语言实现猜数字游戏

    本文实例为大家分享了java实现猜数字游戏的具体代码,供大家参考,具体内容如下 随机生成0~100的数字,通过控制台输入猜测数字,输出进行提示,知道猜测正确后,结束本次猜数字游戏,从而决定是否需要重新玩 代码如下: import java.util.Random; import java.util.Scanner; public class GuessNumber1{ public static Scanner scanner = new Scanner(System.in);//输入 publ

随机推荐