TCP Multiplayer TicTacToe

    • VB.NET

      TCP Multiplayer TicTacToe

      Hey,

      hatte während der Arbeit wieder etwas Langeweile, weshalb ich ein TCP Tic Tac Toe-Spiel geschrieben habe.
      Ist nichts besonderes, es fehlen noch Kleinigkeiten, aber es funktioniert.
      Ausbauen ist nicht schwer :)

      Screenshots:





      Ablauf:
      - Server starten
      - Client öffnen
      - IP eingeben und verbinden drücken
      - Es wird ein Spielerslot zugewiesen
      - Wenn mehr als 3 Connections->Zuschauer
      - Sobald einer gewonnen hat startet der Server "neu" und man kann neu beginnen

      ToDo:
      - Falls einer leaved und neu joint, den aktuellen Spielstand schicken (easy to do)
      - Falls einer leaved, den Zuschauern den Platz zuweisen
      - Falls noch keine 2 Spieler connected sind nicht starten lassen (easy to do)

      Server:

      VB.NET-Quellcode

      1. ​Imports System.Net.Sockets
      2. Imports System.IO
      3. Imports System.Net
      4. Imports System.Text.RegularExpressions
      5. Imports System.Drawing
      6. Imports System.Text
      7. Module Module1
      8. Private server As TcpListener
      9. Private client As New TcpClient
      10. Private ipendpoint As IPEndPoint = New IPEndPoint(IPAddress.Any, 8000)
      11. Private list As New List(Of Connection)
      12. Dim Packets As Integer
      13. Dim Users As Integer
      14. Dim ConnectedUsers As Integer = 0
      15. Dim UserList As New List(Of String)()
      16. Dim HandlungsList As New List(Of String)()
      17. Private Structure Connection
      18. Dim stream As NetworkStream
      19. Dim streamw As StreamWriter
      20. Dim streamr As StreamReader
      21. Dim nick As String
      22. End Structure
      23. Private Sub SendPacket(ByVal s As String)
      24. For Each c As Connection In list
      25. Try
      26. c.streamw.WriteLine(s)
      27. c.streamw.Flush()
      28. Catch
      29. End Try
      30. Next
      31. End Sub
      32. Sub Main()
      33. Console.ForegroundColor = ConsoleColor.Cyan
      34. Console.WriteLine("Server has been started...")
      35. Console.WriteLine("--------------------------------------------------------------------")
      36. Console.ResetColor()
      37. server = New TcpListener(ipendpoint)
      38. server.Start()
      39. While True
      40. client = server.AcceptTcpClient
      41. Dim Connection As New Connection
      42. Connection.stream = client.GetStream
      43. Connection.streamr = New StreamReader(Connection.stream)
      44. Connection.streamw = New StreamWriter(Connection.stream)
      45. Connection.nick = Connection.streamr.ReadLine
      46. list.Add(Connection)
      47. Console.ForegroundColor = ConsoleColor.Green
      48. Console.WriteLine(Connection.nick & ": Received connection")
      49. Console.WriteLine("--------------------------------------------------------------------")
      50. ConnectedUsers = ConnectedUsers + 1
      51. SendPacket("/SendPlayerNumber " & ConnectedUsers)
      52. Console.ResetColor()
      53. Dim ListenToConnectionThread As New Threading.Thread(AddressOf ListenToConnection)
      54. ListenToConnectionThread.Start(Connection)
      55. End While
      56. End Sub
      57. Private Sub ListenToConnection(ByVal con As Connection)
      58. Do
      59. Try
      60. Dim tmp As String = con.streamr.ReadLine
      61. SendPacket(con.nick & ": " & tmp)
      62. For Each c As Connection In list
      63. Packets = Packets + 1
      64. Next
      65. Try
      66. If tmp.Contains("/H") Then
      67. Console.WriteLine(con.nick & ": Recv ActionPacket")
      68. Dim str() = {tmp}
      69. For Each Word In str
      70. Dim regx = New Regex(" +")
      71. Dim splitString = regx.Split(Word)
      72. Console.WriteLine(con.nick & ": H:{0}", splitString(1))
      73. Dim Handlung As String = splitString(1)
      74. If Not HandlungsList.Contains(Handlung) Then
      75. HandlungsList.Add(Handlung)
      76. SendPacket("/SendActionRcv " & Handlung)
      77. End If
      78. Console.WriteLine("--------------------------------------------------------------------")
      79. Next
      80. End If
      81. If tmp.Contains("/Endgame") Then
      82. Console.WriteLine(con.nick & ": Recv EndGamePacket")
      83. Dim str() = {tmp}
      84. For Each Word In str
      85. Console.WriteLine(con.nick & ": Game restarted")
      86. HandlungsList.Clear()
      87. Console.WriteLine("--------------------------------------------------------------------")
      88. Next
      89. End If
      90. Catch
      91. End Try
      92. Catch
      93. list.Remove(con)
      94. Console.ForegroundColor = ConsoleColor.Red
      95. Console.WriteLine(con.nick & ": lost connection.")
      96. Console.WriteLine("--------------------------------------------------------------------")
      97. ConnectedUsers = ConnectedUsers - 1
      98. SendPacket("/OnlineUsers " & ConnectedUsers)
      99. Console.ResetColor()
      100. Users = Users - 1
      101. Exit Do
      102. End Try
      103. Loop
      104. End Sub
      105. End Module



      Client:
      Zu viel für den VB-Tag :whistling:

      Viel Spaß damit :)
      Gruß,
      xored
      Dateien
      • TCP TicTacToe.rar

        (401,32 kB, 136 mal heruntergeladen, zuletzt: )


      Meine Website:
      www.renebischof.de

      Meine erste App (Android):
      PartyPalooza