public static void Start(GameStartMode mode) { switch (mode) { case GameStartMode.SinglePlayer: MSGBox.ShowMSGBox("New singleplayer game", "Size:", MSGBoxType.SizeInput, new EventHandler <string>(delegate(object s, string inp) { int input = int.Parse(inp); if (input > 5) { GameRenderer.Panel.CreateGraphics().FillRectangle(new SolidBrush(Color.Black), new Rectangle(new Point(), GameRenderer.Panel.Size)); //int xy = GameRenderer.Panel.Size.Width / input; //GameSize = new Point(xy, xy); if (GameRenderer.Panel.Size.Width / input < 3 || GameRenderer.Panel.Size.Height / input < 3) { Game.Paused = true; return; } GameSize = new Point(GameRenderer.Panel.Size.Width / input, GameRenderer.Panel.Size.Height / input); Game.Reset(); Form1.TimerEnabled = true; } else { Game.Paused = true; } })); break; case GameStartMode.MultiPlayer: if (Game.Player.Name == "Player") { MSGBox.ShowMSGBox("Please change your username from default.", "", MSGBoxType.Text); break; } MSGBox.ShowMSGBox("New multiplayer game", "Name:\nMax. players:", MSGBoxType.MultipleInput, new EventHandler <string>(delegate(object s, string input) { string[] strs = input.Split('\n'); int num = 0; if (int.TryParse(strs[1], out num)) { var match = new NetMatch { Name = strs[0], MaxPlayers = num, OwnerIP = Network.GetIPs(), OwnerName = Player.Name }; match.Players.Add(Game.Player); Game.Reset(); Network.CreateGame(match); } else { Game.Paused = true; } })); break; case GameStartMode.Connect: if (Game.Player.Name == "Player") { MSGBox.ShowMSGBox("Please change your username from default.", "", MSGBoxType.Text); break; } //string matches = Network.Matches.Combine<NetMatch, string>((match, combiner) => combiner += match.Name + " " + match.Players.Count + "/" + match.MaxPlayers + " " + match.OwnerName + "\n"); string inputs = "IP:"; MSGBox.ShowMSGBox("Connect to game", inputs, MSGBoxType.MultipleInput, new EventHandler <string>(delegate(object s, string input) { IPAddress address; if (IPAddress.TryParse(input.Replace("\n", ""), out address)) { Game.Reset(); Network.Connect(new NetMatch { OwnerIP = new IPAddress[] { address } }); //Game.Reset(false); - On successfull connect event } else { Game.Paused = true; } })); break; default: throw new ArgumentException(); } }
private static void ClientListenerThreadRun() { //TODO: Synchronised point placing on respawn try { //Connect to the server TcpClient client = new TcpClient(AddressFamily.InterNetworkV6); client.Connect(ConnectedMatch.OwnerIP, Port); var ns = client.GetStream().ToSafeNetStream(); Thread t = Thread.CurrentThread; ns.ErrorStopClient = client; ns.ErrorStopThread = t; var sw = new BinaryWriter(ns); sw.Write(52); JObject writedata = new JObject(); writedata["PlayerName"] = Game.Player.Name; writedata["Color"] = Game.Player.Color.ToArgb(); sw.Write(writedata.ToString()); var sr = new BinaryReader(ns); JObject readdata = JObject.Parse(sr.ReadString()); Game.GameSize = new Point((int)readdata["GameSize"]["X"], (int)readdata["GameSize"]["Y"]); Game.GameField = new SqCoord[Game.GameSize.X, Game.GameSize.Y]; Game.Length = (int)readdata["Length"]; ConnectedMatch.OwnerName = (string)readdata["OwnerName"]; //2015.08.29. for (int i = 0; i < Game.GameSize.X; i++) { for (int j = 0; j < Game.GameSize.Y; j++) { Game.GameField[i, j].PlayerName = (string)readdata["GameField"][i + ""][j + ""]["PlayerName"]; Game.GameField[i, j].Tick = (int)readdata["GameField"][i + ""][j + ""]["Tick"]; Game.GameField[i, j].Type = (SquareType)Enum.Parse(typeof(SquareType), (string)readdata["GameField"][i + ""][j + ""]["Type"]); } } ConnectedMatch.Players.Clear(); foreach (JProperty item in readdata["Players"]) { ConnectedMatch.Players.Add(new Player(item.Name, color: Color.FromArgb((int)item.Value["Color"]), x: (int)item.Value["Position"]["X"], y: (int)item.Value["Position"]["Y"])); if (item.Name == ConnectedMatch.OwnerName) { ConnectedMatch.Players.Last().Client = client; } } Game.Paused = false; SendUpdate = true; Game.Reset(false); while (true) { string playername = sr.ReadString(); try { Player player = ConnectedMatch.Players.SingleOrDefault(entry => entry.Name == playername); ReceiveAndProcessData(player, sr); } catch (Exception e) { Program.HandleException(e); } } } catch (ObjectDisposedException) { return; } catch (Exception e) { Program.HandleException(e); } }