Skip to content

Commit

Permalink
Hochzeit gefixt
Browse files Browse the repository at this point in the history
Beenden des Spiels angepasst -> Server beenden meldet die Clients ab
  • Loading branch information
mnk7 committed Mar 27, 2015
1 parent b5e29e3 commit 12ed5a2
Show file tree
Hide file tree
Showing 21 changed files with 132 additions and 44 deletions.
3 changes: 2 additions & 1 deletion bin/.gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
/client
/server
/lib
/graphik
Binary file modified bin/graphik/Graphik.class
Binary file not shown.
Binary file modified bin/graphik/Meldungen.class
Binary file not shown.
Binary file modified bin/graphik/SpielmodusDialog.class
Binary file not shown.
Binary file modified bin/lib/Model.class
Binary file not shown.
Binary file modified bin/server/Bot.class
Binary file not shown.
Binary file modified bin/server/Graphik$2.class
Binary file not shown.
Binary file modified bin/server/Graphik$3.class
Binary file not shown.
Binary file modified bin/server/Graphik.class
Binary file not shown.
Binary file modified bin/server/Mensch$1.class
Binary file not shown.
Binary file modified bin/server/Mensch.class
Binary file not shown.
Binary file modified bin/server/Server.class
Binary file not shown.
2 changes: 1 addition & 1 deletion src/graphik/Graphik.java
Original file line number Diff line number Diff line change
Expand Up @@ -444,7 +444,7 @@ public Karte hochzeitKarte() {
public void spielt(int spielt, int mitspieler) {
nachricht(spielt, "Ich spiel");
if(mitspieler != 4) {
nachricht(mitspieler, "Und ich hab geheiratet");
nachricht(mitspieler, "Und ich hab die Hochzeit angenommen");
}

if(ID == spielt || ID == mitspieler) {
Expand Down
2 changes: 1 addition & 1 deletion src/graphik/Meldungen.java
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ public void nachricht(String text) {
public void dran(boolean ein) {
if(ein) {
//Spieler einfärben
meldung[0].setForeground(Color.darkGray);
meldung[0].setForeground(Color.black);
} else {
//Spieler wieder auf normal
meldung[0].setForeground(Color.white);
Expand Down
86 changes: 86 additions & 0 deletions src/graphik/Meldungen.java~
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
package graphik;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridLayout;

import javax.swing.JLabel;
import javax.swing.JPanel;

public class Meldungen extends JPanel{

//Anzeigen
private JLabel[] meldung;

private int festeAnzeigen = 0;

public Meldungen(int histLaenge) {
super();

this.setLayout(null);
this.setOpaque(true);
this.setBackground(new Color(0,0,0,0));
this.setSize(200, histLaenge*20);

meldung = new JLabel[histLaenge];
for(int i = 0; i < meldung.length; i++) {
meldung[i] = new JLabel();
this.add(meldung[i]);
meldung[i].setBounds(0, i*20, 480, 20);
meldung[i].setBackground(new Color(0,0,0,0));
meldung[i].setForeground(Color.white);
}
}

/**
* Erstellt eine nicht veränderliche Anzeige in der ersten Zeile
* @param text
*/
public void festeAnzeige(String text) {
//Verdoppelt die letzte Meldung
nachricht(meldung[festeAnzeigen].getText());
//Und startet die feste Anzeige
meldung[festeAnzeigen].setText(text);
Font schrift = meldung[festeAnzeigen].getFont();
meldung[festeAnzeigen].setFont(schrift.deriveFont(schrift.BOLD+ schrift.ITALIC));
}

/**
* Fügt eine eine neue Nachricht hinzu
* @param text
*/
public void nachricht(String text) {
for(int i = meldung.length - 1; i > festeAnzeigen; i--) {
//Rückt alle Anzeigen eins nach unten
meldung[i].setText("");
meldung[i].setText(meldung[i - 1].getText());
}
//Zeigt die neue Meldung an
meldung[1].setText(text);
}

/**
* Zeigt an, dass der Spieler an der Reihe ist
*/
public void dran(boolean ein) {
if(ein) {
//Spieler einfärben
meldung[0].setForeground(Color.darkGray);
} else {
//Spieler wieder auf normal
meldung[0].setForeground(Color.white);
}
}

/**
* Setzt alle Meldungen zurück
*/
public void reset() {
festeAnzeigen = 0;
for(int i = 0; i < meldung.length; i++) {
meldung[i].setText("");
}
}

}
4 changes: 2 additions & 2 deletions src/graphik/SpielmodusDialog.java
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,7 @@ public String modusZuSprache(modus m) {
case HOCHZEIT:
return "eine Hochzeit";
case SAUSPIELeichel:
return "ein Sauspiel auf die Eichel-SAU";
return "ein Sauspiel auf die Eichel-Sau";
case SAUSPIELgras:
return "ein Sauspiel auf die Gras-Sau";
case SAUSPIELherz:
Expand Down Expand Up @@ -227,7 +227,7 @@ public String modusZuSprache(modus m) {
return "ein Sie";
}

return "Nichts";
return "nichts";
}

public void reset() {
Expand Down
2 changes: 2 additions & 0 deletions src/lib/Model.java
Original file line number Diff line number Diff line change
Expand Up @@ -302,6 +302,7 @@ public void hochzeit(int spielt, int mitspieler, Karte angebot, Karte angenommen
//Karte von der Hand des Spielers nehmen
spielerhand.get(spielt).remove(test);
spielerhand.get(mitspieler).add(test);
break;
}
}
Karte gegenTest;
Expand All @@ -311,6 +312,7 @@ public void hochzeit(int spielt, int mitspieler, Karte angebot, Karte angenommen
//Karte von der Hand des Spielers nehmen
spielerhand.get(mitspieler).remove(gegenTest);
spielerhand.get(spielt).add(gegenTest);
break;
}
}
}
Expand Down
3 changes: 0 additions & 3 deletions src/server/Bot.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ public class Bot implements Spieler {
private int ID;
private String name;
private Model model;
private int kontostand;
//wird nur benutzt, wenn eine Hochzeit durchgeführt wird
private Karte karte;

Expand Down Expand Up @@ -138,11 +137,9 @@ public void abmelden() {
}

public void rundeZuende(int kontostand) {
this.kontostand = kontostand;
}

public void konto(int kontostand) {
this.kontostand = kontostand;
}

public void update(Model model) {
Expand Down
9 changes: 4 additions & 5 deletions src/server/Graphik.java
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ public Graphik(){
try {
initGUI();
} catch(Exception e) {
javax.swing.JOptionPane.showMessageDialog(null, "Fehler beim Programmstart");
javax.swing.JOptionPane.showMessageDialog(null, "Fehler während des Programmstarts");
e.printStackTrace();
}
}
Expand Down Expand Up @@ -102,7 +102,7 @@ public void actionPerformed(ActionEvent evt) {
tarifWert = Integer.parseInt(tarif.getText());
} catch(Exception e) {
tarifWert = 10;
JOptionPane.showMessageDialog(g, "Falsche Tarifangabe. Der Tarif ist jetzt 10");
JOptionPane.showMessageDialog(g, "Keine Tarifangabe. Der Tarif ist jetzt 10");
}
server.setzeTarif(tarifWert);

Expand Down Expand Up @@ -130,7 +130,7 @@ public void actionPerformed(ActionEvent evt) {
server.beenden();
server = null;

beenden();
start.setText("Server starten");
}
}
});
Expand Down Expand Up @@ -202,9 +202,8 @@ public synchronized void clear() {

public void beenden() {
clear();
PlayerLabel[0].setText("Server beendet");
start.setText("Server starten");
spielerzahl = 0;
PlayerLabel[0].setText("Server beendet");
}
}

22 changes: 14 additions & 8 deletions src/server/Mensch.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ public class Mensch implements Spieler {

private String name;

private final int wartezeit = 800;

//speichert neueste antworten
private HashMap<String, Object> antwort;
private Model model;
Expand All @@ -32,6 +34,8 @@ public class Mensch implements Spieler {

private boolean beenden;

private Thread spieler;

public Mensch(Socket client, Server server) throws Exception {

beenden = false;
Expand All @@ -43,11 +47,12 @@ public Mensch(Socket client, Server server) throws Exception {
//Errichtet neue Verbindung
netzwerk = new Netzwerk(client);

new Thread() {
public void run() {
listen();
}
}.start();
spieler = new Thread() {
public void run() {
listen();
}
};
spieler.start();
}

/**
Expand Down Expand Up @@ -112,7 +117,7 @@ public synchronized String gibAntwort(String flag) {
a = "";
}

Thread.sleep(1000);
Thread.sleep(wartezeit);
} catch (Exception e) {
a = "";
continue;
Expand All @@ -126,7 +131,7 @@ public synchronized String gibAntwort(String flag) {
public Model gibModel() {
while(!modelupdate) {
try {
Thread.sleep(1000);
Thread.sleep(wartezeit);
} catch (InterruptedException e) {
}
}
Expand All @@ -137,7 +142,7 @@ public Model gibModel() {

public Karte gibKarte() throws InterruptedException {
while(karte == null) {
Thread.sleep(1000);
Thread.sleep(wartezeit);
}
Karte k = karte;
//löscht die eingelesene Karte, um nicht zweimal die gleiche zurückzugeben
Expand Down Expand Up @@ -307,6 +312,7 @@ public void rundeZuende(int kontostand) {
public void beenden() {
beenden = true;
netzwerk.beenden();
spieler.interrupt();
server.entferneSpieler(this);
}

Expand Down
43 changes: 20 additions & 23 deletions src/server/Server.java
Original file line number Diff line number Diff line change
Expand Up @@ -312,19 +312,7 @@ private void werspielt() throws Exception {
}
}

modus[] werspieltwas = new modus[4];
for(int i = 0; i < 4; i++) {
werspieltwas[i] = spielfolge.get(i);
}

hoechstesSpiel(spielfolge);

//Wenn zwei Spieler das Gleiche spielen, spielt der, der zuerst spielt
for(int i = werspieltwas.length - 1; i >= 0; i--) {
if(werspieltwas[i].equals(mod)) {
spielt = i;
}
}
}

private modus bestesSpielFinden(ArrayList<modus> spielfolge) {
Expand All @@ -351,6 +339,13 @@ private void hoechstesSpiel(ArrayList<modus> spielfolge) throws Exception {
//ermittelt das höchstwertige Spiel
spielErmitteln(spielfolge);

//Wenn zwei Spieler das Gleiche spielen, spielt der, der zuerst spielt
for(int i = spielfolge.size() - 1; i >= 0; i--) {
if(spielfolge.get(i).equals(mod)) {
spielt = i;
}
}

//Wenn eine Hochzeit nicht erlaubt ist, wird unter den restlichen Spielen ein höchstes ermittelt
if(mod.equals(modus.HOCHZEIT) && !hochzeit(spielt)) {
spielfolge.remove(spielt);
Expand All @@ -376,25 +371,26 @@ private boolean hochzeit(int spielt) throws Exception {
for(int i = 0; i < 4; i++) {
weristdran(i);
if(i != spielt && spieler.get(i).hochzeit()) {
hochzeitAnfragen(i, angebot);
if(hochzeitAnnehmen(i, angebot)) {
return true;
}
} else {
continue;
}
}
} else {
return false;
}

//Diese Fall ist nicht möglich, da i != spielt irgendwann zutrifft

return false;
}

private boolean hochzeitAnfragen(int mitspieler, Karte angebot) throws InterruptedException {
private boolean hochzeitAnnehmen(int mitspieler, Karte angebot) throws InterruptedException {
//Wenn die Hochzeit angenommen wird
Karte k = spieler.get(mitspieler).gibKarte();

//Wenn die Karte kein Trumpf ist
if(Hochzeit.istTrumpf(k.gibWert(), k.gibFarbe())) {
if(!Hochzeit.istTrumpf(k.gibWert(), k.gibFarbe())) {
model.hochzeit(spielt, mitspieler, angebot, k);
this.mitspieler = mitspieler;
return true;
Expand Down Expand Up @@ -759,21 +755,22 @@ public String gibIP() {
/**
* Beendet den Server
*/
@SuppressWarnings("deprecation")
public synchronized void beenden() {
public void beenden() {
try {
ArrayList<Spieler> s = (ArrayList<Spieler>) spieler.clone();

beenden = true;
server.close();
//Spieler werden entfernt
for(int i = 0; i < s.size(); i++) {

for(int i = 0; i < 4; i++) {
s.get(i).abmelden();
}

this.suspend();
this.interrupt();
this.finalize();

graphik.beenden();
} catch (IOException e) {
} catch (Throwable e) {
e.printStackTrace();
//Programm beenden
System.exit(0);
Expand Down

0 comments on commit 12ed5a2

Please sign in to comment.