run_n_inf7/Quellcodes/sonst_spiel_grosserpreis/Quizspiel.java
2025-01-02 12:26:47 +01:00

355 lines
13 KiB
Java
Raw Blame History

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>&nbsp;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>&nbsp;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");
}
}