Spieleprogrammierung



  • Hallo ,

    ich soll ein Ping Pong Spiel programmieren das man auch über ein Netzwerk spielen kann. Welche Programmiersprache würdet ihr verwenden ? Wie teste ich das am besten da ich nur 1 Computer habe. Muss ich da auch einen Server programmieren oder nur Client zu Client ? Wenn da jetzt mehrere Clients ping pong spielen, auf welchem Client würde dann der Server laufen.


  • Mod

    Peter_Mueller schrieb:

    Welche Programmiersprache würdet ihr verwenden ?

    Die, die man am besten kann.

    Wie teste ich das am besten da ich nur 1 Computer habe.

    Indem du das Programm mehrmals startest. Wenn du die Interprozesskommunikation via Netzwerkprotokoll machst, funktioniert das mit mehreren Instanzen am gleichen Computer genau so, wie mit jeweils einer Instanz auf verteilten Computern.

    Muss ich da auch einen Server programmieren oder nur Client zu Client ?

    Das musst du dir selber überlegen. In striktester Definition der Begriffe, wirst du wohl beides programmieren müssen, das kann aber auch beides innerhalb des gleichen Programms sein.



  • Also wo würde dann der Server laufen ? Sagen wir mal der läuft auf einem Client , dann müsste man doch über den Port entscheiden ob der Client oder der Server angesprochen wird. Die Spieler müssten dann vor dem Spiel entscheiden wer den Server installiert. Ist das so ? Client und Server Programmierung stellen doch 2 unterschiedliche Projekte dar ? Ich lege 1 Projekt für Client und 1 Projekt für den Server an.



  • Den Client "spricht" man nicht "an". Genau umgekehrt, der Client ist der der anspricht. Und der angesprochene der Server. Es gibt also nix zu unterscheiden. Der Server lauscht auf einem Port. Der Client nicht, der verbindet sich bloss zum Port des Servers.

    Und für den Spieler am einfachsten ist es wohl, wenn man den Server gar nicht extra installieren muss. D.h. wenn der einfach im Client mit eingebaut ist. Dann starten alle das Spiel, machen sich aus wessen Server verwendet wird, und geben dann z.B. die IP des PCs von demjenigen auf dem "Connect to Multiplayer Game" Screen ein.

    Als eigenes Projekt raustrennen kann man den Server trotzdem - z.B. in ne eigene DLL. Was es dann z.B. auch recht einfach machen würde eine zweite .exe zu machen die nur den Server "enthält" und die z.B. als Service gestartet werden kann.



  • wo find ich denn nen funktionsfähigen C# Client Server Code für mehrere Clients mit GUI



  • im Internet...mit google



  • Suche einfach mal nach "c# chat client".
    Für das Ping-Pong-Spiel reicht es doch aus, wenn sich jeweils 2 Spieler verbinden (eine Client-Verwaltung über einen Server ist viel zu viel Aufwand).



  • ich find nix. Da gibts nix lauffähiges. Nur für Console find ich was.



  • ach ich glaub ich mach den Server als Console Programm und den Client als Gui Programm.


  • Mod

    Klingt irgendwie, als verstündest du unter "ich soll ein Ping Pong Spiel programmieren das man auch über ein Netzwerk spielen kann." folgendes:

    import pingpong
    import netzwerkfähigkeit
    import geile_grafik
    
    __author__ = "Peter_Mueller"
    __comment__ = "Diese Programm hab ich ganz allein geschrieben!"
    
    pingpong.run()
    

    Frameworks dieser Art gibt es sogar, nennt sich in der Fachsprache Game Creation System. Viel Spaß beim "Programmieren".



  • ich hab jetzt einen funktionierenden Client Server gefunden. Aber das Visual Studio nervt da ganz schön rum wenn man da einfach Copy Paste macht. Plötzlich war mein InitaliseComponent Methode verschwunden. Ich musste alles stückchenweise kopieren. Hat schon mal jemand das Grundgerüst eines Client Server selbst geschrieben ?



  • So ziemlich jeder hier, denke ich.



  • wo vergibt man denn am besten die Client Id. Man muss ja die Clients unterscheiden können. Wie macht das der Server überhaupt. Meldet sich ein Client ab, dann müssen sich ja die Client ID auch wieder ändern. Hm . Oder hat man einen Pool mit IDs.

    wo informiert man alle Clients wenn sich was geändert hat. bei mir laufen alle Clients in einem eigenen Thread.

    Würdet ihr als Spielfläche auch ein Panel wählen ? Dummerweise hat ein Panel kein Key Event, wie soll ich jetzt einen Tastendruck abfragen. Was soll ich stattdessen nehmen ?



  • Du hast überhaupt keine Ahnung, oder? Zeig doch mal was du bis jetzt gemacht hast, außer C+P. Man sollt schon wissen das Programmieren nicht nur das stumpfe Abtippen von Codezeilen ist.



  • Wie würdest ihr das Protokoll machen.

    Player1Position;Player2Position;BallPositon;Punktestand

    Den String parse ich und zeichne das Spielfeld jedes Mal neu wenn der Server was schickt.



  • Ich denke es sind noch 1-2 Werte mehr zu übertragen. Ansonsten ja, wieso nicht. Vielleicht noch ne Message-Header dran - einfach den String vor dem ersten ";" als Message-Typ interpretieren.



  • Brauch ich hier eigentlich die while(true) Schleife ????
    Beim ersten Mal lesen da wird dem Player mitgeteilt welchen Schläger er hat. Das müsste ja außerhalb der while(true) Schleife kommen.

    TcpClient tcpClient = new TcpClient ();
    
            // Uses the GetStream public method to return the NetworkStream.
            NetworkStream netStream = tcpClient.GetStream ();
    
    		while(true)
    		{
    			if (netStream.CanRead)
    			{
    				// Reads NetworkStream into a byte buffer.
    				byte[] bytes = new byte[tcpClient.ReceiveBufferSize];
    				// Read can return anything from 0 to numBytesToRead. 
    				// This method blocks until at least one byte is read.
    				netStream.Read (bytes, 0, (int)tcpClient.ReceiveBufferSize);
    
    				// Returns the data received from the host to the console.
    				string returndata = Encoding.UTF8.GetString (bytes);
    
    				Console.WriteLine ("This is what the host returned to you: " + returndata);
    
    			}
    			else
    			{
    				Console.WriteLine ("You cannot read data from this stream.");
    				tcpClient.Close ();
    
    				// Closing the tcpClient instance does not close the network stream.
    				netStream.Close ();
    				return;
    			}
    		}
            netStream.Close();
    


  • Obwohl ich mein Server und Client Programm schließe läuft es trotzdem noch im Task Manager. Wie kann das denn sein ?



  • Hi,

    wo platziert man am besten die Methode

    private void receiveMessage(NetworkStream myNetworkStream)
    

    das Senden wird bei mir durch ein Ereignis ausgelöst. Aber wo pack ich das empfangen rein ? Der Client hat ja keinen zusätzlichen Thread oder so.



  • Gib doch einfach auf, damit ersparst du dir, uns und deinem Lehrer das Drama.


Anmelden zum Antworten