private void getSignedOutGame()
    {
        List <SqlParameter> spParams = new List <SqlParameter>();

        spParams.Add(new SqlParameter("@gameName", searchText.Value));
        spParams.Add(new SqlParameter("@stdName", searchText.Value));
        DataSet ds = new DataSet();

        ds = DBHelper.ExecuteBySPName("GameReturnSearch", spParams.ToArray());
        GameReturn.DataSource = ds.Tables[0];
        GameReturn.DataBind();
    }
 public static GameReturn GetReturnMessage(BattleGladiator gladiator, int turnCount)
 {
     var result = new GameReturn()
     {
         MailType = "gamereturn",
         GOneHealth = gladiator.Health.ToString(),
         GTwoHealth = gladiator.Health.ToString(),
         //Turn = "gladiatorOne",
         TurnCount = turnCount.ToString(),
         Winner = "None",
         Buffs = new List<string>()
     };
     
     foreach (Buff buff in gladiator.Buffs)
     {
         result.Buffs.Add(buff.Name.ToLower());
     }
     return result;
 }
Exemple #3
0
        public static ActorMeth GameManager(PID pid)
        {
            BattleGladiator gladiatorOne = new BattleGladiator();

            gladiatorOne.Name = "gladiatorOne";
            BattleGladiator gladiatorTwo = new BattleGladiator();

            gladiatorTwo.Name = "gladiatorTwo";

            int turnCount = 0;
            PID parent    = pid;
            PID playerOne = new PID();
            PID playerTwo = new PID();

            bool isFinished = false;


            ActorMeth behaviour = (rt, self, _, msg) =>
            {
                GameReturn pOneMsg = new GameReturn();
                GameReturn pTwoMsg = new GameReturn();


                switch (msg.mtype)
                {
                case Symbol.Init:
                    playerOne = msg.content[0];
                    playerTwo = msg.content[1];

                    var startOneMsg = GameManagerService.GetStartMessage(gladiatorOne, gladiatorTwo, playerOne);
                    GameManagerService.SendStartMessage(rt.GetWebSocket(playerOne), startOneMsg);

                    var startTwoMsg = GameManagerService.GetStartMessage(gladiatorTwo, gladiatorOne, playerOne);
                    GameManagerService.SendStartMessage(rt.GetWebSocket(playerTwo), startTwoMsg);
                    break;

                case Symbol.GameAction:
                    GameAction gAction = msg.content;
                    var        skills  = new SkillRepository();

                    if ((turnCount & 1) == 0)    // gladiator a
                    {
                        if (new PID(long.Parse(gAction.PId)).ToString() == playerOne.ToString())
                        {
                            skills.UseSkill(gAction.Action, gladiatorOne, gladiatorTwo);
                            //deactive then remove buff if the turns == zero
                            if (gladiatorOne.Buffs.Count > 0)
                            {
                                foreach (Buff buff in gladiatorOne.Buffs)
                                {
                                    buff.Turns--;
                                    if (buff.Turns <= 0)
                                    {
                                        buff.DeActivate(gladiatorOne);
                                    }
                                }
                                gladiatorOne.Buffs.RemoveAll(x => x.Turns <= 0);
                            }
                        }
                        else
                        {
                            //send back msg to sync?
                        }
                    }
                    else if ((turnCount & 1) != 0)     // gladiator b
                    {
                        if (new PID(long.Parse(gAction.PId)).ToString() == playerTwo.ToString())
                        {
                            skills.UseSkill(gAction.Action, gladiatorTwo, gladiatorOne);
                            if (gladiatorTwo.Buffs.Count > 0)
                            {
                                foreach (Buff buff in gladiatorTwo.Buffs)
                                {
                                    buff.Turns--;
                                    if (buff.Turns <= 0)
                                    {
                                        buff.DeActivate(gladiatorTwo);
                                    }
                                }
                                gladiatorTwo.Buffs.RemoveAll(x => x.Turns <= 0);
                            }
                        }
                        else
                        {
                            //send back msg to sync?
                        }
                    }
                    turnCount++;
                    //send synced userdata back to user
                    pOneMsg = GameManagerService.GetReturnMessage(gladiatorOne, turnCount);
                    pTwoMsg = GameManagerService.GetReturnMessage(gladiatorTwo, turnCount);
                    if ((turnCount & 1) == 0)
                    {
                        pOneMsg.Turn       = playerOne.ToString();
                        pTwoMsg.Turn       = playerOne.ToString();
                        pOneMsg.GOneHealth = gladiatorOne.Health.ToString();
                        pTwoMsg.GOneHealth = gladiatorTwo.Health.ToString();
                        pOneMsg.GTwoHealth = gladiatorTwo.Health.ToString();
                        pTwoMsg.GTwoHealth = gladiatorOne.Health.ToString();
                    }
                    else if ((turnCount & 1) != 0)
                    {
                        pOneMsg.Turn       = playerTwo.ToString();
                        pTwoMsg.Turn       = playerTwo.ToString();
                        pOneMsg.GOneHealth = gladiatorOne.Health.ToString();
                        pTwoMsg.GOneHealth = gladiatorTwo.Health.ToString();
                        pOneMsg.GTwoHealth = gladiatorTwo.Health.ToString();
                        pTwoMsg.GTwoHealth = gladiatorOne.Health.ToString();
                    }
                    if (!isFinished)
                    {
                        if (gladiatorOne.Health <= 0)
                        {
                            pOneMsg.Winner = gladiatorTwo.Name;
                            pTwoMsg.Winner = gladiatorTwo.Name;
                            isFinished     = true;
                        }
                        if (gladiatorTwo.Health <= 0)
                        {
                            pOneMsg.Winner = gladiatorOne.Name;
                            pTwoMsg.Winner = gladiatorOne.Name;
                            isFinished     = true;
                        }
                    }

                    GameManagerService.SendReturnMessage(rt.GetWebSocket(playerOne), pOneMsg);
                    GameManagerService.SendReturnMessage(rt.GetWebSocket(playerTwo), pTwoMsg);

                    if (isFinished)
                    {
                        PID[] players = new PID[] { playerOne, playerTwo };
                        rt.Send(parent, new Mail(Symbol.Killed, players));
                        rt.Die();
                    }
                    break;

                default:
                    break;
                }

                return(null);
            };

            return(behaviour);
        }
        private GameReturn GameLoop(string gameName, bool displayBoard, NeuralNetwork a, NeuralNetwork b, Client cA, Client cB)
        {
            var checkCountA = 0;
            var moveCountA  = 0;
            var totalTimeA  = new Stopwatch();

            var checkCountB = 0;
            var moveCountB  = 0;
            var totalTimeB  = new Stopwatch();

            var gameEnded = false;

            var skipA = false;

            while (!gameEnded)
            {
                if (!skipA)
                {
                    do
                    {
                    } while (!Board.PlayerOneTurn);
                    totalTimeA.Start();
                    Console.Title = Board.FiftyMoveRule.ToString();
                    if (Board.FiftyMoveRule >= 50)
                    {
                        break;
                    }
                    var moveA    = a.Output;
                    var messageA = cA.SendMessage(Packet.Packets.Game, "MOVE", gameName, moveA.Item1.ToString(),
                                                  moveA.Item2.ToString(), true.ToString());

                    if (messageA.Item1.Code == Packet.Packets.Error)
                    {
                        Console.WriteLine("[X:" + ((moveA.Item1 % 8) + 1) + " Y:" + (8 - (moveA.Item1 / 8)) + "](" +
                                          moveA.Item1 + ") -> " +
                                          "[X:" + ((moveA.Item2 % 8) + 1) + " Y:" + (8 - (moveA.Item2 / 8)) + "](" +
                                          moveA.Item2 + ") AI1");
                        gameEnded = !RefreshBoard(cA, gameName);
                        if (displayBoard)
                        {
                            DrawBoard();
                        }
                        continue;
                    }
                    _lastPlayerOneMove = moveA;
                    totalTimeA.Stop();
                    //Thread.Sleep(1000);
                    gameEnded = !RefreshBoard(cA, gameName);

                    if (Board.CheckCheck(Board.WhiteColour))
                    {
                        checkCountA++;
                    }
                    moveCountA++;
                    if (displayBoard)
                    {
                        DrawBoard();
                    }
                }
                skipA = false;

                if (Board.CheckCheckMate(Board.WhiteColour) || Board.CheckCheckMate(Board.BlackColour))
                {
                    break;
                }
                if (gameEnded)
                {
                    break;
                }

                do
                {
                } while (Board.PlayerOneTurn);

                totalTimeB.Start();
                Console.Title = Board.FiftyMoveRule.ToString();
                if (Board.FiftyMoveRule >= 50)
                {
                    break;
                }
                var moveB    = b.Output;
                var messageB = cB.SendMessage(Packet.Packets.Game, "MOVE", gameName, moveB.Item1.ToString(), moveB.Item2.ToString(), false.ToString());

                if (messageB.Item1.Code == Packet.Packets.Error)
                {
                    Console.WriteLine("[X:" + ((moveB.Item1 % 8) + 1) + " Y:" + (8 - (moveB.Item1 / 8)) + "](" + moveB.Item1 + ") -> " +
                                      "[X:" + ((moveB.Item2 % 8) + 1) + " Y:" + (8 - (moveB.Item2 / 8)) + "](" + moveB.Item2 + ") AI2");
                    gameEnded = !RefreshBoard(cA, gameName);
                    skipA     = true;
                    if (displayBoard)
                    {
                        DrawBoard();
                    }
                    continue;
                }
                _lastPlayerTwoMove = moveB;
                totalTimeB.Stop();

                //Thread.Sleep(1000);
                gameEnded = !RefreshBoard(cB, gameName);

                if (Board.CheckCheck(Board.BlackColour))
                {
                    checkCountB++;
                }
                moveCountB++;
                if (displayBoard)
                {
                    DrawBoard();
                }
            }

            totalTimeA.Stop();
            totalTimeB.Stop();

            if (Board.PlayerOneTurn)
            {
                MovePiece(_lastPlayerOneMove.Item1, _lastPlayerOneMove.Item2);
            }
            else
            {
                MovePiece(_lastPlayerTwoMove.Item1, _lastPlayerTwoMove.Item2);
            }

            var returnInfo = new GameReturn {
                WhiteCheckMate = Board.CheckCheckMate(Board.BlackColour),
                BlackCheckMate = Board.CheckCheckMate(Board.WhiteColour),
                AmountCheckW   = checkCountA,
                AmountCheckB   = checkCountB,
                MoveCountW     = moveCountA,
                MoveCountB     = moveCountB,
                TotalTimeW     = totalTimeA.ElapsedMilliseconds,
                TotalTimeB     = totalTimeB.ElapsedMilliseconds,
                Draw           = (Board.FiftyMoveRule >= 50)
            };

            return(returnInfo);
        }
 public static void SendReturnMessage(WebSocket socket, GameReturn msg)
 {
     string json = JsonSerializer.Serialize(msg);
     WebSocketClient.SendMessage(socket, json);
 }