Fettsau Geschrieben 22. Februar 2010 Geschrieben 22. Februar 2010 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: 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 Zitieren
flashpixx Geschrieben 22. Februar 2010 Geschrieben 22. Februar 2010 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. Zitieren
Fettsau Geschrieben 22. Februar 2010 Autor Geschrieben 22. Februar 2010 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.. Zitieren
flashpixx Geschrieben 22. Februar 2010 Geschrieben 22. Februar 2010 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. Zitieren
Fettsau Geschrieben 22. Februar 2010 Autor Geschrieben 22. Februar 2010 habe einen link gefunden: Java Tips - A game of Tic-Tac-Toe that can be played between two client applets das is doch sowas wie ich meine, vom prinzip her.. oder? Zitieren
Fettsau Geschrieben 22. Februar 2010 Autor Geschrieben 22. Februar 2010 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 Zitieren
flashpixx Geschrieben 22. Februar 2010 Geschrieben 22. Februar 2010 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. Zitieren
Fettsau Geschrieben 22. Februar 2010 Autor Geschrieben 22. Februar 2010 (bearbeitet) 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 22. Februar 2010 von Fettsau Zitieren
Fettsau Geschrieben 24. Februar 2010 Autor Geschrieben 24. Februar 2010 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! Zitieren
Empfohlene Beiträge
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.