/// <summary> /// Запуск игры /// </summary> public JsonResult Start(string settings) { GameState gameState = new GameState(); var gameSettings = JsonHelper.DeserialiazeWithType <GameSettings>(settings); IPlayer[] gamePlayers = new IPlayer[4]; int index = 0; foreach (var pl in gameSettings.players) { switch (pl) { case "robot": gamePlayers[index++] = new SmartPlayer(); break; case "human": gamePlayers[index++] = new WebHumanPlayer(); break; default: gamePlayers[index++] = new SmartPlayer2(); break; } } while (index < 4) { gamePlayers[index++] = new SmartPlayer(); } if (!gameSettings.mapId.HasValue) { gameSettings.mapId = new Random().Next(); } gameState.board = new Board(gamePlayers, gameSettings.mapId.Value); gameState.game = new Game(gamePlayers, gameState.board); Session["test"] = gameState; var service = new DrawService(); var map = service.Map(gameState.board); return(Json(new { gamename = "test", map = map, mapId = gameSettings.mapId.Value, stat = service.GetStatistics(gameState.game) })); }
public void Start(List <ClientInfo> ConnectedClients, Action <string> loger, Action <string> resultReport) { try { while (IsTerminated == false) { List <ClientInfo> playerList = null; try { //выбираем клиентов playerList = SelectPlayers(ConnectedClients); if (playerList.Count < 2) { Thread.Sleep(TimeSpan.FromMilliseconds(10)); continue; } List <IPlayer> players = playerList.ConvertAll <IPlayer>(x => new NetworkPlayer(x)); while (players.Count < 4) { players.Add(new SmartPlayer2()); } List <IdentifiedPlayer> identifiedPlayers = new List <IdentifiedPlayer>(); foreach (var client in playerList) { var identifiedPlayer = new IdentifiedPlayer(new NetworkPlayer(client), client.ClientId); identifiedPlayers.Add(identifiedPlayer); } while (identifiedPlayers.Count < 4) { var player = new SmartPlayer2(); identifiedPlayers.Add(new IdentifiedPlayer(player, player.GetType().Name)); } loger("Начался новый раунд, участники:\r\n" + string.Join("\r\n", identifiedPlayers.ConvertAll(x => x.Id))); GameOrganizer organizer = new GameOrganizer(null, identifiedPlayers); while (IsTerminated == false) { organizer.PlayNextGame(); string message = string.Format("Число игр {0}\r\n", organizer.Results.GamesCount); message += string.Format("Текущая карта {0}/{1}\r\n", organizer.Results.MapId, organizer.Results.PermutationId); message += organizer.Results.GetState(); resultReport(message); } } catch (Exception exp) { loger("Error: " + exp.Message); } finally { if (playerList != null) { foreach (ClientInfo client in playerList) { client.InGame = false; } } } for (int i = 1; i <= 50; i++) { if (IsTerminated) { break; } Thread.Sleep(TimeSpan.FromSeconds(0.1)); } } } catch (Exception exp) { loger(exp.Message); } }