2012-04-30 55 views
1

所以我一直在学习Java大约8周,并且我不得不设计一个形状猜测游戏。是的,它是家庭作业。所以我用下面的一个例子构建了我的四个形状类。使用JOptionPane进行猜测游戏 - 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.多少面? 2.双方长度相同吗? 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];    

    } 

} 

任何人读到这里,可能有时间来启发我。这将非常感激。

感谢,

+0

提示:您需要某种循环和布尔值来确定游戏是否应该继续。 –

+0

我知道我需要使用While循环,但我甚至不知道从哪里开始。我从来没有必须使用JOptionPane。 – Anderscc

+0

我会先尝试让你的游戏在命令行上工作。在你所有的逻辑中放一段时间,让用户猜测。一旦你有这个工作,你应该把它放到一个GUI中。这里有一个教程:http://docs.oracle.com/javase/tutorial/uiswing/components/dialog.html –

回答

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或使用该整数的开关/大小写。 (或者,将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"; 
    } 
} 

每平方对象会是这个样子,所以没有它应该是一个参数。这是广场定义的一部分。

+0

非常感谢。现在为我清理了很多东西。我对自己需要去的地方更加自信。再次感谢。 – Anderscc