Tags über Netzwerk?



  • Ich glaube, ich sehe Dein Problem nicht richtig?!

    Du willst auswerten was für ein Button gedrückt wurde und dann das ganze übertragen ?

    Der Ansatz mit den Tags ist schon der richtige Weg. Wenn der Button gedrückt wurde, generierst Du den Tag und versendest ihn. Der Empfänger nimmt den Tag wieder auseinander.

    Z.B. wird links oben ein Kreis gezeichnet
    möglicher Tag <1,1,Kreis>

    Empfänger:
    Auswertung der Koordinaten und dann z.B. ein Image mit einem Kreis an der entsprechenden Position anzeigen.



  • genau rostfrei
    das ist mein problem 🙂

    ich weiss jetzt nur nich, wie ich das übersenden kann 😕
    Ein Tag sind bei mir die Koordinaten x und y



  • Ganz schön viel Aufwand für maximal neun mögliche Buttons. Ich persönlich finde das ein wenig übertrieben. Ok, für das Ego ist das schon gut, aber warum denn so umständlich?

    In der primitivsten Version muss eigentlich nur eine Zahl übertragen werden, die die gewählte Position des Gegners angibt. Die Zahl würde ich über case auswerten und dann in einem zur Designzeit erstelltes Image ein Symbol anzeigen. Die Frage des Symbol ist auch einfach, da es nur zwei mögliche gibt.

    |1|2|3|
    |4|5|6|
    |7|8|9|

    Weiterhin kannst Du die Überprüfung auf ein schon benutztes Feld sparen. Prüfe einfach ob das Picture des Images nicht Null ist, also ob überhaupt etwas angezeigt wird.

    Gruss



  • hehe :p

    hab aber ein 8 x 8 großes Feld und man muss eine angabe der Sieglänge machen, also 3 bis 8 Steine hintereinander 🙂



  • Ok nehme alles zurück. Dann auf alle Fälle Arrays!

    Ich würde mir ein Array anlegen, in dem die Positionen der acht Felder gespeichert werden.

    Wenn Dein Prog etwas empfängt, gleicht es die übertragene Position ab und erstellt an dieser in dem Poitionsarray gespeicherten Koordinate ein dynamisches Image.

    Z.B.

    PositionArray[1][1] = "1|1";
    PositionArray[2][1] = "21|1";
    PositionArray[3][1] = "41|1";

    Oder nehm zwei Integerarrays, dann brauchst Du denn String nicht nochmal parsen.

    Ganz allgemein muss ich sagen, dass die Übertragung meiner Meinung nach nicht wirklich schwer ist, die Siegesauswertung würde mir Kopfzerbrechen bereiten.



  • Rostfrei[] schrieb:

    Ok nehme alles zurück. Dann auf alle Fälle Arrays!

    Ich würde mir ein Array anlegen, in dem die Positionen der acht Felder gespeichert werden.

    Dafür hab ich ja die Tags.
    Ich hab mir gedacht, ich speicher die Tags von Client1 in einer Variablen vom Client2.

    Wenn Dein Prog etwas empfängt, gleicht es die übertragene Position ab und erstellt an dieser in dem Poitionsarray gespeicherten Koordinate ein dynamisches Image.

    Z.B.

    PositionArray[1][1] = "1|1";
    PositionArray[2][1] = "21|1";
    PositionArray[3][1] = "41|1";

    Oder nehm zwei Integerarrays, dann brauchst Du denn String nicht nochmal parsen.

    Ganz allgemein muss ich sagen, dass die Übertragung meiner Meinung nach nicht wirklich schwer ist, die Siegesauswertung würde mir Kopfzerbrechen bereiten.



  • ich kann bei einem Spielzug die Tags zum Sender schicken. Ich muss die Tags nur zum zeiten Client schicken. Jemand ne idee?



  • Und jetzt ganz konkret: Was funktioniert ncht?



  • siehe post über dir 🙂



  • Zwei Clients?
    Ich dachte, dass das Spiel nur für zwei Spieler ist?

    Oder Du hast was falsch verstanden(oder ich...)

    Du musst einen Client und einen Server haben. Ein Server MUSS da sein. Clients können beliebig viele vorhanden sein.



  • Also ein Client soll einen Spieler darstellen. ergo habe ich 2 Clients 😉 🙂



  • Ich hoffe einfach mal, dass wir vom selben reden und Du einen Server und einen Client hast.

    Client:

    ClientSocket1->Socket->SendText(Tag);
    

    Server

    ServerSocket1->Socket[0]->SendText(Tag);
    // oder mit ActiveConnections
    
    int Verbindungen = ServerSocket1->Socket->ActiveConnections;
    for(int x = 0; x <= Verbindungen - 1; x++)
      ServerSocket1->Socket->Connections[x]->SendText(Tag);
    


  • einen Server habe ich. Und durch diesen Server will ich 2 CLients miteinander "verbinden", um gegeneinander zu spielen. 🙂

    ClientSocket1->Socket->SendText(Tag);
    

    Hier sendet also ein Client die Tags von den Buttons an den Server.
    funzt wunderbar.

    Wie kann aber ein weiterer Client diese Tags verwenden? Das ist nämlich mein aktuelles Problem.

    noch ein kleines Problemchen: wenn ich 2 Clients habe, wie kann der Server diese unterscheiden?



  • Unterscheiden kann er diese anhand der Socket Nummer.



  • Sorry, dass ich nochmals frage, aber wofür brauchst Du bei zwei Spielern einen Server und zwei Clients? Ich glaube Du verstehst da etwas falsch.

    int Verbindungen = ServerSocket1->Socket->ActiveConnections;
    for(int x = 0; x <= Verbindungen - 1; x++)
      ServerSocket1->Socket->Connections[x]->SendText(Tag);
    


  • http://home.arcor.de/apf3lsaft/TicTacToe.rar

    hier siehst du, wie ich es aufgebaut habe.
    Ich will also auf einer Oberfläche folgendes haben:
    - das Spiel, - einen Client, - einen Server.

    Jetzt soll auf einem anderen Pc im Netzwerk genau die selbe Oberfläche dargestellt sein.
    Die zwei Spieler sprechen sich ab und Spieler 1 aktiviert einen Server.
    Spieler 1 und Spieler 2 connecten (siehe Client- Groupbox) auf den Server.
    Spieler 1 (oder 2, egal) macht den ersten SPielzug, der dann auch beim anderen Spieler angezeigt wird usw.

    ich hoffe, dass es etwas klarer ist

    🙂 🙂



  • Du solltest Dir glaube ich mal ein Tutorial oder die Hilfe durchlesen!

    In Deinem Fall hast Du zwei Server und zwei Clients. Auf jeder Form also ein Paar!

    Wenn ein Spieler einen Server öffnet, braucht er sich doch nicht mehr mit seinem lokalen Client an den Server connecten. Wofür denn auch? Arbeite doch direkt mit der Client-Server-Kommunikation und nicht über den Umweg, dass der Client Daten an den Server schickt, welcher diese Daten weiter an den anderen Client schickt.



  • Rostfrei[] schrieb:

    Du solltest Dir glaube ich mal ein Tutorial oder die Hilfe durchlesen!

    In Deinem Fall hast Du zwei Server und zwei Clients. Auf jeder Form also ein Paar!

    genau. deshalb müssen sich die Spieler vorher absprechen ^^

    Wenn ein Spieler einen Server öffnet, braucht er sich doch nicht mehr mit seinem lokalen Client an den Server connecten. Wofür denn auch? Arbeite doch direkt mit der Client-Server-Kommunikation und nicht über den Umweg, dass der Client Daten an den Server schickt, welcher diese Daten weiter an den anderen Client schickt.

    verstehe ich nicht, sorry.
    bin erst seit n paar Tagen mit netzwerkprogrammieren beschäftigt 😋 🙂



  • Ok, ich werde versuchen Dir das auf die Schnelle mal zu erklären.

    Als Beispiel:

    Du hast Deine Form. Darauf setzt Du einen Serversocket und einen Clientsocket. Du gibst den Server den Port 1999.

    Wenn Du das Programm startest, kannst Du den Server des einen Spielers, der der Server sein möchte mit Open() starten. Somit ist jetzt ein Server gestartet! Der andere Spieler startet seinen Server nicht (da auf dem selben Port immer nur ein Server aktiv sein kann), sondern verbindet sich mit seinem Client über die IPAdresse und den Port 1999 zu Spielers1' Server.

    D.H.: Auf dem einen Rechner läuft ein Server(Spieler 1) und auf dem anderen Rechner hat sich ein Client(Spieler 2) zu dem Server verbunden.
    Jetzt kann der Client Daten an den Server schicken. Der Server kann aber auch Daten an den Client schicken.

    Client sendet:

    ClientSocket1->SendText(Tag);
    

    Server sendet:

    ServerSocket1->Socket[0]->SendText(Tag);
    // Socket [0] deswegen, da nur ein Client vorhanden
    

    Server liest aus der Verbindung mit TForm1::ServerSocket1ClientRead

    Client liest aus der Verbindung mit TForm1::ClientSocket1Read

    Dieser Sachverhalt ist sehr verständlich in dem Chatbeispielprogramm beschrieben.



  • also im Prinzip hab ich das verstanden.
    Nur habe ich hier keinen Serverclient.

    es ist im Prinzip wie ICQ.
    ausser das vorher von eine Person ein Server aktiviert werden muss.
    Dann starten beide Personen jeweils einen Client.

    //ich bin schlecht im erklären, ich weiss 😞

    einer von uns ist grad voll auf dem Schlauch, und ich denke dass ich es bin 🙄 😃


Anmelden zum Antworten