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:
Client:
Zu viel für den VB-Tag
Viel Spaß damit
Gruß,
xored
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
- Imports System.Net.Sockets
- Imports System.IO
- Imports System.Net
- Imports System.Text.RegularExpressions
- Imports System.Drawing
- Imports System.Text
- Module Module1
- Private server As TcpListener
- Private client As New TcpClient
- Private ipendpoint As IPEndPoint = New IPEndPoint(IPAddress.Any, 8000)
- Private list As New List(Of Connection)
- Dim Packets As Integer
- Dim Users As Integer
- Dim ConnectedUsers As Integer = 0
- Dim UserList As New List(Of String)()
- Dim HandlungsList As New List(Of String)()
- Private Structure Connection
- Dim stream As NetworkStream
- Dim streamw As StreamWriter
- Dim streamr As StreamReader
- Dim nick As String
- End Structure
- Private Sub SendPacket(ByVal s As String)
- For Each c As Connection In list
- Try
- c.streamw.WriteLine(s)
- c.streamw.Flush()
- Catch
- End Try
- Next
- End Sub
- Sub Main()
- Console.ForegroundColor = ConsoleColor.Cyan
- Console.WriteLine("Server has been started...")
- Console.WriteLine("--------------------------------------------------------------------")
- Console.ResetColor()
- server = New TcpListener(ipendpoint)
- server.Start()
- While True
- client = server.AcceptTcpClient
- Dim Connection As New Connection
- Connection.stream = client.GetStream
- Connection.streamr = New StreamReader(Connection.stream)
- Connection.streamw = New StreamWriter(Connection.stream)
- Connection.nick = Connection.streamr.ReadLine
- list.Add(Connection)
- Console.ForegroundColor = ConsoleColor.Green
- Console.WriteLine(Connection.nick & ": Received connection")
- Console.WriteLine("--------------------------------------------------------------------")
- ConnectedUsers = ConnectedUsers + 1
- SendPacket("/SendPlayerNumber " & ConnectedUsers)
- Console.ResetColor()
- Dim ListenToConnectionThread As New Threading.Thread(AddressOf ListenToConnection)
- ListenToConnectionThread.Start(Connection)
- End While
- End Sub
- Private Sub ListenToConnection(ByVal con As Connection)
- Do
- Try
- Dim tmp As String = con.streamr.ReadLine
- SendPacket(con.nick & ": " & tmp)
- For Each c As Connection In list
- Packets = Packets + 1
- Next
- Try
- If tmp.Contains("/H") Then
- Console.WriteLine(con.nick & ": Recv ActionPacket")
- Dim str() = {tmp}
- For Each Word In str
- Dim regx = New Regex(" +")
- Dim splitString = regx.Split(Word)
- Console.WriteLine(con.nick & ": H:{0}", splitString(1))
- Dim Handlung As String = splitString(1)
- If Not HandlungsList.Contains(Handlung) Then
- HandlungsList.Add(Handlung)
- SendPacket("/SendActionRcv " & Handlung)
- End If
- Console.WriteLine("--------------------------------------------------------------------")
- Next
- End If
- If tmp.Contains("/Endgame") Then
- Console.WriteLine(con.nick & ": Recv EndGamePacket")
- Dim str() = {tmp}
- For Each Word In str
- Console.WriteLine(con.nick & ": Game restarted")
- HandlungsList.Clear()
- Console.WriteLine("--------------------------------------------------------------------")
- Next
- End If
- Catch
- End Try
- Catch
- list.Remove(con)
- Console.ForegroundColor = ConsoleColor.Red
- Console.WriteLine(con.nick & ": lost connection.")
- Console.WriteLine("--------------------------------------------------------------------")
- ConnectedUsers = ConnectedUsers - 1
- SendPacket("/OnlineUsers " & ConnectedUsers)
- Console.ResetColor()
- Users = Users - 1
- Exit Do
- End Try
- Loop
- End Sub
- End Module
Client:
Zu viel für den VB-Tag
Viel Spaß damit
Gruß,
xored