Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.ssaurel.twentyquestions;
- import java.awt.BorderLayout;
- import java.awt.Container;
- import java.awt.Dimension;
- import java.awt.Toolkit;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import javax.swing.JButton;
- import javax.swing.JFrame;
- import javax.swing.JPanel;
- import javax.swing.JTextPane;
- import javax.swing.SwingUtilities;
- import javax.swing.text.SimpleAttributeSet;
- import javax.swing.text.StyleConstants;
- import javax.swing.text.StyledDocument;
- // Main class for our Twenty Questions game with a Swing UI
- public class TwentyQuestions {
- private Tree tree;
- private TreeNode currentNode;
- private JButton yesButton, noButton, restartButton;
- private JTextPane textPane; // for displaying the question
- private boolean started = false;
- // btns listener
- private ActionListener btnsListener = new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- Object source = e.getSource();
- if (source == yesButton)
- yes();
- else if (source == noButton)
- no();
- else if (source == restartButton)
- restart();
- }
- };
- public static void main(String[] args) {
- TwentyQuestions twentyQuestions = new TwentyQuestions();
- twentyQuestions.tree = new Tree();
- twentyQuestions.tree.loadTree("/Users/ssaurel/eworkspace/TwentyQuestions/animals_questions.txt");
- SwingUtilities.invokeLater(new Runnable() {
- @Override
- public void run() {
- twentyQuestions.buildUI();
- }
- });
- }
- private void buildUI() {
- // we build the UI
- JFrame frame = new JFrame("Twenty Questions on SSaurel");
- frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- Container contentPane = frame.getContentPane();
- // add buttons
- JPanel buttonsPanel = new JPanel();
- yesButton = new JButton("Yes");
- yesButton.addActionListener(btnsListener);
- buttonsPanel.add(yesButton, BorderLayout.LINE_START);
- restartButton = new JButton("Start");
- restartButton.addActionListener(btnsListener);
- buttonsPanel.add(restartButton, BorderLayout.LINE_START);
- noButton = new JButton("No");
- noButton.addActionListener(btnsListener);
- buttonsPanel.add(noButton, BorderLayout.LINE_END);
- contentPane.add(buttonsPanel, BorderLayout.PAGE_END);
- // add text area
- textPane = new JTextPane();
- textPane.setEditable(false);
- updateText("Think to an animal, then click on Start");
- // we define some style for the text pane
- SimpleAttributeSet bSet = new SimpleAttributeSet();
- StyleConstants.setAlignment(bSet, StyleConstants.ALIGN_CENTER);
- StyleConstants.setFontSize(bSet, 22);
- StyledDocument doc = textPane.getStyledDocument();
- doc.setParagraphAttributes(0, doc.getLength(), bSet, false);
- contentPane.add(textPane, BorderLayout.CENTER);
- frame.setMinimumSize(new Dimension(500, 250));
- // we center the JFrame
- Dimension objDimension = Toolkit.getDefaultToolkit().getScreenSize();
- int coordX = (objDimension.width - frame.getWidth()) / 2;
- int coordY = (objDimension.height - frame.getHeight()) / 2;
- frame.setLocation(coordX, coordY);
- // we display the window
- frame.pack();
- frame.setVisible(true);
- }
- // we need to write code for callbacks methods yes, no and restart
- private void yes() {
- // we navigate in the tree by moving the current node on the yes branch
- if (started && currentNode != null) {
- currentNode = currentNode.yes;
- if (currentNode != null) {
- if (currentNode.isQuestion()) {
- updateText(currentNode.data);
- } else {
- updateText("Would you think to " + currentNode.data + "?");
- }
- } else {
- updateText("I found :)");
- }
- }
- }
- private void no() {
- // we navigate in the tree by moving the current node on the no branch
- if (started && currentNode != null) {
- currentNode = currentNode.no;
- if (currentNode != null) {
- if (currentNode.isQuestion()) {
- updateText(currentNode.data);
- } else {
- updateText("Would you think to " + currentNode.data + "?");
- }
- } else {
- updateText("I lose :(");
- }
- }
- }
- private void restart() {
- if (started) {
- started = false;
- updateText("Think to an animal, then click on Start");
- } else {
- started = true;
- updateText("Think to an animal, then click on Start");
- currentNode = tree.root;
- updateText(currentNode.data);
- }
- }
- private void updateText(String txt) {
- textPane.setText("\n" + txt);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement