猜猜电脑变聪明的游戏

时间:2016-02-10 14:55:06

标签: java machine-learning

我试图制作一个猜谜游戏,计算机在每次猜测后都会变得更聪明。这是一个示例运行: (计算机正在猜测你正在考虑的动物)

{{1}}

到目前为止,这是我的代码:

{{1}}

我假设有一种更简单的方法来实现这一点(可能是二叉树),但我无法弄明白。我不想要完整的解决方案,我只想指出正确的方向。

4 个答案:

答案 0 :(得分:1)

首先,尝试创建更小的方法,这样一切都更容易阅读。

第二次通知,你添加问题和动物,但不要包含任何匹配这些的东西。你的计算机只是猜测一个随机的动物,从不排除任何动物。

示例:

  

Q1:是的

     

动物:马,狗

     

Q1:否

     

动物:马,狗

如果Q1与Dog有关,那么如果之后没有正确猜对,你应该从可能的答案中删除它。

答案 1 :(得分:1)

最好的方法可能是拥有一个具有答案ArrayList的Animal类。您还需要一个问题的ArrayList,具有相同的排序顺序。现在,你可以复制所有动物的清单并找出问题所不适合的动物。为此,您只需循环查看所有问题,并检查您复制的动物列表是否合适。

你的动物类可能看起来不会比这更复杂:

class Animal {

    ArrayList<Answer> answers;

    public Animal() {
        answers = new ArrayList<Answer>();
    }

    public Answer checkQuestion(int questionId) { ... }

    public void setAnswerToQuestion(int questionId, Answer answer) { ... }

}

这里的答案应该是Enum,其中包括“Yes / True”,“No / False”和“Unkown”的可能性。

通过这个,您可以计算每只动物的相对可能性,甚至可以跳过不必要的问题。

答案 2 :(得分:0)

在我看来,这似乎是一个分类问题。你想根据一组属性发现它是什么动物。

由于您想将它们标记为问题,我建议使用基于规则或基于树的系统。您可以查看决策树系统,如J48。每次用户回答问题时,请重新训练模型。然后你可以问问题并按照你的树到叶子节点。

你可以看看weka,它已经准备好并实现了很多这些方法。

美好的一天

答案 3 :(得分:0)

针对您的问题的示例解决方案

import java.util.Scanner;

class DoesItHaveLegs
{
    public static void main(String[] args)
    {
        Scanner scan = new Scanner(System.in);
        int answer=0;
        int question=0;
        int anotherQuestion=0;
        int actualAnimals=0;
        int roundAbout=0;
        String quitter="YES";
        String userInput=null;
        Animal animal = new Animal();
        do
        {
            userInput="";
            for(int a=0;a<animal.getQuestionsLength();++a)
            {
                userInput="";
                if(a>0)
                {

                    animal.displayQuestion(a);
                    userInput=scan.nextLine();
                    if(userInput.equalsIgnoreCase("Yes"))
                    {
                        answer=a;
                        a=animal.getQuestionsLength();
                    }
                }
                else
                {
                    animal.displayQuestion(a);
                    userInput=scan.nextLine();
                    if(userInput.equalsIgnoreCase("No"))
                    {
                        a=animal.getQuestionsLength();
                    }
                }

            }

            if(userInput.equalsIgnoreCase("Yes"))
            {
                String enteredAnswer=null;

                        if(answer>0)
                        {
                            animal.displayAnswer(answer-1);
                            enteredAnswer=scan.nextLine();
                        }
                        else
                        {
                            animal.displayAnswer(answer);
                            enteredAnswer=scan.nextLine();
                        }
                        if(enteredAnswer.equalsIgnoreCase("Yes"))
                        {
                            System.out.println("Yay I won");
                            System.out.println("Do you want to play again?");
                            quitter=scan.nextLine();
                        }
                        else
                        {
                            animal.giveUpMessage();
                            String enteredAnimal = scan.nextLine();
                            animal.addActualAnimals(enteredAnimal);
                            animal.addAnswers("Is it a "+enteredAnimal);
                            actualAnimals=animal.getActualAnimalsLength()-1;
                            System.out.println("Type a question for which the answer is Yes for "+animal.getActualAnimals(actualAnimals-1)+" but No for "+animal.getActualAnimals(actualAnimals));
                            String enteredQuestion = scan.nextLine();
                            animal.addQuestions(enteredQuestion);
                            System.out.println("Do you want to play again?");
                            quitter=scan.nextLine();

                        }



            }
            else if(userInput.equalsIgnoreCase("No"))
            {
                String enteredAnswer=null;
                for(int i=0;i<=animal.getAnswersLength();++i)
                {
                    if(i==animal.getAnswersLength())
                    {
                        animal.displayAnswer(i-1);
                        enteredAnswer=scan.nextLine();
                        if(enteredAnswer.equalsIgnoreCase("Yes"))
                        {
                            System.out.println("Yay I won");
                            System.out.println("Do you want to play again?");
                            quitter=scan.nextLine();
                        }
                        else
                        {
                            animal.giveUpMessage();
                            String enteredAnimal = scan.nextLine();
                            animal.addActualAnimals(enteredAnimal);
                            animal.addAnswers("Is it a "+enteredAnimal);
                            actualAnimals=animal.getActualAnimalsLength()-1;
                            System.out.println("Type a question for which the answer is Yes for "+animal.getActualAnimals(actualAnimals-1)+" but No for "+animal.getActualAnimals(actualAnimals));
                            String enteredQuestion = scan.nextLine();
                            animal.addQuestions(enteredQuestion);
                            i=animal.getAnswersLength();
                            System.out.println("Do you want to play again?");
                            quitter=scan.nextLine();
                        }
                    }
                }
            }



        }
        while(!(quitter.equalsIgnoreCase("NO")));

    }
}



//another class
import java.util.*;
class Animal
{
    private ArrayList<String> answers;
    private ArrayList<String> questions;

    private ArrayList<String> actualAnimals;
    public Animal()
    {
        answers = new ArrayList<String>();
        questions = new ArrayList<String>();

        actualAnimals=new ArrayList<String>();
        actualAnimals.add("dog");

        questions.add("Does the animal you are thinking of have legs?");
        answers.add("Is it a dog?");
    }
    public String getActualAnimals(int actualAnimal)
    {
        return actualAnimals.get(actualAnimal);
    }
    public String getQuestions(int questionNumber)
    {
        return questions.get(questionNumber);

    }
    public String getAnswers(int answerNumber)
    {
        return answers.get(answerNumber);
    }   
    public void addQuestions(String question)
    {
        questions.add(question);
    }
    public void addAnswers(String answer)
    {
        answers.add(answer);
    }
    public void addActualAnimals(String animal)
    {
        actualAnimals.add(animal);
    }
    public void displayQuestion(int questionNumber)
    {
        System.out.println(questions.get(questionNumber));
    }
    public void displayAnswer(int answer)
    {
        System.out.println(answers.get(answer));
    }

    public void giveUpMessage()
    {
        System.out.println("I give up What was your animal");
    }
    public int getAnswersLength()
    {
        return answers.size();
    }
    public int getQuestionsLength()
    {
        return questions.size();
    }

    public int getActualAnimalsLength()
    {
        return actualAnimals.size();
    }
}