使用JOptionPane猜测游戏 - Java

时间:2012-04-30 18:43:06

标签: java while-loop joptionpane

所以我已经学习了大约8周的Java,而且我必须设计一个形状猜测游戏。是的,它是家庭作业。所以我已经构建了我的四个形状类,下面是一个示例。

public class square extends shape {

    //square member variables
    boolean equalSides = true;

    // check if sides are equal
    public boolean isEqual() {
        return equalSides;
    }

    //constructor
    public square(int numsides, String shapeName, boolean b, String shapehint) {
        super(numsides, shapeName, shapehint);
    }
}

然后我创建了一个shape.java类

public class shape {

    int numSides;
    String shapeName;
    String shapeHint;

    public shape(int numsides, String shapename, String shapehint) {
        numSides = numsides;
        shapename = shapeName;
        shapehint = shapeHint;
    }

    //getter methods
    public int getSides() { 
        return numSides;
    }
    public String getName(){    
        return shapeName;
    }
    public String getHint(){
        return shapeHint;
    }
}

现在我已经达到了shapeGuesser课程,我开始挣扎一下。我不确定如何为我的游戏和JOptionPane方面加入一个后卫。我需要shapeGuesser运行,直到用户猜出正确的形状。

我已被指示在开始时向用户显示此选项。

我应该问什么问题?

输入数字: 1.多少方面? 你的身边长度一样吗? 3.提示

根据您输入1,2或3的数字。将询问该问题 形状。所以你的Shape必须准备好适当的响应。

import javax.swing.JOptionPane;
import java.util.Random;


public class shapeGuesser {
    public static void main(String[] args, Object Do) {
        // TODO Auto-generated method stub
        // the shape the program uses

        int random;         
        shape shapeChoice;      
        // create shapes
        square s = new 
                square(4, "Square", true, "Geeks were called this in the 80s");
        Rectangle r = new Rectangle(4, "Rectangle", false, "Not Pentangle");
        Triangle t = new Triangle(3, "Triangle",false, "Toblerone");
        Circle c = new Circle(0, "Circle",true, "Circle Circle Circle");

        //declare shape array
        shape[] Shapes;

        //create shape array
        Shapes = new shape[4];

        //put shape objects in shape array
        Shapes[0] = s;
        Shapes[1] = r;
        Shapes[2] = t;
        Shapes[3] = c;

        // generate random number
        random = (int) (1 + (Math.random() * 3));

        //pick shape from shape array based on random number
        shapeChoice = Shapes[random];               

    }

}

任何读过这篇文章的人,无论如何都可能有时间开导我。非常感谢。

谢谢,

1 个答案:

答案 0 :(得分:1)

isEqual()需要基类中的实现,形状,以及要在所有形状上调用的所有方法。使基本形状返回false。 (理想情况下,形状应该是抽象的,所以你不能有一个基本的形状对象,只有正方形,矩形等,但它没关系,你是新的,没有其他人会使用它。所以你自己可以永远不会创建一个基础形状但是对于未来,这就是抽象是为了^^)然后,让你所有的其他形状覆盖你的方格已经做的基础isEqual()。

你做得很好!您选择了一个随机形状,并创建了许多形状。

现在创建一个打印选项的循环

system.out.println("Enter Number: 1.How many sides? 2.Are your sides the same length? 3. Hint");

然后获取用户输入,并将其解析为整数。使用该整数使用if / else / else或switch / case。 (或者,使用if / else / else和字符串,但确保使用.equals()而不是==)

所以现在你问了一个问题,然后选了一个问题。现在你打印出来

if(userInput.equals("1")){
system.outprintln("How many sides? " + shapeChoice.getSides());
}

为2和3做同样的事情。你将处理一个shapeChoice,所以你必须调用形状的基本方法。但是,在运行时,如果对象是方形或矩形,当您调用shapeChoice.getSides()时,它将调用方形或矩形实现,为您提供所需的答案! :)

然后你所要做的就是循环回来,一遍又一遍地问问题,如果用户想要,让他猜,并检查他的答案! (比较.equals(shapeChoice.getName()))

所以有一个很长的(真正的)永远循环,在其中你可以问一个问题,然后检查他们是否想要回答。如果他们回答正确,你会爆发。否则,你回过头来,不断询问他们想要的提示。

编辑:实际上,现在我看一下,因为你正在练习多态,你应该多用一点。现在,您拥有单独的类,但在构建它们时,您将传递所有信息。而不是:

square s = new square(4, "Square", true, "Geeks were called this in the 80s");
Rectangle r = new Rectangle(4, "Rectangle", false, "Not Pentangle");

更像是

square s = new square();

并且正方形定义的一部分固有地定义

public class square extends shape {
//square member variables
boolean equalSides = true;
int numSides = 4;
//and so on

//OR even better, don't define them, since the base class already does!
//merely set the values in the constructor
public square(){
       numSides = 4;
       equalSides = true;
       shapeHint = "Geeks were called this in the 80s";
    }
} 

每个方形对象都是这样的,所以没有理由它应该是一个参数。这是广场定义的一部分。