Exemple #1
0
        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 }));
        }
Exemple #3
0
 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;
 }
Exemple #4
0
        //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);
        }