2012-04-30 2 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.Что будет задан вопрос об этом . Таким образом, ваша форма должна иметь соответствующий ответ.

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

Я бы начал с попытки заставить вашу игру работать в командной строке. Положите время вокруг всей вашей логики и угадайте, что пользователь. Как только вы начнете работать, вы должны поместить его в графический интерфейс. Вот учебник: 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 или переключатель/case, используя это целое число. (альтернативно, используйте if/else/else со строкой, как есть, но обязательно используйте .equals() not ==)

Итак, теперь вы задали вопрос и выбрали его. Теперь вы распечатать

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

Сделайте то же самое для 2 и 3. Вы будете иметь дело с shapeChoice, так что вы должны вызвать базовые методы формы. Однако во время выполнения, если объект является квадратом или прямоугольником, когда вы вызываете shapeChoice.getSides(), он будет вызывать реализацию квадрата или прямоугольника, давая вам ответ, который вы хотите! :)

Тогда все, что вам нужно сделать, это вернуться назад, задать вопрос снова и снова, и если пользователь захочет, дайте ему угадать и проверьте его ответ! (сравните .equals (shapeChoice.getName()))

так что у вас есть большой цикл while (true) forever, внутри которого вы можете задать вопрос, а затем проверить, хотят ли они ответить. Если они правильно ответят, вы вырветесь. В противном случае вы обходите назад и продолжаете спрашивать, какой намек им хотелось.

EDIT: На самом деле, теперь, когда я смотрю на него, поскольку вы практикуете полиморфизм, вам, вероятно, следует использовать его немного больше. Прямо сейчас, у вас есть свои отдельные классы, но вы передаете всю свою информацию при их создании. Вместо того, чтобы:

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

Смежные вопросы