private void Start() { _gameProcessData = new GameProcessData(); foreach (var manager in _managers) { manager.Inject(_gameSettingsScriptableObject); } }
public JsonResult UpdateGameProcess(string player_id, sbyte curmovestate) { GameProcessData res = _gs.GameProcessStateMachine(player_id, curmovestate); if (res.gamestatus == "results") { return(Json(new { gamestatus = res.gamestatus, gameresult = res.curmovestate == (sbyte)Moves_States.winner?"win":"def" })); } //_gamesrv.Sts.GameStateMachine(playername, ref curmovestate, _gamesrv, ref p2res, ref sendfield, ref shipsc); return(Json(new { player2status = res.player2status, gamestatus = res.gamestatus, movestate = res.curmovestate, movetime = res.movetime, field = res.PlayerField, shipcount = res.shipscount })); }
public override void CleanupSession() { PotentialGames = new List<GameInfo>(); Pennies = new ConcurrentStack<Penny>(); Balloons = new ConcurrentQueue<Balloon>(); Game = new GameInfo(); GameData = new GameProcessData(); PennyBankPublicKey = new PublicKey(); WaterSources = new List<GameProcessData>(); BalloonStores = new List<GameProcessData>(); UmbrellaSuppliers = new List<GameProcessData>(); OtherPlayers = new List<GameProcessData>(); Umbrella = null; UmbrellaRaised = false; }
//public string GetPlayer2name(string playername) //{ // Player player = _dm.Ps.GetPlayer(playername, true); // Room r = _dm.Rs.GetRoom(player.roomid); // return _dm.Rs.GetPlayer2(player, r).login; //} public GameProcessData GameProcessStateMachine(string player_id, sbyte curmovestate) { GameProcessData res = new GameProcessData(); res.curmovestate = curmovestate; res.movetime = -100; Player p1 = _dm.Ps.GetPlayer(convertId(player_id), true); Room r = _dm.Rs.GetRoom(p1.roomid); if (r != null) { r.updTime = DateTime.Now; } Player p2 = _dm.Rs.GetPlayer2(p1, r); Func <bool> endoftime = () => { int time = timer(r.beginMove); if (time == 0) { r.status = (sbyte)Game_States.endofgame; if ((p1.id == r.player1id && r.movepriority == (sbyte)Moves_States.player1) || (p1.id == r.player2id && r.movepriority == (sbyte)Moves_States.player2)) { p1.state = (sbyte)Player_States.loser; _logger.LogInformation("Room_Id: " + p1.roomid + " (Game over), player (Player_Id: " + p1.id + ") move time's up, player (Player_Id: " + p2.id + ") winner"); _logger.LogInformation("Player_Id: " + p1.id + ", Room_Id: " + p1.roomid + ",move time's up"); } res.movetime = time; return(true); } else { res.movetime = time; return(false); } }; Action playermove = () => { if ((p1.id == r.player1id && r.movepriority == (sbyte)Moves_States.player1) || (p1.id == r.player2id && r.movepriority == (sbyte)Moves_States.player2)) { if (res.curmovestate == 2) //переход хода { res.PlayerField = p1.field; res.shipscount = p1.shipcount; res.curmovestate = 1; res.movetime = startTimer(r); } // else sendfied = new sbyte[][]; } else { if (r.flUpdateField) { res.PlayerField = p1.field; res.shipscount = p1.shipcount; r.flUpdateField = false; } res.curmovestate = 2; } }; Func <string> endofgame = () => { if (p1.state == (sbyte)Player_States.playing) { switch (p2.state) { case (sbyte)Player_States.playing: { if (p1.shipcount.Sum(u => u) == 0) { p1.state = (sbyte)Player_States.loser; p2.state = (sbyte)Player_States.winner; _logger.LogInformation("Room_Id: " + p1.roomid + " (Game over), player (Player_Id: " + p1.id + ") loser, player (Player_Id: " + p2.id + ") winner"); } else { p1.state = (sbyte)Player_States.winner; p2.state = (sbyte)Player_States.loser; _logger.LogInformation("Room_Id: " + p1.roomid + " (Game over), player (Player_Id: " + p1.id + ") winner, player (Player_Id: " + p2.id + ") loser"); } break; } case (sbyte)Player_States.giveup: case (sbyte)Player_States.loser: p1.state = (sbyte)Player_States.winner; break; case (sbyte)Player_States.winner: p1.state = (sbyte)Player_States.loser; break; } } if (p1.state == (sbyte)Player_States.winner) { res.curmovestate = (sbyte)Moves_States.winner; } else { res.curmovestate = (sbyte)Moves_States.loser; } res.player2status = ""; // res.player2status = ""; // res.curmovestate = (sbyte)Moves_States.undefined; // resultsofgame(); return("results"); }; Func <string> playing = () => { if (endoftime()) { return(endofgame()); } if (getInterval(p2.date, Parameters.PlayerDisconnect, '>')) { res.player2status = "Игрок отключился ожидаем подключения"; r.status = (sbyte)Game_States.playerdisconnected; return(""); } if (p1.shipcount.Sum(u => u) == 0 || p2.shipcount.Sum(u => u) == 0 || p1.state == (sbyte)Player_States.giveup || p2.state == (sbyte)Player_States.giveup) { // r.status = (sbyte)Game_States.endofgame; r.status = (sbyte)Game_States.endofgame; return(endofgame()); } playermove(); res.player2status = ""; return(""); }; Func <string> playerdisconnect = () => { if (endoftime()) { return(endofgame()); } if (getInterval(p2.date, Parameters.PlayerDisconnect, '>')) { if (getInterval(p2.date, Parameters.WaitReconnect, '<')) { res.player2status = "Игрок отключился ожидаем подключения"; return(""); } else { r.status = (sbyte)Game_States.endofgame; _logger.LogInformation("Room_Id: " + p1.roomid + " (Game over), player (Player_Id: " + p2.id + ") disconnected, player (Player_Id: " + p1.id + ") winner"); if (p2.id == r.player1id) { r.player1id = null; } else { r.player2id = null; } _dm.Ps.InitPlayer(p2); p1.state = (sbyte)Player_States.winner; return(endofgame()); } } ; if (p2.state == (sbyte)Player_States.readytoplay) { p1.state = (sbyte)Player_States.playing; p2.state = (sbyte)Player_States.playing; } res.player2status = ""; r.status = (sbyte)Game_States.playing; return(""); }; Func <string> readytoplay = () => { res.movetime = startTimer(r); if (getInterval(p2.date, Parameters.PlayerDisconnect, '>')) { res.player2status = "Игрок отключился ожидаем подключения"; r.status = (sbyte)Game_States.playerdisconnected; return(""); } //if (p1.state == (sbyte)Player_States.readytoplay) // p1.state = (sbyte)Player_States.playing; // if (p1.state == (sbyte)Player_States.playing && p2.state == (sbyte)Player_States.playing) // return playing(); res.player2status = "Ожидаем игрока"; return(""); }; var gamestates = new Dictionary <sbyte, Func <string> >(4); gamestates.Add((sbyte)Game_States.readytoplay, readytoplay); gamestates.Add((sbyte)Game_States.playing, playing); gamestates.Add((sbyte)Game_States.endofgame, endofgame); gamestates.Add((sbyte)Game_States.playerdisconnected, playerdisconnect); // gamestates.Add((sbyte)Game_States.resultsofgame, resultsofgame); res.gamestatus = gamestates[(sbyte)r.status](); return(res); }