Hey Leute,
ich sitze hier im Informatikunterricht und wir haben die Aufgabe ein Spiel,bei uns TicTacToe, zu programmieren und dieses per Sever-Client zu bedienen. Das Spiel und dessen Regeln sind bereits programmiert, jedoch :rtfm: haben wir Probleme bei der Einbettung des Servers bzw. des Clients???:L
Hier der bisherige Quellcode:
Zunächst die Klasse Feld:
Hier die Klasse Brett:
Als Servergrundlage haben wir jetzt das hier:
DAs war früher ein Server der Zahlen verdoppelt hat,
wir wollen ihn jetzt umprogrammieren als TicTacToe-Server,
ALs Methoden bräuchten wir ja ne methode um ein Feld zu setzen ne,
frage ist jetzt natürlich noch ob wir noch weitere methoden brauche
um zu spielen, wie etwa ne get methode etc... ???:L
Also nochmals die Bitte, helft uns damit wir mit einem :autsch:davon kommen.
Danke schonmal im Vorraus :toll:
Unser Infolehrer hat uns irwie folgendes vorgeschlagen,
wobei dies bei der methode processmessage:
ich sitze hier im Informatikunterricht und wir haben die Aufgabe ein Spiel,bei uns TicTacToe, zu programmieren und dieses per Sever-Client zu bedienen. Das Spiel und dessen Regeln sind bereits programmiert, jedoch :rtfm: haben wir Probleme bei der Einbettung des Servers bzw. des Clients???:L
Hier der bisherige Quellcode:
Zunächst die Klasse Feld:
Java:
/**
*
*/
public class Feld
{
public int inhalt;
/**
*
*/
public Feld () {
this.inhalt = 0;
}
/**
*
*/
public void set (int was) {
this.inhalt = was;
}
/**
*
*/
public int get () {
return this.inhalt;
}
}
Hier die Klasse Brett:
Java:
import java.util.*;
/**
* Frank J., Timm W., Philipp S.
*/
public class Brett
{
ArrayList <Feld> felder;
private boolean Sieg;
/**
* Erstellt das Objekt Brett,
* welches neun Felder hat.
*/
public Brett () {
this.felder = new ArrayList <Feld> ();
for (int i = 0; i < 9; i++) {
this.felder.add (new Feld ());
}
this.Sieg = false;
}
/**
* Die Methode zum setzten des Inhalts.
* Die Methode verwaltet automatisch wer an der Reihe ist (abwechselnd, beginnen tut Spieler 1).
* Auszuwählen ist das Feld, in das man sein Symbol setzten will.
* Definition: 0- 8; Felder zeilenweise nummeriert
* Spieler 1: 1
* Spieler 2: 2
*/
public void set (int index, int spieler) {
Siegescheck(index);
if (Sieg == true) {
System.out.println("Das Spiel ist bereits vorbei, wenn sie nochmal spielen möchten, starten sie ein neues Spiel mit der Methode reset.");
}
else {
if (this.felder.get(index).get() >= 1){
System.out.println("Feld ist schon belegt.");
}
else {
this.felder.get(index).set(spieler);
Siegescheck(index);
if (Sieg == true) {
System.out.println("Das Spiel ist vorbei, Spieler " + spieler + " gewinnt!");
}
else if(Sieg == false && this.felder.get(0).get() != 0 && this.felder.get(1).get() != 0 && this.felder.get(2).get() != 0
&& this.felder.get(3).get() != 0 && this.felder.get(4).get() != 0 && this.felder.get(5).get() != 0
&& this.felder.get(6).get() != 0 && this.felder.get(7).get() != 0 && this.felder.get(8).get() != 0)
{
System.out.println("Das Spiel ist vorbei, es geht unentschieden aus!");
}
else {
}
}
}
}
/**
* Interne Methode, die zum verwalten der Regeln benutzt wird.
* Sie überprüft ob das Spiel bereits gewonnen ist.
*/
private void Siegescheck(int index){
for (int i = 0; i < 9; i++) {
this.felder.get(index).get();
}
//Spieler 1:
// horizontal
if (this.felder.get(0).get() == 1 && this.felder.get(1).get() == 1 && this.felder.get(2).get() == 1){
Sieg = true;
}
else if (this.felder.get(3).get() == 1 && this.felder.get(4).get() == 1 && this.felder.get(5).get() == 1){
Sieg = true;
}
else if (this.felder.get(6).get() == 1 && this.felder.get(7).get() == 1 && this.felder.get(8).get() == 1){
Sieg = true;
}
// senkrecht
else if (this.felder.get(0).get() == 1 && this.felder.get(3).get() == 1 && this.felder.get(6).get() == 1){
Sieg = true;
}
else if (this.felder.get(1).get() == 1 && this.felder.get(4).get() == 1 && this.felder.get(7).get() == 1){
Sieg = true;
}
else if (this.felder.get(2).get() == 1 && this.felder.get(5).get() == 1 && this.felder.get(8).get() == 1){
Sieg = true;
}
// diagonal
else if (this.felder.get(0).get() == 1 && this.felder.get(4).get() == 1 && this.felder.get(8).get() == 1){
Sieg = true;
}
else if (this.felder.get(2).get() == 1 && this.felder.get(4).get() == 1 && this.felder.get(6).get() == 1){
Sieg = true;
//Spieler 2:
// horizontal
if (this.felder.get(0).get() == 2 && this.felder.get(1).get() == 2 && this.felder.get(2).get() == 2){
Sieg = true;
}
else if (this.felder.get(3).get() == 2 && this.felder.get(4).get() == 2 && this.felder.get(5).get() == 2){
Sieg = true;
}
else if (this.felder.get(6).get() == 2 && this.felder.get(7).get() == 2 && this.felder.get(8).get() == 2){
Sieg = true;
}
// senkrecht
else if (this.felder.get(0).get() == 2 && this.felder.get(3).get() == 2 && this.felder.get(6).get() == 2){
Sieg = true;
}
else if (this.felder.get(1).get() == 2 && this.felder.get(4).get() == 2 && this.felder.get(7).get() == 2){
Sieg = true;
}
else if (this.felder.get(2).get() == 2 && this.felder.get(5).get() == 2 && this.felder.get(8).get() == 2){
Sieg = true;
}
// diagonal
else if (this.felder.get(0).get() == 2 && this.felder.get(4).get() == 2 && this.felder.get(8).get() == 2){
Sieg = true;
}
else if (this.felder.get(2).get() == 2 && this.felder.get(4).get() == 2 && this.felder.get(6).get() == 2){
Sieg = true;
}
}
}
/**
* Zeigt an ob das Spiel bereits gewonnen ist.
*/
public boolean getSieg(){
return this.Sieg;
}
/**
* Zeigt bei dem gewünschten Feld den Inhalt an.
* 0 = Kein Inhalt
* 1 = Spieler 1
* 2 = Spieler 2
*/
public int getInhalt(int index){
return this.felder.get(index).get();
}
/**
* Startet das Spiel neu.
*/
public void reset(){
this.Sieg = false;
int z = 0;
for (int i = 0; i < 9; i++) {
this.felder.get(z).set(0);
z++;
}
}
}
Als Servergrundlage haben wir jetzt das hier:
DAs war früher ein Server der Zahlen verdoppelt hat,
wir wollen ihn jetzt umprogrammieren als TicTacToe-Server,
ALs Methoden bräuchten wir ja ne methode um ein Feld zu setzen ne,
frage ist jetzt natürlich noch ob wir noch weitere methoden brauche
um zu spielen, wie etwa ne get methode etc... ???:L
Java:
public class DoppelServer extends Server {
final String ENDE = "*bye*";
private Doppler doppler;
public DoppelServer() {
super(2000); // Das ist der Port, auf dem der Server läuft!
doppler = new Doppler ();
}
public void processNewConnection(String pClientIP, int pClientPort) {
this.send(pClientIP, pClientPort, "Willkommen " + pClientIP + " auf Port "
+ pClientPort + " bei unserem Verdoppeler!");
this.send(pClientIP, pClientPort, "Angemeldet.");
}
public void processMessage(String pClientIP, int pClientPort, String pMessage) {
if (pMessage.equals(ENDE)) {
this.closeConnection(pClientIP, pClientPort);
}
else {
this.send(pClientIP, pClientPort, this.doppler.verdoppeln(pMessage));
}
if else(pMessage.startsWith("Set")) {
String snummer = pMessage.substring(4);
int nummer = Integer.parseInt(snummer);
brett.set(nummer);
String nachricht = "OK gesetzt an " + snummer + ".";
this.send(pClientIP, pClientPort, nachricht);
}
}
public void processClosedConnection(String pClientIP, int pClientPort) {
this.send(pClientIP, pClientPort, pClientIP + " " + pClientPort +
" Danke fuer die Teilnahme an unserem Doppeler.");
this.send(pClientIP, pClientPort, ENDE);
}
}
Also nochmals die Bitte, helft uns damit wir mit einem :autsch:davon kommen.
Danke schonmal im Vorraus :toll:
Unser Infolehrer hat uns irwie folgendes vorgeschlagen,
wobei dies bei der methode processmessage:
Java:
else if (pMessage.startsWith("Set")) {
String snummer = pMessage.substring(4);
int nummer = Integer.parseInt(snummer);
brett.set(nummer);
String nachricht = "OK gesetzt an " + snummer + ".";
this.send(pClientIP, pClientPort, nachricht);
}