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

Fettsau

Mitglied
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.

Hoffe mir kann weiter geholfen werden.

Grüße
 

Atze

Top Contributor
ich glaube viel muss man da wirklich nicht "lernen". sockets / rmi, awt / swt / swing für die gui, und ne logik für das spiel überlegen, bzw was übertragen werden soll
 

Fettsau

Mitglied
Das sagst du so leicht, ich hab nur iwie noch keine Vorstellung davon wie ich das programmiere das der eine Client nen Kreuz macht und der andere nen Kreis..
Überhaupt was mit was verbunden ist, bin ich noch leicht verwirrt.
Meinst du mit Gui die Oberfläche des Spieles?

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 :(
 
Zuletzt bearbeitet:

Atze

Top Contributor
ja, mit der gui ist die jeweilige oberfläche des clients gemeint. es gibt da ja mehrere ansatzmöglichkeiten. erst musst du dir überlegen, ob du zwei "spielfelder" in den clients vorhalten und nur die änderungen übergeben willst, oder das spielfeld auf dem server simulierst und dies auf den clients anzeigst. (würde zum 2. tendieren). dann halt spiele mit jeweils 2 sockets bereitstellen, die beiden clients verbinden sich. einer von beiden startet, also belegt ein feld, dann der andere, nachdem er die info über den zug des gegners bekommen und visualisert hat, usw. dann noch ne abfrage bei jedem zug, ob ein spieler gewonnen hat und in dem falle an beide clients melden. ach ja, ein spieler bekommt eben nen kreuz, der andere n kreis, kannst ja auch bilder anstelle der buttons anzeigen.
 

Fettsau

Mitglied
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();
		}
	}
}

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
 

Fettsau

Mitglied
ok vielen dank für die Hilfe..
denke ich werde es jetzt wohl schaffen mein fertiges spiel netzwerkfähig zu machen..


das thema kann geschlossen oder gelöscht werden, ty!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Meine Erfahrung und mein Tipp Spiele- und Multimedia-Programmierung 4
coolian meine funktion um die höhe des terrains an bestimmter position in diesem fall spieler position zu bekommen giebt nur 0 zurück Spiele- und Multimedia-Programmierung 6
K Wie mache ich meine HP vertrauenswürdig ? Spiele- und Multimedia-Programmierung 22
T Ist meine Jump and Run Engine zu genau? Spiele- und Multimedia-Programmierung 4
ThoraxLaneus Minecraft MCP-Client mit Optifine fertig machen in IntelliJ klappt nicht ganz Spiele- und Multimedia-Programmierung 6
W Minecraft Client exportieren Spiele- und Multimedia-Programmierung 0
Z Minecraft Hilfe bei Minecraft PvP Client Spiele- und Multimedia-Programmierung 21
G [Game-Multiplayer] Welt vom Server zum Client senden. Spiele- und Multimedia-Programmierung 0
D JAVA Basiertes Spiel aus dem Internet in eigenem Client laden Spiele- und Multimedia-Programmierung 1
C Port umleiten: lesen und schreiben für MCServer-Client über Skype Spiele- und Multimedia-Programmierung 0
H Client-Server-Kommunikation Spiele- und Multimedia-Programmierung 9
M Multiplayer Game mit Frontend auf HTML5 - ohne ständigen Client Request - Möglich?! Spiele- und Multimedia-Programmierung 12
L Client für ein Browsergame Spiele- und Multimedia-Programmierung 21
c_sidi90 Server/Client Struktur Multiplayer Spiele- und Multimedia-Programmierung 9
M Browsergame Client Server Spiele- und Multimedia-Programmierung 4
S Game Client für kleine Competition Spiele- und Multimedia-Programmierung 3
T Selbst-handelnde Objekte im Client-Server Betrieb Spiele- und Multimedia-Programmierung 9
A Wie JAVA Webcam Client programmieren? Spiele- und Multimedia-Programmierung 11
T Kartenspiel mit Server Client Funktionen Spiele- und Multimedia-Programmierung 3
R Client/Server Spiele- und Multimedia-Programmierung 5

Ähnliche Java Themen

Neue Themen


Oben