355 lines
13 KiB
Java
355 lines
13 KiB
Java
import java.awt.*;
|
||
import java.awt.event.*;
|
||
import javax.swing.*;
|
||
import javax.swing.event.*;
|
||
|
||
import java.io.File;
|
||
import java.io.IOException;
|
||
import java.util.List;
|
||
import java.io.*;
|
||
|
||
import org.jdom.Document;
|
||
import org.jdom.Element;
|
||
import org.jdom.JDOMException;
|
||
import org.jdom.input.SAXBuilder;
|
||
import org.jdom.output.XMLOutputter;
|
||
|
||
|
||
|
||
/**
|
||
*
|
||
* Quizspiel zur Wiederholung von Unterrichtsinhalten
|
||
*
|
||
* @version 1.1 from 23.02.2017
|
||
* @author Thomas Schaller
|
||
*/
|
||
|
||
public class Quizspiel extends JFrame {
|
||
// Anfang Attribute
|
||
private ImageLabel jLabel1;
|
||
|
||
private ImageIcon jLabel1Icon = new ImageIcon("images/Titelleiste_Netzwerk.png");
|
||
|
||
private JPanel jPanel1 = new JPanel(null, true);
|
||
private JLabel jLabel2 = new JLabel();
|
||
private JPanel jPanel2 = new JPanel(null, true);
|
||
private JPanel jPanel3 = new JPanel(null, true);
|
||
|
||
private JLabel jLStatus = new JLabel();
|
||
private JPanel jPanel4 = new JPanel(null, true);
|
||
private JButton jBEnde = new JButton();
|
||
private JPanel jPSpieler1 = new JPanel(null, true);
|
||
private JLabel jLName1 = new JLabel();
|
||
private JLabel jLPunkte1 = new JLabel();
|
||
private JPanel jPSpieler2 = new JPanel(null, true);
|
||
private JLabel jLName2 = new JLabel();
|
||
private JLabel jLPunkte2 = new JLabel();
|
||
private JPanel jPSpieler3 = new JPanel(null, true);
|
||
private JLabel jLName3 = new JLabel();
|
||
private JLabel jLPunkte3 = new JLabel();
|
||
private JPanel jPSpieler4 = new JPanel(null, true);
|
||
private JLabel jLName4 = new JLabel();
|
||
private JLabel jLPunkte4 = new JLabel();
|
||
private JLabel jLabel4 = new JLabel();
|
||
private JButton[][] jBTopics;
|
||
private int akt_sp = 0;
|
||
private int sp_anz = 4;
|
||
private int[] punkte = new int[4];
|
||
private Document doc = null;
|
||
// Ende Attribute
|
||
|
||
public Quizspiel (String title) {
|
||
super (title);
|
||
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
|
||
int frameWidth = 1026;
|
||
int frameHeight = 580;
|
||
setSize(frameWidth, frameHeight);
|
||
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
|
||
int x = (d.width - getSize().width) / 2;
|
||
int y = (d.height - getSize().height) / 2;
|
||
setLocation(x, y);
|
||
Container cp = getContentPane();
|
||
cp.setLayout(null);
|
||
// Anfang Komponenten
|
||
jLabel1 = new ImageLabel(jLabel1Icon, "Quiz");
|
||
jLabel1.setBounds(2, 2, 1019, 65);
|
||
jLabel1.setText("Quiz");
|
||
jLabel1.setImageIcon(jLabel1Icon);
|
||
jLabel1.setFont(new Font("Dialog", Font.BOLD, 30));
|
||
jLabel1.setForeground(Color.white);
|
||
cp.add(jLabel1);
|
||
jLabel4.setBounds(310, 553, 400, 20);
|
||
jLabel4.setText("(cc) Schaller (ZPG Informatik) - V1.1 (2017)");
|
||
jLabel4.setHorizontalAlignment(SwingConstants.CENTER);
|
||
jLabel4.setFont(new Font("Dialog", Font.PLAIN, 12));
|
||
cp.add(jLabel4);
|
||
|
||
setUndecorated(true);
|
||
|
||
|
||
jLStatus.setBounds(8, 488, 1011, 57);
|
||
jLStatus.setText(" W<>hle bitte eine Frage...");
|
||
jLStatus.setBackground(Color.GRAY);
|
||
jLStatus.setOpaque(true);
|
||
jLStatus.setFont(new Font("Dialog", Font.BOLD, 24));
|
||
jLStatus.setForeground(Color.WHITE);
|
||
|
||
cp.add(jLStatus);
|
||
jPanel4.setBounds(0, 0, 1026, 553);
|
||
jPanel4.setOpaque(false);
|
||
jPanel4.setBorder(new javax.swing.border.LineBorder(Color.BLACK, 2));
|
||
cp.add(jPanel4);
|
||
jPSpieler1.setBounds(832, 72, 185, 89);
|
||
jPSpieler1.setOpaque(true);
|
||
jPSpieler1.setBorder(BorderFactory.createBevelBorder(1, Color.WHITE, Color.BLACK));
|
||
jPSpieler1.setBackground(new Color(0xB8CFE5));
|
||
jPanel4.add(jPSpieler1);
|
||
jLName1.setBounds(8, 8, 174, 33);
|
||
jLName1.setText("Spieler 1");
|
||
jLName1.setFont(new Font("Dialog", Font.BOLD, 24));
|
||
jLName1.setForeground(new Color(0x000080));
|
||
jLName1.setHorizontalTextPosition(SwingConstants.CENTER);
|
||
jPSpieler1.add(jLName1);
|
||
jLPunkte1.setBounds(11, 48, 166, 33);
|
||
jLPunkte1.setText("0 Punkte");
|
||
jLPunkte1.setForeground(new Color(0x800000));
|
||
jLPunkte1.setFont(new Font("Dialog", Font.BOLD, 24));
|
||
jLPunkte1.setHorizontalTextPosition(SwingConstants.CENTER);
|
||
jPSpieler1.add(jLPunkte1);
|
||
jPSpieler2.setBounds(832, 160, 185, 89);
|
||
jPSpieler2.setOpaque(true);
|
||
jPSpieler2.setBorder(BorderFactory.createBevelBorder(1, Color.WHITE, Color.BLACK));
|
||
jPanel4.add(jPSpieler2);
|
||
jLName2.setBounds(8, 8, 174, 33);
|
||
jLName2.setText("Spieler 2");
|
||
jLName2.setFont(new Font("Dialog", Font.BOLD, 24));
|
||
jLName2.setForeground(new Color(0x000080));
|
||
jLName2.setHorizontalTextPosition(SwingConstants.CENTER);
|
||
jPSpieler2.add(jLName2);
|
||
jLPunkte2.setBounds(11, 48, 166, 33);
|
||
jLPunkte2.setText("0 Punkte");
|
||
jLPunkte2.setFont(new Font("Dialog", Font.BOLD, 24));
|
||
jLPunkte2.setForeground(new Color(0x800000));
|
||
jLPunkte2.setHorizontalTextPosition(SwingConstants.CENTER);
|
||
jPSpieler2.add(jLPunkte2);
|
||
jPSpieler3.setBounds(832, 248, 185, 89);
|
||
jPSpieler3.setOpaque(true);
|
||
jPSpieler3.setBorder(BorderFactory.createBevelBorder(1, Color.WHITE, Color.BLACK));
|
||
jPSpieler3.setBackground(new Color(0xEEEEEE));
|
||
jPanel4.add(jPSpieler3);
|
||
jLName3.setBounds(8, 8, 174, 33);
|
||
jLName3.setText("Spieler 3");
|
||
jLName3.setFont(new Font("Dialog", Font.BOLD, 24));
|
||
jLName3.setForeground(new Color(0x000080));
|
||
jLName3.setHorizontalTextPosition(SwingConstants.CENTER);
|
||
jPSpieler3.add(jLName3);
|
||
jLPunkte3.setBounds(11, 48, 166, 33);
|
||
jLPunkte3.setText("0 Punkte");
|
||
jLPunkte3.setFont(new Font("Dialog", Font.BOLD, 24));
|
||
jLPunkte3.setForeground(new Color(0x800000));
|
||
jLPunkte3.setHorizontalTextPosition(SwingConstants.CENTER);
|
||
jPSpieler3.add(jLPunkte3);
|
||
jPSpieler4.setBounds(832, 336, 185, 89);
|
||
jPSpieler4.setOpaque(true);
|
||
jPSpieler4.setBorder(BorderFactory.createBevelBorder(1, Color.WHITE, Color.BLACK));
|
||
jPSpieler4.setBackground(new Color(0xEEEEEE));
|
||
jPanel4.add(jPSpieler4);
|
||
jLName4.setBounds(8, 8, 174, 33);
|
||
jLName4.setText("Spieler 4");
|
||
jLName4.setFont(new Font("Dialog", Font.BOLD, 24));
|
||
jLName4.setForeground(new Color(0x000080));
|
||
jLName4.setHorizontalTextPosition(SwingConstants.CENTER);
|
||
jPSpieler4.add(jLName4);
|
||
jLPunkte4.setBounds(11, 48, 166, 33);
|
||
jLPunkte4.setText("0 Punkte");
|
||
jLPunkte4.setFont(new Font("Dialog", Font.BOLD, 24));
|
||
jLPunkte4.setForeground(new Color(0x800000));
|
||
jLPunkte4.setHorizontalTextPosition(SwingConstants.CENTER);
|
||
jPSpieler4.add(jLPunkte4);
|
||
|
||
jBEnde.setBounds(832, 432, 185, 49);
|
||
jBEnde.setText("Spiel beenden");
|
||
jBEnde.setMargin(new Insets(2, 2, 2, 2));
|
||
jBEnde.addActionListener(new ActionListener() {
|
||
public void actionPerformed(ActionEvent evt) {
|
||
jBEnde_ActionPerformed(evt);
|
||
}
|
||
});
|
||
jBEnde.setFont(new Font("Dialog", Font.BOLD, 24));
|
||
jPanel4.add(jBEnde);
|
||
// Ende Komponenten
|
||
readQuestions();
|
||
jLabel1.setText("Quiz: "+doc.getRootElement().getChild("Titel").getValue());
|
||
jBTopics = new JButton[getAnzKategorien()][getAnzTopics()];
|
||
for (x = 0; x < getAnzKategorien() ; x++) {
|
||
JPanel jPanel = new JPanel();
|
||
jPanel.setBounds(2+193*x, 85, 193, 65);
|
||
jPanel.setOpaque(false);
|
||
jPanel.setBorder(BorderFactory.createBevelBorder(0, Color.WHITE, Color.BLACK));
|
||
jPanel4.add(jPanel);
|
||
|
||
JLabel jLabel = new JLabel();
|
||
jLabel.setBounds(80, 60, 193, 64);
|
||
jLabel.setText("<html><p width=190 align=center>"+getKategorie(x)+"</p></html>");
|
||
jLabel.setHorizontalAlignment(SwingConstants.CENTER);
|
||
jLabel.setFont(new Font("Dialog", Font.BOLD, 24));
|
||
jPanel.add(jLabel);
|
||
for (y = 0; y < getAnzTopics() ; y++ ) {
|
||
jBTopics[x][y] = new JButton();
|
||
jBTopics[x][y].setText(getTopic(x,y).getChild("Punkte").getValue());
|
||
jBTopics[x][y].setBounds(2+193*x, 150+y*65, 193, 65);
|
||
jBTopics[x][y].setMargin(new Insets(2,2,2,2));
|
||
jBTopics[x][y].setFont(new Font("Dialog", Font.BOLD, 36));
|
||
jBTopics[x][y].addActionListener(new ActionListener() {
|
||
public void actionPerformed(ActionEvent evt) {
|
||
button_ActionPerformed(evt);
|
||
}
|
||
});
|
||
jPanel4.add(jBTopics[x][y]);
|
||
} // end of for
|
||
|
||
} // end of for
|
||
|
||
setResizable(false);
|
||
setVisible(true);
|
||
sp_anz = 0;
|
||
while (sp_anz <2 || sp_anz > 4) {
|
||
String s = javax.swing.JOptionPane.showInputDialog( "Bitte Anzahl der Spieler eingeben (2-4):" );
|
||
try{
|
||
int i = Integer.parseInt( s );
|
||
sp_anz = i;
|
||
} catch (Exception e) {
|
||
}
|
||
|
||
} // end of while
|
||
jPSpieler4.setVisible(sp_anz >= 4);
|
||
jPSpieler3.setVisible(sp_anz >= 3);
|
||
// end of if
|
||
|
||
}
|
||
|
||
// Anfang Methoden
|
||
public void button_ActionPerformed(ActionEvent evt) {
|
||
int x = 0;
|
||
int y = 0;
|
||
for (int i=0;i<getAnzKategorien() ;i++ ) {
|
||
for (int j=0;j<getAnzTopics();j++) {
|
||
if (evt.getSource()==jBTopics[i][j]) {x = i; y = j; }
|
||
|
||
} // end of for
|
||
|
||
} // end of for
|
||
int akt_f_sp = akt_sp;
|
||
|
||
Element t = getTopic(x,y);
|
||
int richtig = Integer.parseInt(t.getChild("Richtig").getValue());
|
||
FrageGUI frage = new FrageGUI(this, t.getChild("Frage").getValue(), ((Element) t.getChildren("Antwort").get(0)).getValue(),((Element) t.getChildren("Antwort").get(1)).getValue(),((Element) t.getChildren("Antwort").get(2)).getValue(),((Element) t.getChildren("Antwort").get(3)).getValue(), akt_f_sp+1);
|
||
while (frage.getAntwort()!=richtig) {
|
||
frage.setVisible(true);
|
||
if (frage.getAntwort()!=richtig) {
|
||
jLStatus.setText("<html> Die Antwort war leider falsch!</html>");
|
||
akt_f_sp = (akt_f_sp + 1)%sp_anz;
|
||
frage.setSpieler((akt_f_sp+1));
|
||
try{
|
||
Thread.sleep(200); }
|
||
catch(Exception e) {
|
||
}
|
||
} // end of if-else
|
||
|
||
|
||
} // end of while
|
||
akt_sp = (akt_sp+1)%sp_anz;
|
||
punkte[akt_f_sp] += Integer.parseInt(t.getChild("Punkte").getValue());
|
||
|
||
jLStatus.setText("<html> Die Antwort ist richtig. Spieler "+(akt_f_sp+1)+" erh<72>lt "+Integer.parseInt(t.getChild("Punkte").getValue())+" Punkte. Spieler "+(akt_sp+1)+" w<>hle bitte eine Frage...</html>");
|
||
((JButton) (evt.getSource())).setEnabled(false);
|
||
showPunkte();
|
||
} // end of jButton1_ActionPerformed
|
||
|
||
|
||
|
||
public void jBEnde_ActionPerformed(ActionEvent evt) {
|
||
this.setVisible(false);
|
||
this.dispose();
|
||
} // end of jBEnde_ActionPerformed
|
||
|
||
// Ende Methoden
|
||
public void showPunkte() {
|
||
jLPunkte1.setText(""+punkte[0]+" Punkte");
|
||
jLPunkte2.setText(""+punkte[1]+" Punkte");
|
||
jLPunkte3.setText(""+punkte[2]+" Punkte");
|
||
jLPunkte4.setText(""+punkte[3]+" Punkte");
|
||
if (akt_sp==0) {
|
||
jPSpieler1.setBackground(new Color(0xB8CFE5));
|
||
} else {
|
||
jPSpieler1.setBackground(new Color(0xEFEFEF));
|
||
} // end of if-else
|
||
jPSpieler2.setBackground(new Color(0xEEEEEE));
|
||
if (akt_sp==1) {
|
||
jPSpieler2.setBackground(new Color(0xB8CFE5));
|
||
} else {
|
||
jPSpieler2.setBackground(new Color(0xEFEFEF));
|
||
} // end of if-else
|
||
if (akt_sp==2) {
|
||
jPSpieler3.setBackground(new Color(0xB8CFE5));
|
||
} else {
|
||
jPSpieler3.setBackground(new Color(0xEFEFEF));
|
||
} // end of if-else
|
||
if (akt_sp==3) {
|
||
jPSpieler4.setBackground(new Color(0xB8CFE5));
|
||
} else {
|
||
jPSpieler4.setBackground(new Color(0xEFEFEF));
|
||
} // end of if-else
|
||
|
||
}
|
||
|
||
public int getAnzKategorien() {
|
||
return doc.getRootElement().getChildren("Kategorie").size();
|
||
}
|
||
|
||
public String getKategorie(int x) {
|
||
Element kat = (Element) doc.getRootElement().getChildren("Kategorie").get(x);
|
||
return kat.getAttributeValue("name");
|
||
}
|
||
|
||
public int getAnzTopics() {
|
||
Element kat0 = (Element) doc.getRootElement().getChildren("Kategorie").get(0);
|
||
return kat0.getChildren("Frage").size();
|
||
}
|
||
|
||
public Element getTopic(int x, int y) {
|
||
Element kategorie = (Element) (doc.getRootElement().getChildren("Kategorie").get(x));
|
||
Element topic = (Element) (kategorie.getChildren("Frage")).get(y);
|
||
return topic;
|
||
}
|
||
|
||
|
||
|
||
|
||
public void readQuestions() {
|
||
|
||
doc = null;
|
||
|
||
InputStream is = Quizspiel.class.getResourceAsStream("questions.xml");
|
||
File f = new File("questions.xml");
|
||
try {
|
||
// Das Dokument erstellen
|
||
SAXBuilder builder = new SAXBuilder();
|
||
doc = builder.build(f);
|
||
|
||
} catch (JDOMException e) {
|
||
e.printStackTrace();
|
||
|
||
} catch (IOException e) {
|
||
e.printStackTrace();
|
||
}
|
||
|
||
}
|
||
|
||
|
||
|
||
|
||
public static void main(String[] args) {
|
||
new Quizspiel("Quizspiel");
|
||
}
|
||
}
|