TCP Lan Spiel

  • Hey Leute.

    Da ich über das Thema mit den 3D MMORPG gestolpert bin, dachte ich mir gleich:

    Zitat

    Hey, du bist fast jeden Tag bei deinen Freund, und er hat eh so einen schwachen PC, zauber doch ein lustiges, kleines 2D Spiel.

    So, da ich ja jetzt nicht vorhabe Es gleich auf einen Server zu geben, und einen Ansturm von 500 Spielern will, sondern einfach so um mal ne kleine Runde zu 2,3,4 zu Spielen (Spielkonzept ist noch unklar, zurzeit sind es Tests mit den Bewegen eines Balles).

    So, nun zur Frage:

    Mein Script sieht bis jetzt so aus:

    Spoiler anzeigen
    [autoit]

    #include <GuiConstants.au3>
    #include <GdiPlus.au3>;das include
    #include <Misc.au3>

    [/autoit] [autoit][/autoit] [autoit]

    OnAutoItExitRegister("_end") ; die Funktion _end am Ende des Scriptes ausführen

    [/autoit] [autoit][/autoit] [autoit]

    $x = 0;x und y deklarieren
    $y = 0

    [/autoit] [autoit][/autoit] [autoit]

    $Gui = GUICreate("Beispiel", 600, 600, 100, 100)
    GUISetState(@SW_SHOW)

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_Startup() ;Gdi starten

    [/autoit] [autoit][/autoit] [autoit]

    $figur = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\Pics\Spieler1.png")
    $bk = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\Pics\Hintergrund.png")
    $height = _GDIPlus_ImageGetHeight($figur)
    $width = _GDIPlus_ImageGetWidth($figur)
    $verhaelnis = $height / $width
    $graphic = _GDIPlus_GraphicsCreateFromHWND($Gui)
    $bitmap = _GDIPlus_BitmapCreateFromGraphics(600, 600, $graphic);----------------- geändert ----------------------
    $buffer = _GDIPlus_ImageGetGraphicsContext($bitmap);----------------- geändert ----------------------

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    Select
    Case _IsPressed(25) ; Links
    $x -= 3
    Case _IsPressed(26) ; Rauf
    $y -= 3
    Case _IsPressed(27) ; Rechts
    $x += 3
    Case _IsPressed(28) ; Runter
    $y += 3
    EndSelect

    [/autoit] [autoit][/autoit] [autoit]

    If (_IsPressed(27) And _IsPressed(28)) Then ; Rechts + Runter
    $x += 3
    $y += 3
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If (_IsPressed(25) And _IsPressed(28)) Then ; Links + Runter
    $x -= 3
    $y += 3
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If (_IsPressed(25) And _IsPressed(26)) Then ; Links + Rauf
    $x -= 3
    $y -= 3
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If (_IsPressed(27) And _IsPressed(26)) Then ; Rechts + Rauf
    $x += 3
    $y -= 3
    EndIf

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_GraphicsDrawImageRect($buffer, $bk, 0, 0, 600, 600);----------------- geändert ----------------------
    _GDIPlus_GraphicsDrawImageRect($buffer, $figur, $x, $y, 20, 20 * $verhaelnis);----------------- geändert ----------------------
    _GDIPlus_GraphicsDrawImage($graphic, $bitmap, 0, 0);----------------- geändert ----------------------
    Sleep(30)

    [/autoit] [autoit][/autoit] [autoit]

    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _end();die Exit funktion
    _GDIPlus_GraphicsDispose($graphic);Grafik Objekt freigeben
    _GDIPlus_GraphicsDispose($buffer);----------------- geändert ----------------------
    _GDIPlus_BitmapDispose($bitmap);----------------- geändert ----------------------
    _GDIPlus_ImageDispose($figur);Bild Objekt 1 freigeben
    _GDIPlus_ImageDispose($bk);Bild Objekt 2 freigeben
    _GDIPlus_Shutdown();Ressourcen freigeben
    EndFunc ;==>_end

    [/autoit]

    Spieler 1 kann sich schon super bewegen.

    So, da es ja nicht dynamisch ist, sondern eig. immer durchlauft und Fragt was ich gerade drücke, würde ich diese Datei ein zweitesmal erstellen, nur mit den $X und $y für Spieler 2, und dann bei Beiden Exen, je nachdem ob der andewre Spieler das Spiel auch gestartet hat, den anderen SPieler zu zeichnen. Ob der Spieler gestartet hat, und wo er gerade ist (x und y) würde ich per TCP senden, da es ja bei so kleinen Bytemengen eigentlich ziemlich schnell gehen sollte.

    Nun habe ich aber das Problem, dass ich keinen Ansatz für das TCP habe, weil eigentlich funktioniert es ja so, dass es auf eine Antwort wartet, und dann was tut, es soll aber in meinen Beispiel nichgt warten, sondern nur dann was machen, wenn etwas kommt.

    Wie stelle ich das am besten an? Es muss jeder senden und jeder empfangen können.

  • Wie man sieht hab ich ja 0 Ahnung von GDI+, aber Okay, werde dir zu liebe QuickDraw geben, aber nicht wundern wenn ich dich dann mit meinen Fragen nerve ;D

    Okay, aber wie mache ich das mit TCP?

  • Ganz einfach ^^ .
    Guck dir mal die Bsp-Skripte an, von der Hilfe.
    Damit habe ich auch mein Server-Skript gemacht/bin am machen...
    (Ist nur zu empfehlen)
    Prinzip: Der Erste, der sich anmeldet=Server. Andere=Clients.

    Nur keine Hektik - das Leben ist stressig genug