Merge branch 'patch-1' of

https://gitlab.imn.htwk-leipzig.de/weicker/inb1-a-jaujau.git into
patch-1

Conflicts:
	src/de/jaujau/spiellogik/Spielzug.java


Implementierung des Computer Gegners
This commit is contained in:
mokoe
2021-01-07 12:54:34 +01:00
18 changed files with 766 additions and 403 deletions

View File

@@ -1,5 +1,15 @@
Seb 245
Elmo 240
Moritz 220
Alaa Aldin 217
Fabian 215
Alaa-Aldin 217
Fabian 215
Thomas 1233
Emil -21331
Heinz +312
Gert 234
Kasper 24
Jens 234
Paul 234
Till 553
Reiner 462
Achim 2344

View File

@@ -0,0 +1,37 @@
package de.jaujau.UnitTests;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import de.jaujau.daten.Audio;
class TEST_Audio {
Audio sound;
@BeforeEach
void setUp() throws Exception {
sound = new Audio();
}
@Test
void test() {
//Test Sound in einem eigenen Thread abspielen
sound.spieleJau();
//um das Programm zu beschäftigen
for(int i = 0; i < 500000; i++) {
System.out.println(i);
}
//Test Sound in einem eigenen Thread abspielen
sound.spieleJauJau();
//um das Programm zu beschäftigen
for(int i = 0; i < 500000; i++) {
System.out.println(i);
}
}
}

View File

@@ -0,0 +1,101 @@
package de.jaujau.daten;
import java.io.IOException;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.SourceDataLine;
/**
* Klasse für das Abspielen eines Tons
* @author Sebastian Kacza
*
*/
public class Audio {
public Audio() {}
/**
* Spielt den "Jau" Ton ab
*/
public void spieleJau() {
spieleTon("/sound/jaujau.wav");
}
/**
* Spielt den "JauJau" Ton ab
*/
public void spieleJauJau() {
spieleTon("/sound/jau.wav");
}
/**
* Spielt einen Ton ein einem eingene Thread ab
* @param Pfad zu der Sounddatei im Jar-Archiv
*/
private void spieleTon(String Pfad) {
new Thread(new Runnable() {
@Override
public void run() {
try {
playSound(Pfad);
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
//Kann gelöscht werden wenn es nicht mehr in der GUI benötigt wird
public void test() {
spieleJauJau();
}
/*
* !!! DIESE METHODE IST NICHT VON MIR !!!
* Quelle: https://stackoverflow.com/questions/2416935/how-to-play-wav-files-with-java
*/
/**
* Spiel eine Audio dateim im WAV-Format die im internen Ordner gespeichert ist ab.
* @param path Ptad zu der Sounddatei
* @throws Exception
*/
private void playSound (String path) throws Exception {
//AudioInputStream audioStream = AudioSystem.getAudioInputStream(new File ("test.wav"));
AudioInputStream audioStream = AudioSystem.getAudioInputStream(getClass().getResourceAsStream(path));
int BUFFER_SIZE = 128000;
AudioFormat audioFormat = null;
SourceDataLine sourceLine = null;
audioFormat = audioStream.getFormat();
sourceLine = AudioSystem.getSourceDataLine(audioFormat);
sourceLine.open(audioFormat);
sourceLine.start();
int nBytesRead = 0;
byte[] abData = new byte[BUFFER_SIZE];
while (nBytesRead != -1) {
try {
nBytesRead =
audioStream.read(abData, 0, abData.length);
} catch (IOException e) {
e.printStackTrace();
}
if (nBytesRead >= 0) {
int nBytesWritten = sourceLine.write(abData, 0, nBytesRead);
}
}
sourceLine.drain();
sourceLine.close();
}
}

View File

@@ -95,7 +95,6 @@ public class Spielerverwaltung {
int zeilennummer = 0;
boolean insArray = false;
while (line != null) {
System.out.println(line);
lineArray = line.toCharArray();
for (int i = 0; i < lineArray.length; i++) {

View File

@@ -0,0 +1,287 @@
package de.jaujau.gui;
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import de.jaujau.daten.Spieler;
import de.jaujau.daten.Spielerverwaltung;
import de.jaujau.daten.Texturenpakete;
import de.jaujau.spiellogik.Spiel;
import javax.swing.JLabel;
import java.awt.Dimension;
import java.awt.Image;
import javax.swing.JComboBox;
import javax.swing.SwingConstants;
import javax.swing.ImageIcon;
import java.awt.Rectangle;
import java.awt.Component;
import java.awt.FlowLayout;
import java.awt.ComponentOrientation;
import java.awt.Cursor;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.UIManager;
import java.awt.Font;
public class Dashboard_GUI extends JPanel{
private static final long serialVersionUID = -7380187913989942586L;
JPanel panelCont = new JPanel();
JPanel highscore = new JPanel();
JPanel game = new JPanel();
JPanel start = new JPanel();
CardLayout cl = new CardLayout();
Spielerverwaltung spielerverwaltung = new Spielerverwaltung();
private final JPanel panel = new JPanel();
private final JPanel panel_1 = new JPanel();
private JComboBox<String> comboBox = new JComboBox<String>();
private final JPanel panel_2 = new JPanel();
private final JLabel lblNewLabel_1 = new JLabel("Entwickler: Sebastian, Moritz, Fabian, Aladin, Elmar");
private final JPanel spielfeld = new JPanel();
private final JPanel player_hand = new JPanel();
private final JPanel gegner_hand = new JPanel();
private final JLabel ablagestapel = new JLabel("");
private final JLabel ziehstapel = new JLabel("");
JPanel spielerkarten = new JPanel();
JLabel labels[] = new JLabel[32];
private Spiel aktuellesSpiel;
private JLabel label_aktuellerSpieler;
private Texturenpakete texturenpakete;
private final JPanel spielfeldmitte = new JPanel();
private final JPanel info_panel = new JPanel();
private final JPanel rechts = new JPanel();
private final JPanel mitte = new JPanel();
public Dashboard_GUI(Spiel Spiel, Texturenpakete texturen) {
setMinimumSize(new Dimension(1000, 600));
texturenpakete = texturen;
texturenpakete.addPaket("StandartTexturenBeta3.zip");
texturenpakete.setAktivesPaket(0);
System.out.println(texturenpakete.getAktivesPaket());
aktuellesSpiel = Spiel;
setLayout(new BorderLayout(0, 0));
panelCont.setLayout(cl);
panelCont.add(highscore, "1");
panelCont.add(game, "2");
game.setLayout(new BorderLayout(0, 0));
spielfeld.setBackground(new Color(128, 128, 128));
game.add(spielfeld, BorderLayout.CENTER);
spielfeld.setLayout(new BorderLayout(0, 0));
player_hand.setPreferredSize(new Dimension(100, 240));
player_hand.setForeground(new Color(169, 169, 169));
player_hand.setBackground(new Color(169, 169, 169));
spielfeld.add(player_hand, BorderLayout.SOUTH);
player_hand.setLayout(new BorderLayout(0, 0));
JScrollPane scrollPane_1 = new JScrollPane();
scrollPane_1.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
scrollPane_1.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
scrollPane_1.setPreferredSize(new Dimension(100, 240));
player_hand.add(scrollPane_1, BorderLayout.CENTER);
spielerkarten.setBackground(new Color(169, 169, 169));
spielerkarten.setAutoscrolls(true);
spielerkarten.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
scrollPane_1.setViewportView(spielerkarten);
spielerkarten.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
gegner_hand.setBackground(UIManager.getColor("Button.shadow"));
spielfeld.add(gegner_hand, BorderLayout.NORTH);
gegner_hand.setLayout(new BorderLayout(0, 0));
spielfeldmitte.setPreferredSize(new Dimension(100, 20));
spielfeldmitte.setLayout(new BorderLayout(0, 0));
JLabel beschreibung_aktuellerSpieler = new JLabel("Aktueller Spieler:");
beschreibung_aktuellerSpieler.setFont(new Font("Tahoma", Font.BOLD, 18));
beschreibung_aktuellerSpieler.setForeground(Color.BLACK);
info_panel.add(beschreibung_aktuellerSpieler);
label_aktuellerSpieler = new JLabel("Auswahlphase");
label_aktuellerSpieler.setForeground(Color.BLACK);
label_aktuellerSpieler.setFont(new Font("Tahoma", Font.BOLD, 18));
info_panel.add(label_aktuellerSpieler);
spielfeld.add(spielfeldmitte, BorderLayout.CENTER);
spielfeldmitte.add(info_panel, BorderLayout.NORTH);
rechts.setPreferredSize(new Dimension(250, 10));
spielfeldmitte.add(rechts, BorderLayout.EAST);
rechts.setLayout(new BorderLayout(0, 0));
ziehstapel.setAlignmentX(Component.CENTER_ALIGNMENT);
rechts.add(ziehstapel, BorderLayout.CENTER);
ziehstapel.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
aktuellesSpiel.karteZiehen();
aktualisiereGUI();
}
});
ziehstapel.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
ziehstapel.setPreferredSize(new Dimension(242, 362));
ziehstapel.setHorizontalAlignment(SwingConstants.CENTER);
ziehstapel.setIcon(new ImageIcon(texturenpakete.getTextur(32).getScaledInstance(150, 210, Image.SCALE_SMOOTH)));
spielfeldmitte.add(mitte, BorderLayout.SOUTH);
mitte.setLayout(null);
spielfeldmitte.add(ablagestapel, BorderLayout.CENTER);
ablagestapel.setIcon(new ImageIcon(Dashboard_GUI.class.getResource("/img/texturen/standart/32.png")));
ablagestapel.setPreferredSize(new Dimension(242, 362));
ablagestapel.setHorizontalAlignment(SwingConstants.CENTER);
panelCont.add(start, "3");
start.setLayout(new BorderLayout(0, 0));
panel.setPreferredSize(new Dimension(10, 30));
start.add(panel, BorderLayout.NORTH);
JLabel lblNewLabel = new JLabel("Spielername:");
panel.add(lblNewLabel);
comboBox.setMinimumSize(new Dimension(60, 22));
comboBox.setEditable(true);
panel.add(comboBox);
start.add(panel_1, BorderLayout.CENTER);
start.add(panel_2, BorderLayout.SOUTH);
panel_2.add(lblNewLabel_1);
highscore.setLayout(new BorderLayout(0, 0));
//Erstes Panel wird angezeigt
cl.show(panelCont, "3");
add(panelCont);
renderStart(); //Startseite beim ersten <20>ffnen aktualisieren
}
//Spiel Panel wird gezeigt
public void showgame(Spiel Spiel){
//Neues Spiel wird <20>bergeben
aktuellesSpiel = Spiel;
System.out.println("DASHBOARD: Game darstellen");
cl.show(panelCont, "2");
aktuellesSpiel.spiel(this);
aktualisiereGUI();
}
public void showstart(){
System.out.println("DASHBOARD: Start darstellen");
cl.show(panelCont, "3");
renderStart();
}
public void showhighscore(){
System.out.println("DASHBOARD: Highscore darstellen");
renderHighscore();
cl.show(panelCont, "1");
repaint();
revalidate();
}
public void renderStart(){
comboBox.removeAllItems();
for(int i = 0; i<spielerverwaltung.gethighscoreTabelle().length; i++) {
comboBox.addItem(spielerverwaltung.gethighscoreTabelle()[i][0]);
}
}
// Highscore Tabelle
public void renderHighscore() {
String[][] rowData = spielerverwaltung.gethighscoreTabelle(); //Bsp. Datensatz muss noch entfernt werden.
String[] columnNames = {"Name", "Punkte"};
highscore.setLayout(new BorderLayout(0, 0));
JTable table = new JTable(); //Leere Tabelle
DefaultTableModel tableModel = new DefaultTableModel(rowData, columnNames) { //Tabelle formatieren und Zellen nicht bearbeitbar machen
private static final long serialVersionUID = 838285314713L;
public boolean isCellEditable(int row, int column) {
//all cells false
return false;
}
};
table.setAutoCreateRowSorter(true); //Tabelle Sortierbar durch Tabellenkopf
table.getTableHeader().setReorderingAllowed(false); //Tabelle nicht mehr drag and drop
table.setModel(tableModel);
highscore.add( new JScrollPane( table ) );
}
void aktualisiereHand() {
//Alle Elemente entfernen
for(Component c : spielerkarten.getComponents()){
spielerkarten.remove(c);
spielerkarten.revalidate();
}
//Alle Karten auf der Hand darstellen
for(int i = 0; i< aktuellesSpiel.getKartensatz().getHand(Spieler.SPIELER).size(); i++){
labels[i] = new JLabel();
labels[i].setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
labels[i].setAlignmentY(Component.TOP_ALIGNMENT);
labels[i].setBounds(new Rectangle(0, 0, 120, 180));
labels[i].setSize(new Dimension(120, 180));
labels[i].setHorizontalTextPosition(SwingConstants.CENTER);
labels[i].setHorizontalAlignment(SwingConstants.CENTER);
labels[i].setName(aktuellesSpiel.getKartensatz().getHand(Spieler.SPIELER).get(i).toString());
labels[i].addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
aktuellesSpiel.karteLegen(Integer.parseInt(e.getComponent().getName()));
System.out.println("Karte: " + e.getComponent().getName() + " ausgew<65>hlt.");
aktualisiereGUI();
}
});
labels[i].setIcon(new ImageIcon(texturenpakete.getTextur(aktuellesSpiel.getKartensatz().getHand(Spieler.SPIELER).get(i)).getScaledInstance(150, 210, Image.SCALE_SMOOTH)));
spielerkarten.add(labels[i]);
spielerkarten.updateUI(); //Panel erneuern
}
}
void aktualisiereAblage(){
ablagestapel.setIcon(new ImageIcon(texturenpakete.getTextur(aktuellesSpiel.getKartensatz().getletzteKarte()).getScaledInstance(150, 210, Image.SCALE_SMOOTH)));
ablagestapel.revalidate();
ablagestapel.repaint();
}
void aktualisiereSpieleranzeige() {
if(aktuellesSpiel.getamZug() == Spieler.COMPUTER) {
label_aktuellerSpieler.setText("Gegner");
label_aktuellerSpieler.setForeground(Color.RED);
}
if(aktuellesSpiel.getamZug() == Spieler.SPIELER) {
label_aktuellerSpieler.setText("Spieler");
label_aktuellerSpieler.setForeground(Color.GREEN);
}
if(aktuellesSpiel.getamZug() == null) {
label_aktuellerSpieler.setText("Auswahlphase");
label_aktuellerSpieler.setForeground(Color.WHITE);
}
}
public void aktualisiereGUI(){
aktualisiereSpieleranzeige();
aktualisiereAblage();
aktualisiereHand();
}
}

View File

@@ -3,19 +3,21 @@ package de.jaujau.gui;
import javax.swing.JFrame;
import javax.swing.JPanel;
import de.jaujau.daten.Spielerverwaltung;
import de.jaujau.daten.Texturenpakete;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import javax.swing.JLabel;
import javax.swing.ImageIcon;
import javax.swing.SwingConstants;
import de.jaujau.daten.Spielerverwaltung;
import de.jaujau.daten.Texturenpakete;
import de.jaujau.spiellogik.Spiel;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.FlowLayout;
import javax.swing.BoxLayout;
import java.awt.Font;
@@ -28,20 +30,22 @@ public class GUI extends JFrame{
// Fields
//
private static final long serialVersionUID = 1L;
private Spielerverwaltung spielerverwaltung;
private boolean menuehidden = false;
Hilfe_GUI frame = new Hilfe_GUI();
private Spiel aktuellesSpiel;
//
// Constructors
//
public GUI (Spielerverwaltung speicherung) {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
public GUI (Texturenpakete texturenpakete, Spielerverwaltung speicherung) {
setMinimumSize(new Dimension(1000, 600));
// jaujau.getAktuellesSpiel();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle("JauJau");
setPreferredSize(new Dimension(800, 500));
setSize(982, 642);
this.spielerverwaltung = speicherung;
setSize(1565, 916);
getContentPane().setLayout(new BorderLayout(0, 0));
JPanel Menue = new JPanel();
@@ -82,16 +86,44 @@ public class GUI extends JFrame{
menuhide.setPreferredSize(new Dimension(220, 200));
menuhide.setBackground(new Color(25, 29, 74));
Menue.add(menuhide);
menuhide.setLayout(new BorderLayout(0, 0));
menuhide.setLayout(null);
JLabel startlabel = new JLabel("Startseite");
startlabel.setBounds(0, 11, 220, 29);
startlabel.setVerticalAlignment(SwingConstants.TOP);
startlabel.setForeground(Color.WHITE);
startlabel.setFont(new Font("Tahoma", Font.PLAIN, 24));
startlabel.setHorizontalAlignment(SwingConstants.CENTER);
menuhide.add(startlabel);
JLabel highscorelabel = new JLabel("Highscore");
highscorelabel.setBounds(0, 51, 220, 29);
highscorelabel.setHorizontalAlignment(SwingConstants.CENTER);
highscorelabel.setForeground(Color.WHITE);
highscorelabel.setFont(new Font("Tahoma", Font.PLAIN, 24));
menuhide.add(highscorelabel);
JLabel gamelabel = new JLabel("Spielen");
gamelabel.setHorizontalAlignment(SwingConstants.CENTER);
gamelabel.setForeground(Color.WHITE);
gamelabel.setFont(new Font("Tahoma", Font.PLAIN, 24));
gamelabel.setBounds(0, 91, 220, 29);
menuhide.add(gamelabel);
JPanel dashboard = new JPanel();
dashboard.setBackground(new Color(73, 128, 242));
getContentPane().add(dashboard, BorderLayout.CENTER);
dashboard.setLayout(new BorderLayout(0, 0));
Spiel_GUI Spiel_GUI = new Spiel_GUI();
dashboard.add(Spiel_GUI);
Dashboard_GUI Dashboard_GUI = new Dashboard_GUI(aktuellesSpiel, texturenpakete);
//Spiel_GUI Spiel_GUI = new Spiel_GUI();
dashboard.add(Dashboard_GUI, BorderLayout.CENTER);
//Event Listener
menuebtn.addMouseListener(new MouseAdapter() {
@Override
@@ -121,11 +153,38 @@ public class GUI extends JFrame{
}
});
gamelabel.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
aktuellesSpiel = new Spiel(Dashboard_GUI);
System.out.println("GUI: Spiel GUI ge<67>ffnet");
Dashboard_GUI.showgame(aktuellesSpiel);
}
});
highscorelabel.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("GUI: Highscore ge<67>ffnet");
Dashboard_GUI.showhighscore();
}
});
startlabel.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("GUI: Start ge<67>ffnet");
Dashboard_GUI.showstart();
}
});
}
//
// Methods
//
}

View File

@@ -1,8 +1,6 @@
package de.jaujau.gui;
import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
@@ -14,12 +12,17 @@ import javax.swing.JTextArea;
public class Hilfe_GUI extends JFrame {
/**
*
*/
private static final long serialVersionUID = 1L;
private JPanel contentPane;
/**
* Create the frame.
*/
public Hilfe_GUI() {
setAlwaysOnTop(true);
setBounds(100, 100, 588, 382);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));

View File

@@ -1,119 +0,0 @@
package de.jaujau.gui;
import java.awt.CardLayout;
import java.awt.Color;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import de.jaujau.daten.Spielerverwaltung;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.FlowLayout;
import javax.swing.SwingConstants;
import javax.swing.table.DefaultTableModel;
import java.awt.Font;
public class Menue_GUI
extends JPanel {
private CardLayout cardLayout;
private JPanel panel1, panel2, panel3;
private int sizemenu = 270;
// Konstruktor
public Menue_GUI(Spielerverwaltung speicherung) {
setBorder(javax.swing.BorderFactory.createTitledBorder("Content"));
cardLayout = new CardLayout();
this.setLayout(cardLayout);
// Objekte der Panel erzeugen, die angezeigt werden sollen
panel1 = new JPanel();
panel1.setName("panel1");
panel2 = new JPanel();
panel2.setName("panel2");
panel3 = new JPanel();
panel3.setName("panel3");
panel1.setBackground(Color.YELLOW);
panel2.setBackground(Color.WHITE);
panel3.setBackground(Color.GREEN);
JLabel label1 = new JLabel("Startseite");
label1.setAlignmentX(Component.CENTER_ALIGNMENT);
JLabel label2 = new JLabel("Highscore");
label2.setFont(new Font("Tahoma", Font.PLAIN, 18));
label2.setHorizontalAlignment(SwingConstants.CENTER);
label2.setAlignmentX(Component.CENTER_ALIGNMENT);
renderHighscore(); //Highscore Tabelle wird geladen
panel2.setVisible( true );
JLabel label3 = new JLabel("Panel 3: Spiel");
panel2.add(label2, BorderLayout.NORTH);
panel3.add(label3);
this.add(panel1, "Start");
panel1.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
panel1.add(label1);
JLabel lblNewLabel_1 = new JLabel("New label");
panel1.add(lblNewLabel_1);
this.add(panel2, "Highscore");
this.add(panel3, "Spiel");
JPanel panel4 = new JPanel();
panel4.setBackground(Color.LIGHT_GRAY);
this.add(panel4, "Einstellungen");
JLabel lblNewLabel = new JLabel("Einstellungen");
panel4.add(lblNewLabel);
}
public void showPanel(String panel) {
cardLayout.show(this, panel);
}
public void renderHighscore() {
String[][] rowData = {{ "Seb", "245" }, { "Elmo", "240" }, { "Moritz","220" }, { "Alaa Aldin", "217" }, {"Fabian", "215"}}; //Bsp. Datensatz muss noch entfernt werden.
String[] columnNames = {"Name", "Punkte"};
panel2.setLayout(new BorderLayout(0, 0));
JTable table = new JTable(); //Leere Tabelle
DefaultTableModel tableModel = new DefaultTableModel(rowData, columnNames) { //Tabelle formatieren und Zellen nicht bearbeitbar machen
private static final long serialVersionUID = 838285314713L;
public boolean isCellEditable(int row, int column) {
//all cells false
return false;
}
};
table.setAutoCreateRowSorter(true); //Tabelle Sortierbar durch Tabellenkopf
table.getTableHeader().setReorderingAllowed(false); //Tabelle nicht mehr drag and drop
table.setModel(tableModel);
panel2.add( new JScrollPane( table ) );
}
}

View File

@@ -2,43 +2,33 @@ package de.jaujau.gui;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import java.awt.BorderLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JLabel;
import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Image;
import javax.swing.BoxLayout;
import java.awt.Component;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.ImageIcon;
import java.awt.CardLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.GridBagLayout;
import java.awt.GridBagConstraints;
import java.awt.Insets;
public class Navigation_GUI
extends JPanel
implements ActionListener {
/**
*
*/
private static final long serialVersionUID = 1L;
private JPanel panel;
private Menue_GUI Menue_GUI;
// Konstruktor
public Navigation_GUI(Menue_GUI menue_GUI) {
this.Menue_GUI = menue_GUI;
public Navigation_GUI() {
// Hiermit bekommst du Zugriff auf das <20>bergebene Objekt mainPanel
setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
@@ -84,7 +74,6 @@ implements ActionListener {
panel_2.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
Menue_GUI.showPanel("Start");
}
});
panel_2.setBackground(new Color(0, 102, 204));
@@ -101,7 +90,6 @@ implements ActionListener {
panel_3.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
Menue_GUI.showPanel("Highscore");
}
});
panel_3.setBackground(new Color(0, 102, 204));
@@ -134,15 +122,5 @@ implements ActionListener {
// In dieser Methode <20>nderst du das anzuzeigende Panel
// <20>ber die showPanel-Methode in mainPanel
public void actionPerformed(ActionEvent e) {
if(e.getActionCommand().equals("Highscore"))
Menue_GUI.showPanel("Highscore");
if(e.getActionCommand().equals("Spiel"))
Menue_GUI.showPanel("Spiel");
if(e.getActionCommand().equals("Einstellungen"))
Menue_GUI.showPanel("Einstellungen");
}
}

View File

@@ -1,65 +0,0 @@
package de.jaujau.gui;
import java.awt.Image;
import javax.swing.JPanel;
import javax.swing.BoxLayout;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.ImageIcon;
import de.jaujau.daten.Kartensatz;
import de.jaujau.daten.Spielerverwaltung;
import de.jaujau.daten.Texturenpakete;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Spiel_GUI extends JPanel implements ActionListener {
/**
*
*/
private static final long serialVersionUID = 1L;
private Spielerverwaltung spielerverwaltung;
Texturenpakete texturen = new Texturenpakete();
/**
* Create the application.
* @param speicherung
*/
public Spiel_GUI() {
setLayout(null);
System.out.println("Spiel_GUI: Spiel-GUI aufgerufen");
initialize(spielerverwaltung);
}
/**
* Initialize the contents of the frame.
*/
//Test GUI f<>r JauJau
private void initialize(Spielerverwaltung speicherung) {
this.spielerverwaltung = speicherung;
setBounds(100, 100, 963, 762);
JPanel panel_main = new JPanel();
panel_main.setPreferredSize(new Dimension(600, 600));;
panel_main.setLayout(new BoxLayout(panel_main, BoxLayout.X_AXIS));
texturen.addPaket("StandartTexturenBeta3.zip");
texturen.setAktivesPaket(0);
}
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
}
public void paint(Graphics g) {
g.drawImage(texturen.getTextur(31), 50, 50, null);
}
}

View File

@@ -1,8 +1,5 @@
package de.jaujau.gui;
import java.util.*;
/**
* Class texturenauswaehlen_GUI
*/

View File

@@ -15,97 +15,29 @@ import de.jaujau.gui.GUI;
public class Anwendung {
private Spiel aktuellesSpiel;
private Texturenpakete texturenpakete;
private Spielerverwaltung speicherung;
private GUI gui;
private GUI view;
//
// Constructors
//
public Anwendung() {
speicherung = new Spielerverwaltung();
gui = new GUI(speicherung);
speicherung = new Spielerverwaltung();
texturenpakete = new Texturenpakete();
view = new GUI(texturenpakete, speicherung);
};
//
// Methods
//
// Accessor methods
//
/**
* Set the value of aktuellesSpiel
*
* @param newVar the new value of aktuellesSpiel
*/
public void setAktuellesSpiel(Spiel newSpiel) {
aktuellesSpiel = newSpiel;
}
/**
* Get the value of aktuellesSpiel
*
* @return the value of aktuellesSpiel
*/
public Spiel getAktuellesSpiel() {
return aktuellesSpiel;
}
/**
* Set the value of texturenpakete
*
* @param newVar the new value of texturenpakete
*/
public void setTexturenpakete(Texturenpakete newTexture) {
texturenpakete = newTexture;
}
/**
* Get the value of texturenpakete
*
* @return the value of texturenpakete
*/
public Texturenpakete getTexturenpakete() {
return texturenpakete;
}
/**
* Set the value of speicherung
*
* @param newVar the new value of speicherung
*/
public void setSpeicherung(Spielerverwaltung newVer) {
speicherung = newVer;
}
/**
* Get the value of speicherung
*
* @return the value of speicherung
*/
public Spielerverwaltung getSpeicherung() {
return speicherung;
}
//
// Other methods
//
public static void openMenue_GUI(Anwendung jaujau) { // Menue_GUI oeffnen!
jaujau.gui.setVisible(true);
}
/**
*/
public static void main(String[] args) {
Anwendung jaujau = new Anwendung();
openMenue_GUI(jaujau);
/**
/**
* Launch the application.
*/
Anwendung jaujau = new Anwendung();
jaujau.view.setVisible(true);
}
}

View File

@@ -18,8 +18,16 @@ public class Computer_gegner {
//
// Fields
//
Spiel spiel;
Kartensatz kartensatz;
Wert letztekartewert;
Farbe letztekartefarbe;
ArrayList<Integer> hand;
boolean farbeInHand = false;
boolean wertInHand = false;
boolean aussetzen = false;
boolean ziehen = false;
boolean bubeInHand = false;
//
// Constructors
//
@@ -51,18 +59,20 @@ public class Computer_gegner {
* Als n<>chstes Werden Karten der aktuellen Farbe gelegt
* Dann Karten die den aktuellenw Wert besitzen
* Zuletzt Buben um sich eine Farbe zu w<>nschen
* @param keine
* @param Kartensatz
* @return Kartenindex der Karte die gelegt werden soll
*/
public int cpu_Zug() {
Spiel spiel = Anwendung.getAktuellesSpiel(); //Erzeugt ein Abbild des aktuellen Spiels
Kartensatz kartensatz = spiel.getKartensatz(); //Erzeugt ein Abbild des aktuellen Kartensatzes, mit stand der Karten
Wert letztekartewert = kartensatz.getKarte(kartensatz.getletzteKarte()).getWERT(); //Speichert den Wert der Karte, die zuletzt gelegt wurde
Farbe letztekartefarbe = kartensatz.getKarte(kartensatz.getletzteKarte()).getFARBE(); //Speichert die Farbe der Karte, die zuletzt gelegt wurde
ArrayList<Integer> hand = kartensatz.getHand(Spieler.COMPUTER); //Speichert die Karten, die der Computer aktuell auf der Hand hat
boolean farbeInHand = false; //Speichert, ob die aktuell liegende Farbe in der Hand des Computers vorhanden ist
boolean wertInHand = false; //Speichert, ob der aktuell liegende Wert in der Hand des Computers vorhanden ist
int rueckgabeindex = 0; //Speichert den Kartenindex, der Karte, die gelegt werden soll
public int cpu_Zug(Kartensatz karten) {
kartensatz = karten; //Erzeugt ein Abbild des aktuellen Kartensatzes, mit Stand der Karten
letztekartewert = kartensatz.getKarte(kartensatz.getletzteKarte()).getWERT(); //Speichert den Wert der Karte, die zuletzt gelegt wurde
letztekartefarbe = kartensatz.getKarte(kartensatz.getletzteKarte()).getFARBE(); //Speichert die Farbe der Karte, die zuletzt gelegt wurde
hand = kartensatz.getHand(Spieler.COMPUTER); //Speichert die Karten, die der Computer aktuell auf der Hand hat
farbeInHand = false; //Speichert, ob die aktuell liegende Farbe in der Hand des Computers vorhanden ist
wertInHand = false; //Speichert, ob der aktuell liegende Wert in der Hand des Computers vorhanden ist
int rueckgabeindex = -1; //Speichert den Kartenindex, der Karte, die gelegt werden soll
aussetzen = spiel.getAussetzen(); //Speichert, ob der Computer aktuell aussetzen m<>sste
ziehen = spiel.getZwei_ziehen(); //Speichert, ob der Computer aktuell ziehen m<>sste
bubeInHand = false;
for(int i = 0; i < hand.size(); i++) { //Schleife geht alle Karten in der Hand des Computers durch
Farbe farbeHK = kartensatz.getKarte(hand.get(i)).getFARBE(); //Holt sich die Farbe der aktuellen Handkarte
@@ -75,6 +85,24 @@ public class Computer_gegner {
if(wertHK == letztekartewert) { //Pr<50>ft ob Wert der aktuellen Handkarte zur liegenden Karte passt
wertInHand = true;
}
if(wertHK == Wert.BUBE) { //Pr<50>ft, ob ein Bube (W<>nscher) auf der Hand vorhanden ist
bubeInHand = true;
}
}
//W<>hlt aus, welche Karte gelegt wird
if (aussetzen || ziehen) { //Muss der Computer aussetzen oder ziehen, versucht er eine passende Konterkarte zu legen
rueckgabeindex = wertLegen(letztekartewert);
}
else if(farbeInHand) { //Hat der Computer die Farbe auf der Hand, versucht er diese zu legen
rueckgabeindex = farbeLegen(letztekartefarbe);
}
else if(wertInHand) { //Hat der Computer nicht die passende Farbe, aber einen passenden Wert, legt er diesen
rueckgabeindex = wertLegen(letztekartewert);
}
else if(bubeInHand) { //Hat der Computer weder die passende Farbe, noch den passenden Wert auf der Hand, aber einen W<>nscher, legt er diesen
rueckgabeindex = wertLegen(Wert.BUBE);
}
@@ -82,6 +110,84 @@ public class Computer_gegner {
return rueckgabeindex;
}
/**
* Funktion sucht Karte passend zur gesuchten Farbe aus der Hand und gibt diese zur<75>ck
* Passen mehrere Karten, gibt sie die letzte passende zur<75>ck
* @return integer Index der zur<75>ckgegebenen Karte
*/
private int farbeLegen(Farbe gesuchteFarbe) {
int ind = -1;
for(int i = 0; i < hand.size(); i++) {
Farbe farbeHK = kartensatz.getKarte(hand.get(i)).getFARBE();
if(farbeHK == gesuchteFarbe) {
ind = hand.get(i);
}
}
return ind;
}
/**
* Funktion sucht Karte passend zum gesuchten Wert aus der Hand und gibt diese zur<75>ck
* Passen mehrere Karten, gibt sie die letzte passende zur<75>ck
* @return integer Index der zur<75>ckgegebenen Karte
*/
private int wertLegen(Wert gesuchterWert) {
int ind = -1;
for(int i = 0; i < hand.size(); i++) {
Wert wertHK = kartensatz.getKarte(hand.get(i)).getWERT();
if(wertHK == gesuchterWert) {
ind = hand.get(i);
}
}
return ind;
}
/**
* Funktion w<>hlt f<>r den Computer aus, welche Farbe er sich bei einem W<>nscher aussucht
* Dazu wird geschaut, von welcher Farbe er am meisten Karten auf der Hand hat
* @return Farbe gew<65>hlte Farbe
*/
public Farbe farbeAussuchen(Kartensatz karten) {
Farbe wahl = Farbe.KREUZ;
kartensatz = karten; //Erzeugt ein Abbild des aktuellen Kartensatzes, mit Stand der Karten
hand = kartensatz.getHand(Spieler.COMPUTER); //Speichert die Karten, die der Computer aktuell auf der Hand hat
int hoechsteAnzahl = 0;
int anzahl = 0;
Farbe[] farben = {Farbe.KREUZ, Farbe.PIK, Farbe.HERZ, Farbe.KARO};
for (int i = 0; i < farben.length; i++) {
anzahl = farbeZahl(farben[i]);
if (anzahl > hoechsteAnzahl) {
hoechsteAnzahl = anzahl;
wahl = farben[i];
}
}
return wahl;
}
/**
* Funktion z<>hlt f<>r die jeweilige Farbe, wie viele Karten der Farbe auf der Hand des Computer sind
* @param farbe Farbe, f<>r welche gez<65>hlt werden soll
* @return integer Wie viele Karten der Farbe auf der Hand sind
*/
private int farbeZahl(Farbe farbe) {
int anzahl = 0;
for (int i = 0; i < hand.size(); i++) {
Farbe farbeHK = kartensatz.getKarte(hand.get(i)).getFARBE();
if (farbeHK == farbe) {
anzahl ++;
}
}
return anzahl;
}
public int cpuTest() {
return 1;
}

View File

@@ -1,29 +1,41 @@
package de.jaujau.spiellogik;
import java.util.ArrayList;
import java.util.Random;
import de.jaujau.daten.Audio;
import de.jaujau.daten.Kartensatz;
import de.jaujau.daten.Spieler;
import de.jaujau.daten.Wert;
import de.jaujau.gui.Dashboard_GUI;
/**
* Diese Klasse pr<EFBFBD>ft die Spielaktionen und alterniert zwischen Spieler und Computer
* Diese Klasse organisiert den Spielablauf
* @author Fabian Keller
*/
public class Spiel {
private Spieler amZug;
private boolean spielgestartet = false;
private Wert gelegterWert;
private Audio audio;
private Kartensatz kartensatz;
private Spielzug spielzug;
private Computer_gegner computerGegner;
private boolean spielgestartet;
private boolean aussetzen;
private boolean zwei_ziehen;
private int kartenZiehen;
private Kartensatz kartensatz;
private Wert gelegterWert;
private Spielzug spielzug;
private Dashboard_GUI dashboard;
public Spiel(Dashboard_GUI dashboard_gui) {
computerGegner = new Computer_gegner();
audio = new Audio();
kartensatz = new Kartensatz();
spielzug = new Spielzug();
spielgestartet = false;
dashboard = dashboard_gui;
}
public boolean getAussetzen() {
return aussetzen;
@@ -40,36 +52,58 @@ public class Spiel {
}
public Spieler getamZug() {
return amZug;
}
/**
* alterniert zwischen Spieler und Computer und legt Beginner fest
* Organisiert den Spielablauf
*/
private void spiel() {
if(!spielgestartet) {
public void spiel(Dashboard_GUI dashboard) {
//Spiel nicht gestartet
if(!spielgestartet) {
System.out.println("Spiel gestartet.");
Random zufallszahl = new Random();
int zahl = zufallszahl.nextInt(1);
int zahl = zufallszahl.nextInt(2);
if(zahl == 1) { //Starter durch zufall bestimmen
amZug = Spieler.SPIELER;
System.out.println("Spieler startet");
}
else {
else {
amZug = Spieler.COMPUTER;
System.out.println("Computer startet");
}
spielgestartet = true;
for(int i = 0; i < 7; i++) { //Jeder bekommt 7 Karten
kartensatz.ziehen(Spieler.COMPUTER);
kartensatz.ziehen(Spieler.SPIELER);
}
int kartenindex = zufallszahl.nextInt(31);
int kartenindex = zufallszahl.nextInt(32);
while(kartensatz.getHand(Spieler.COMPUTER).contains(kartenindex)||kartensatz.getHand(Spieler.SPIELER).contains(kartenindex)) {
kartenindex = zufallszahl.nextInt(31);
kartenindex = zufallszahl.nextInt(32);
}
kartensatz.ablegen(kartenindex); //nicht in der Hand befindliche Karte zum Start aufdecken
System.out.println("Kartenhand von COMPUTER: " + kartensatz.getHand(Spieler.COMPUTER));
System.out.println("Kartenhand von SPIELER: " + kartensatz.getHand(Spieler.SPIELER));
return;
}
}
//Spiel bereits gestartet
if(amZug == Spieler.SPIELER) {
amZug = Spieler.COMPUTER;
dashboard.aktualisiereGUI(); //Komplette GUI wird aktualisiert
System.out.println("Computer am Zug");
//wenn m<>glich Computer soll Karte legen
if(spielzug.zugMoeglich(Spieler.COMPUTER)) {
//karteLegen(computerGegner.cpu_Zug());
}
//andernfalls soll gezogen werden
else karteZiehen();
}
else {
amZug= Spieler.SPIELER;
System.out.println("Spieler am Zug");
// Warten auf GUI Eingabe
}
}
@@ -78,44 +112,66 @@ public class Spiel {
* falls eine Karte gelegt werden kann wird diese gelegt
* @param kartenindex
*/
private void karteLegen(int kartenindex) { //W<>NSCHER?
if(pruefeHand(amZug)) {
public void karteLegen(int kartenindex) {
if(spielzug.zugMoeglich(amZug)) {
System.out.println("Legen M<>glich");
if (spielzug.pruefeZug(kartenindex)) {
System.out.println("pruefeZug positiv");
kartensatz.ablegen(kartenindex);
spiel();
effekteSetzen(); //kartenindex <20>bergeben und anhand dessen effekte setzen
}//oder ziehen?
}// else kein Zug m<>glich
if(kartensatz.getHand(amZug).size() == 1) {
audio.spieleJau();
}
if(kartensatz.getHand(amZug).isEmpty()) {
audio.spieleJauJau();
//Spieler hat gewonnen, keine Karte mehr auf der Hand -- Was passiert?
// Spieler Gewonnen aufrufen, Punkte aktualisieren
// Highscore Page oder Startseite aufrufen
}
effekteSetzen();
spiel(dashboard);
}
}
else {
aussetzen = false;
}
}//wann wird aussetzen auf false gesetzt
System.out.println("Kartenhand von COMPUTER: " + kartensatz.getHand(Spieler.COMPUTER));
System.out.println("Kartenhand von SPIELER: " + kartensatz.getHand(Spieler.SPIELER));
}
/**
* falls eine oder mehrere Karten gezogen werden k<>nnen, wird dies ausgef<65>hrt
*/
private void karteZiehen(){
if(pruefeHand(amZug)) {
public void karteZiehen(){
if(spielzug.zugMoeglich(amZug)) {
if(zwei_ziehen) {
for(int i = 0; i < kartenZiehen; i++) {
kartensatz.ziehen(amZug);
}
kartenZiehen = 0;
zwei_ziehen = false;
spiel();
spiel(dashboard);
}
else {
kartensatz.ziehen(amZug);
kartensatz.ziehen(amZug);
spiel(dashboard);
}
}
else {
aussetzen = false;
spiel(dashboard);
}
System.out.println("Kartenhand von COMPUTER: " + kartensatz.getHand(Spieler.COMPUTER));
System.out.println("Kartenhand von SPIELER: " + kartensatz.getHand(Spieler.SPIELER));
effekteSetzen();
}
/**
* setzt Effekt-Variablen
*/
private void effekteSetzen() { //was passiert wenn 2 gezogen wurde und dann der n<>chste spieler diese Funktion ausf<73>hrt.
private void effekteSetzen() {
gelegterWert = kartensatz.getKarte(kartensatz.getletzteKarte()).getWERT();
if(gelegterWert == Wert.ACHT) {
aussetzen = true;
@@ -124,25 +180,6 @@ public class Spiel {
zwei_ziehen = true;
kartenZiehen += 2;
}
}
/**
* pr<70>ft ob, wenn eine 8 gelegt wurde, eine 8 auf der Hand ist
* und der Zug somit m<>glich ist
* @return true falls ein Zug m<>glich ist
* @return false falls kein Zug m<>glich ist
*/
private boolean pruefeHand(Spieler amZug) {
if(aussetzen) {
ArrayList<Integer> handvonSpieler = kartensatz.getHand(amZug);
for(int i = 0; i < handvonSpieler.size(); i++) {
if(kartensatz.getKarte(handvonSpieler.get(i)).getWERT() == Wert.ACHT) {
return true;
}
}
return false;
}
return true;
}
System.out.println("Effekte gesetzt:\nAussetzen: " + aussetzen + "\nZwei_Ziehen: " + zwei_ziehen );
}
}

View File

@@ -56,24 +56,25 @@ public class Spielzug {
* @return boolean
*/
public boolean pruefeZug(int kartenindex) {
Spiel Spiel = Anwendung.getAktuellesSpiel();
Kartensatz kartensatz = Spiel.getKartensatz();
Farbe kartenfarbe = kartensatz.getKarte(kartenindex).getFARBE();
Wert kartenwert = kartensatz.getKarte(kartenindex).getWERT();
Wert letztekartewert = kartensatz.getKarte(kartensatz.getletzteKarte()).getWERT();
Farbe letztekartefarbe = kartensatz.getKarte(kartensatz.getletzteKarte()).getFARBE();
if(Spiel.getAussetzen() && kartenwert == Wert.ACHT) {
return true;
}
else if (Spiel.getZwei_ziehen() && kartenwert == Wert.SIEBEN) {
return true;
}
else if (!Spiel.getAussetzen() && !Spiel.getZwei_ziehen() && (kartenwert == letztekartewert || kartenfarbe == letztekartefarbe || kartenwert == Wert.BUBE)) {
return true;
}
else {
return false;
}
// Kartensatz kartensatz = Spiel.getKartensatz();
//
// Farbe kartenfarbe = kartensatz.getKarte(kartenindex).getFARBE();
// Wert kartenwert = kartensatz.getKarte(kartenindex).getWERT();
// Wert letztekartewert = kartensatz.getKarte(kartensatz.getletzteKarte()).getWERT();
// Farbe letztekartefarbe = kartensatz.getKarte(kartensatz.getletzteKarte()).getFARBE();
// if(Spiel.getAussetzen() && kartenwert == Wert.ACHT) {
// return true;
// }
// else if (Spiel.getZwei_ziehen() && kartenwert == Wert.SIEBEN) {
// return true;
// }
// else if (!Spiel.getAussetzen() && !Spiel.getZwei_ziehen() && (kartenwert == letztekartewert || kartenfarbe == letztekartefarbe || kartenwert == Wert.BUBE)) {
// return true;
// }
// else {
return true; // auf true ge<67>ndert f<>r DEBUG!!
// }
}
/**
@@ -82,14 +83,14 @@ public class Spielzug {
* @return
*/
public boolean zugMoeglich(Spieler spieler) {
Kartensatz kartensatz = Spiel.getKartensatz();
boolean gefunden = false;
ArrayList<Integer> Hand = kartensatz.getHand(spieler);
for (int i = 0; i < Hand.size(); i++) {
if (pruefeZug(i)) {
gefunden = true;
}
}
// Kartensatz kartensatz = Spiel.getKartensatz();
boolean gefunden = true; // auf true ge<67>ndert f<>r DEBUG!!
// ArrayList<Integer> Hand = kartensatz.getHand(spieler);
// for (int i = 0; i < Hand.size(); i++) {
// if (pruefeZug(i)) {
// gefunden = true;
// }
// }
return gefunden;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 KiB

After

Width:  |  Height:  |  Size: 8.7 KiB

BIN
src/sound/jau.wav Normal file

Binary file not shown.

BIN
src/sound/jaujau.wav Normal file

Binary file not shown.