Zum Inhalt springen

Client-Server am Beispiel einer Implementation eines Tic-Tac-Toe Netzwerkspieles


Fettsau

Empfohlene Beiträge

Hi,

also folgendes ich bin nun schon seid 2 Tagen "am dauergoogeln" und irgendwie habe ich noch nicht das passende für mich gefunden...

Zur Nebeninfo: Ich besuche zur Zeit das Gymnasium und bin im Informatik Grundkurs und bin in der Stufe 12, 2Halbjahr und schreibe dort jetzt meine Facharbeit. Ich besitze eigtl. gute Java Kenntnisse, jedoch gar nicht was Netzwerke angeht, doch ein gewisseses Grundwissen hab ich mir durch Lesen schon angeeignet.

Um zum Punkt zu kommen:

Meine Aufgabe ist es ein wirklich sehr triviales TicTacToe zu programmieren, was ich über Netzwerk spielen kann.

Also Spieler A spielt an Computer A und Spieler B spielt an Computer B. Das ganze soll mit Hilfe der Netzwerkprogrammierung implementiert werden. (Client-Server Prinzip)

Nun habe ich mir schon einige Implementationen angeschaut hier in diesem Forum und auch auf diversen anderen Seiten..

Jedoch sind das alles schon viel zu komplizierte Dinge für mich.. ich soll wirklich nur ein einfaches TicTacToe programmieren.

Es soll einfach nur so aussehen:

tttua.jpg

Dachte mir das einfach mit 9Knöpfen zu machen, ist ja am einfachsten oder nicht. Oder wie funktioniert dies mit so nem Feld Array?

Nun zu dem noch viel größeren Problem... Wie implementiere ich das ganze jetzt noch so, dass es per Netzwerk mit 2Spielern gespielt werden kann.

Durch Internetrecherche habe ich rausbekommen, dass man dazu einen Server programmieren muss, einen Client, einen Lauscher der hört ob sich ein Client anmeldet und dann brauch man noch Sockets usw..

Ich habe iwie den Überblick verloren und wollte fragen ob mir einer sagen kann was ich für dieses Projekt alles brauche etc..?

Ich meine damit jetzt nicht, dass mir hier die Hausaufgaben gemacht werden, sondern ich möchte nur ein Konzept wissen, was ich alles brauche um meine Aufgabe umzusetzen.. d.h welche Klassen, welche Kenntnisse über Netzwerkprogrammierung, etc..

Das ganze muss ich mit Eclipse 32 programmieren, natürlich in Java.

Bin echt verzweifelt nach so langer Zeit noch nichts passendes für mich gefunden zu haben.

Es muss ja eigtl nur ein ganz einfaches TicTacToe sein, 2Clients müssen sich anmelden und dann gehts los.

Doch ne genaue Vorstellung was ich dazu alles brauch fehlt mir iwie..

Hoffe mir kann weiter geholfen werden.

Grüße

Link zu diesem Kommentar
Auf anderen Seiten teilen

Naja Du musst Dir eben ein Protokoll ausdenken und über Sockets die Daten austauschen, d.h. Du musst irgendwo den Hostnamen oder die IP des anderen Spielepartners hinterlegen und dann eben bei jeder Aktion die Spieler A macht, die Pakete an B übertragen (und umgekehrt), immer wenn einer der Spieler etwas eingegeben hat, musst Du das Spiel sperren, bis der andere seinen Zug gemacht hat.

Sockets wäre wohl die einfachste Basis, alternativ kannst Du auch RMI benutzen. Ich würde Dir aber aus dem Lerneffekt zu Sockets raten.

Link zu diesem Kommentar
Auf anderen Seiten teilen

wie sieht die sache den aus, wenn ich 2bestimmte rechner habe..

also keine allgemeine programmierung sondern an iwelchen 2rechnern bei mir in der schule die haben ja beide eine feste ip etc..

wird das ganze dann einfacher ?

das muss ja nur ne ganz einfache anwendung übers netzwerk sein..

kein schnickschnack wie bei allen anderen tictactoes hier im netz mit computer gegner, sonderfunktionen, etc, etc..

Link zu diesem Kommentar
Auf anderen Seiten teilen

wie sieht die sache den aus, wenn ich 2bestimmte rechner habe..

also keine allgemeine programmierung sondern an iwelchen 2rechnern bei mir in der schule die haben ja beide eine feste ip etc..

wird das ganze dann einfacher ?

Wieso sollte!? Ob Du nun eine statische IP hast, den Hostnamen verwendest oder IPs außerhalb des LANs verwendest ist doch unerheblich. Du brauchst immer eine IP an die Du die Daten senden musst.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi also ich habe jetzt angefangen und habe das TicTacToe Spiel soweit fertig.

Das Problem ist nur noch, dass bis jetzt nur die Gewinnabfrage für die Diagonalen klappt, die für horizontal und vertikal klappen noch nicht.

Kann mir evtl. jemand sagen wo sich bei mir der Fehler versteckt?

Hier ist das Spiel:

[JAVA]

package ptictactoe;

import java.awt.event.*; // Für den ActionListener

import javax.swing.*; // Für das PopUp Fenster bei einem Sieg oder Remis

import basis.*; // Für die Knöpfe und das Fenster

public class TicTacToe implements ActionListener {

// Deklaration

private Fenster mf;

private Knopf mk1, mk2, mk3, mk4, mk5, mk6, mk7, mk8, mk9;

private String spieler;

private int spielzuege;

private boolean sieg;

public TicTacToeV1() {

// Konstruktion

mf = new Fenster();

mf.setzeTitel("SPIELER X IST DRAN !!!");

mf.setzeGroesse(300, 300);

mk1 = new Knopf("", 0, 0, 100, 100);

mk2 = new Knopf("", 100, 0, 100, 100);

mk3 = new Knopf("", 200, 0, 100, 100);

mk4 = new Knopf("", 0, 100, 100, 100);

mk5 = new Knopf("", 100, 100, 100, 100);

mk6 = new Knopf("", 200, 100, 100, 100);

mk7 = new Knopf("", 0, 200, 100, 100);

mk8 = new Knopf("", 100, 200, 100, 100);

mk9 = new Knopf("", 200, 200, 100, 100);

spieler = "";

spielzuege = 0;

sieg = false;

// ActionListener zu den Knöpfen hinzufügen

mk1.addActionListener(this);

mk2.addActionListener(this);

mk3.addActionListener(this);

mk4.addActionListener(this);

mk5.addActionListener(this);

mk6.addActionListener(this);

mk7.addActionListener(this);

mk8.addActionListener(this);

mk9.addActionListener(this);

}

public void actionPerformed(ActionEvent a) {

spielzuege++; // Nach jeder Aktion (hier ein Knopfdruck) wird die Variable spielzuege um 1 erhöht

// Zuweisung dafür, wer am Zug ist

if (spielzuege == 1 || spielzuege == 3 || spielzuege == 5

|| spielzuege == 7 || spielzuege == 9) {

spieler = "X";

mf.setzeTitel("SPIELER O IST DRAN !!!");

} else if (spielzuege == 2 || spielzuege == 4 || spielzuege == 6

|| spielzuege == 8 || spielzuege == 10) {

spieler = "O";

mf.setzeTitel("SPIELER X IST DRAN !!!");

}

// Zeichenzuweisung der Knöpfe jenachdem welcher Spieler am Zug war

if (a.getSource() == mk1) {

mk1.setzeText(spieler);

mk1.setzeBenutzbar(false);

} else if (a.getSource() == mk2) {

mk2.setzeText(spieler);

mk2.setzeBenutzbar(false);

} else if (a.getSource() == mk3) {

mk3.setzeText(spieler);

mk3.setzeBenutzbar(false);

} else if (a.getSource() == mk4) {

mk4.setzeText(spieler);

mk4.setzeBenutzbar(false);

} else if (a.getSource() == mk5) {

mk5.setzeText(spieler);

mk5.setzeBenutzbar(false);

} else if (a.getSource() == mk6) {

mk6.setzeText(spieler);

mk6.setzeBenutzbar(false);

} else if (a.getSource() == mk7) {

mk7.setzeText(spieler);

mk7.setzeBenutzbar(false);

} else if (a.getSource() == mk8) {

mk8.setzeText(spieler);

mk8.setzeBenutzbar(false);

} else if (a.getSource() == mk9) {

mk9.setzeText(spieler);

mk9.setzeBenutzbar(false);

}

// Bestimmung der Gewinnmöglichkeiten

// horizantal prüfen

if (mk1.text() == mk2.text() && mk2.text() == mk3.text()

&& mk1.text() != "") {

sieg = true;

} else if (mk4.text() == mk5.text() && mk5.text() == mk6.text()

&& mk4.text() != "") {

sieg = true;

} else if (mk7.text() == mk8.text() && mk8.text() == mk9.text()

&& mk7.text() != "") {

sieg = true;

}

// vertikal prüfen

if (mk1.text() == mk4.text() && mk4.text() == mk7.text()

&& mk1.text() != "") {

sieg = true;

} else if (mk2.text() == mk5.text() && mk5.text() == mk8.text()

&& mk2.text() != "") {

sieg = true;

} else if (mk3.text() == mk6.text() && mk6.text() == mk9.text()

&& mk3.text() != "") {

sieg = true;

}

// diagonal prüfen

if (mk1.text() == mk5.text() && mk5.text() == mk9.text()

&& mk1.text() != "") {

sieg = true;

} else if (mk3.text() == mk5.text() && mk5.text() == mk7.text()

&& mk3.text() != "") {

sieg = true;

} else {

sieg = false;

}

// Erzeugen eines PopUp Fensters, falls jemand gewonnen hat oder es Unentschieden steht

if (sieg == true) {

JOptionPane.showMessageDialog(null, spieler + " WINS!");

//Hilfe.warte(500);

//mf.gibFrei();

} else if (spielzuege == 9 && sieg == false) {

JOptionPane.showMessageDialog(null, "Remis! Kein Gewinner.");

//Hilfe.warte(500);

//mf.gibFrei();

}

}

}

[/JAVA]

Wenn die restlichen Gewinnabfragen jetzt noch klappen, kommt die Netzwerkprogrammierung an die Reihe.

Ich brauche einen Server, einen Client eine Klasse Connection und Sockets oder?

Möchte ja, dass sich 2 Clients anmelden und genau dieses Spiel dann spielen.

Client A ist Spieler X und Client B ist Spieler O.

Hoffe mir kann geholfen werden

Link zu diesem Kommentar
Auf anderen Seiten teilen

Kann mir evtl. jemand sagen wo sich bei mir der Fehler versteckt?

Ist das so schwer Code-Tags zu verwenden und nicht seinen eigenen Kram einzufügen !?

Ich brauche einen Server, einen Client eine Klasse Connection und Sockets oder?

Socket (Java 2 Platform SE v1.4.2)

Java ist auch eine Insel – 16.7 Mit dem Socket zum Server

Bitte einmal Google selbstständig verwenden

Möchte ja, dass sich 2 Clients anmelden und genau dieses Spiel dann spielen.

Client A ist Spieler X und Client B ist Spieler O.

Das ist Logik, die nichts mit Netzwerk zu tun hat, das musst Du dann schon selbst lösen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

sorry dachte das geht hier auch mit [JAVA], hab das zu spät gesehen..



	private void Gewinnmöglichkeiten() {


		// horizantal prüfen.

		if (mk1.text() == mk2.text() && mk2.text() == mk3.text()) {

			sieg = true;

		} else if (mk4.text() == mk5.text() && mk5.text() == mk6.text()) {

			sieg = true;

		} else if (mk7.text() == mk8.text() && mk8.text() == mk9.text()) {

			sieg = true;

		}


		// vertikal prüfen.

		if (mk1.text() == mk4.text() && mk4.text() == mk7.text()) {

			sieg = true;

		} else if (mk2.text() == mk5.text() && mk5.text() == mk8.text()) {

			sieg = true;

		} else if (mk3.text() == mk6.text() && mk6.text() == mk9.text()) {

			sieg = true;

		}


		// diagonal prüfen.

		if (mk1.text() == mk5.text() && mk5.text() == mk9.text()

				&& mk1.text() != "") {

			sieg = true;

		} else if (mk3.text() == mk5.text() && mk5.text() == mk7.text()

				&& mk3.text() != "") {

			sieg = true;

		} else {

			sieg = false;

		}

	}



Bearbeitet von Fettsau
Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...