Ejemplo n.º 1
0
 private void onTurnChanged(TurnEventsArgs i_TurnEventArgs)
 {
     if (TurnChanged != null)
     {
         TurnChanged.Invoke(i_TurnEventArgs);
     }
 }
Ejemplo n.º 2
0
    public void OnTurnChanged(TurnChanged e)
    {
        EventHandler <TurnChanged> handler = TurnChangedEvent;

        if (handler != null)
        {
            handler(this, e);
        }
    }
Ejemplo n.º 3
0
        public void SetTurn(int index, string sessionId)
        {
            var session = _sessionsRepository.Find(sessionId);

            session.CurrentTurnIndex = index;
            _sessionsRepository.Update(session);

            TurnChanged?.Invoke(this, new SessionTurnChangedEventArgs(sessionId, session.CurrentTurnIndex));
        }
Ejemplo n.º 4
0
    public TurnChanged SetPlayerChoosing()
    {
        ClearStateVariables();

        var newChoosingState = new Choosing();
        var stateChanged     = Next(newChoosingState);
        var turnChanged      = new TurnChanged(stateChanged.FromStateName, stateChanged.ToStateName);

        return(turnChanged);
    }
Ejemplo n.º 5
0
    public TurnChanged SetPlayerInputBlocked()
    {
        ClearStateVariables();

        var newBlockedState = new Blocked();
        var stateChanged    = Next(newBlockedState);
        var turnChanged     = new TurnChanged(stateChanged.FromStateName, stateChanged.ToStateName);

        return(turnChanged);
    }
Ejemplo n.º 6
0
    public TurnChanged SetPlayerIdle()
    {
        ClearStateVariables();
        IsPlayerIdle = true;

        var newIdleState = new Idle();
        var stateChanged = Next(newIdleState);
        var turnChanged  = new TurnChanged(stateChanged.FromStateName, stateChanged.ToStateName);

        return(turnChanged);
    }
Ejemplo n.º 7
0
 private void Rotate(TurnChanged turnChanged)
 {
     if (Access.Data <PlunderData>(ID).GameType != GameType.HotSeat ||
         (turnChanged.Player == Player.One && IsOriginalPosition) ||
         (turnChanged.Player == Player.Two && !IsOriginalPosition))
     {
         return;
     }
     IsOriginalPosition = !IsOriginalPosition;
     GameResources.Queue.FlipBoard(ID);
 }
Ejemplo n.º 8
0
    public TurnChanged EndPlayerTurn()
    {
        if (!IsPlayerTurn())
        {
            throw new NotPlayerTurnException();
        }

        var stateChanged = Exit();
        var turnChanged  = new TurnChanged(stateChanged.FromStateName, stateChanged.ToStateName);

        return(turnChanged);
    }
Ejemplo n.º 9
0
        public void MakeTurn(Cell i_ChosenCell)
        {
            putDisk(CurrentPlayer, i_ChosenCell);

            changeTurn();
            TurnChanged?.Invoke();

            if (checkIfGameFinished())
            {
                Player winner = GetWinner();
                if (winner != null)
                {
                    winner.NumOfWins++;
                }

                isGameOver = true;
                GameFinished?.Invoke();
            }
            else
            {
                if (CurrentPlayer.TypeOfPlayer == Player.ePlayerType.Computer)
                {
                    var validMoves = MakeListOfOptionalMoves();
                    if (validMoves.Count > 0)
                    {
                        MakeTurn(validMoves[new Random().Next(0, validMoves.Count - 1)]);
                    }
                    else
                    {
                        changeTurn();
                        TurnChanged?.Invoke();
                    }
                }
                else
                {
                    if (!hasValidMoves())
                    {
                        changeTurn();
                        TurnChanged?.Invoke();
                    }
                }
            }
        }
Ejemplo n.º 10
0
        // Other methods

        /// <summary>
        /// Start the game
        /// </summary>
        public async void Start()
        {
            while (_isGameRunning)
            {
                if (CurrentTurn == Turn.PlayerX)
                {
                    await PlayerX.MoveAsync();

                    if (_board.IsWin(Board.ElementType.X))
                    {
                        GameOver("X wins!!!", _board.WinningIndexes);
                        break;
                    }

                    CurrentTurn = Turn.PlayerO;
                }
                else
                {
                    await PlayerO.MoveAsync();

                    if (_board.IsWin(Board.ElementType.O))
                    {
                        GameOver("O wins!!!", _board.WinningIndexes);
                        break;
                    }

                    CurrentTurn = Turn.PlayerX;
                }

                TurnChanged.Invoke();

                if (!_board.IsMovesLeft())
                {
                    GameOver("Tie");
                    break;
                }
            }
        }
Ejemplo n.º 11
0
    public void AdvanceTurn()
    {
        TurnChanged e = new TurnChanged();

        e.PriorActiveFaction = FactionList[TurnTaker];
        TurnTaker            = TurnTaker++;
        if (TurnTaker >= FactionCount)
        {
            TurnTaker = 0;
        }

        if (TurnTaker == 0)
        {
            TurnCount++;
            e.TurnCountIncrerased = true;
        }

        e.ActiveFaction    = FactionList[TurnTaker];
        e.CurrentTurnCount = TurnCount;
        OnTurnChanged(e);

        /* handle with ActorManagement or some such thing
         * List<Actor> ActorList = ActorsOnBoard.Keys.ToList();
         * for (int i = 0; i < ActorList.Count; i++)
         * {
         *  if (ActorsOnBoard[ActorList[i]].Item2 == TurnTaker)
         *  {
         *      ActorList[i].StartTurn();
         *  }
         *  else if (ActorsOnBoard[ActorList[i]].Item2 == TurnTaker.Previous())
         *  {
         *      ActorList[i].EndTurn();
         *  }
         * }
         */
    }
Ejemplo n.º 12
0
 public virtual void OnTurnChanged(EventArgs e)
 {
     //Note: syntactic sugar for checking if handler is null
     TurnChanged?.Invoke(this, e);
 }
Ejemplo n.º 13
0
        private void StartInternal(CancellationToken cancellationToken)
        {
            Field.GetCell(Team1.Agent1.Position).SetState(Teams.Team1, CellState.Occupied);
            Field.GetCell(Team1.Agent2.Position).SetState(Teams.Team1, CellState.Occupied);
            Field.GetCell(Team2.Agent1.Position).SetState(Teams.Team2, CellState.Occupied);
            Field.GetCell(Team2.Agent2.Position).SetState(Teams.Team2, CellState.Occupied);

            IsGaming = true;
            RaiseStarted(TeamHandler1, TeamHandler2);
            Started?.Invoke(this, new EventArgs());

            int  length   = Length;
            bool infinite = length <= 0;

            if (infinite)
            {
                length = 1;
                if (WriteConsole)
                {
                    Console.WriteLine("Game Started : Infinity Turns");
                }
            }
            else
            if (WriteConsole)
            {
                Console.WriteLine("Game Started : " + length + " Turns");
            }

            if (Abort(cancellationToken, TeamHandler1, TeamHandler2))
            {
                return;
            }

            for (Turn = 1; length >= Turn; Turn++)
            {
                //TeamHandler1, 2を排他ロックします
                HandlerSemaphore.Wait();

                if (Abort(cancellationToken, TeamHandler1, TeamHandler2))
                {
                    return;
                }

                if (WriteConsole)
                {
                    Console.WriteLine("Turn " + Turn);
                }

                TurnChanged?.Invoke(this, new EventArgs());
                var intents = MakeIntents(Turn, TeamHandler1, TeamHandler2);

                if (Abort(cancellationToken, TeamHandler1, TeamHandler2))
                {
                    return;
                }

                IntentResult[] results = new IntentResult[4];

                //インテントを受け取って判断(マップの状態が正しいと仮定しています)
                for (int i = 0; intents.Length > i; i++)
                {
                    var  intent = intents[i];
                    bool res    = intent.Intention == Intentions.Stay;
                    GetParamsForResult(i, out var team, out var current, out var agent);
                    var teamEnum    = team == Team1 ? Teams.Team1 : Teams.Team2;
                    var anotherEnum = (Teams.Team1 | Teams.Team2) & ~teamEnum;

                    if (Abort(cancellationToken, TeamHandler1, TeamHandler2))
                    {
                        return;
                    }

                    if (!res)
                    {
                        Point next = intent.GetNextPoint(current);

                        if (next.X < 0 || next.Y < 0 || next.X >= Field.Width || next.Y >= Field.Height)
                        {
                            throw new Exception($"Invalid intent requested : {next}({intent.Intention}, {intent.Direction})");
                        }

                        switch (intent.Intention)
                        {
                        case Intentions.Move:
                            current = next;
                            res     = true;
                            break;

                        //http://www.procon.gr.jp/wp-content/uploads//2016/12/e017e38ca89f7a0d04d6ad74319ffde0-1.pdf 10ページ目の試合の進行(3).ii.③を参照
                        case Intentions.Remove:
                            var cell  = Field.GetCell(next);
                            var state = cell.GetState(anotherEnum);

                            //敵チームのセル状態が占有かどうかを判定
                            if (state == CellState.Occupied)
                            {
                                current = next;
                                res     = true;
                            }
                            break;
                        }
                    }

                    IntentResult ir = new IntentResult()
                    {
                        Team         = team,
                        Agent        = agent,
                        Intent       = intent,
                        NextPosition = current,
                        Result       = res
                    };

                    results[i] = ir;
                }

                if (Abort(cancellationToken, TeamHandler1, TeamHandler2))
                {
                    return;
                }

                //自分が動けるかをまず確認
                foreach (var res in results)
                {
                    if (res.Intent.Intention == Intentions.Move)
                    {
                        res.Result = this.CanMove(res.Agent, res.Intent.Direction);
                    }
                    else if (res.Intent.Intention == Intentions.Remove)
                    {
                        res.Result = Field.IsInField(res.Agent, res.Intent.Direction);
                    }

                    if (!res.Result)
                    {
                        res.NextPosition = res.Agent.Position;
                    }
                }

                var list = results.Where(r => r.Result).ToList();
                foreach (var res1 in list)
                {
                    foreach (var res2 in list)
                    {
                        if (res1 != res2)
                        {
                            bool r1 = false, r2 = false;

                            if (res1.NextPosition == res2.NextPosition)
                            {
                                r1 = true;
                                r2 = true;
                            }

                            if (res2.NextPosition == res1.Agent.Position)
                            {
                                r2 = true;
                            }

                            if (r1)
                            {
                                res1.NextPosition = res1.Agent.Position;
                                res1.Result       = false;
                            }

                            if (r2)
                            {
                                res2.NextPosition = res2.Agent.Position;
                                res2.Result       = false;
                            }
                        }
                    }
                }

                //実際に移動
                foreach (var res in results)
                {
                    if (res.Intent.Intention == Intentions.Move)
                    {
                        res.Agent.Position = res.NextPosition;

                        var team  = res.Team == Team1 ? Teams.Team1 : Teams.Team2;
                        var cell  = Field.GetCell(res.NextPosition);
                        var state = cell.GetState(team);
                        cell.SetState(team, CellState.Occupied);
                    }
                }

                var remList  = results.Where(r => r.Intent.Intention == Intentions.Remove).ToList();
                var agentPos = GetAgentPositions(Team1.Agent1, Team1.Agent2, Team2.Agent1, Team2.Agent2);

                //削除ができるものを実際に削除
                foreach (var rem in remList.Where(r => r.Result))
                {
                    //除去動作は自チームも許可されるため修正
                    var cell = Field.GetCell(rem.NextPosition);
                    cell.State1 = CellState.None;
                    cell.State2 = CellState.None;
                }

                if (Abort(cancellationToken, TeamHandler1, TeamHandler2))
                {
                    return;
                }

                int intentIndex = 0;
                InvokeTeams(t => t.TeamHandler.IntentResult(results[intentIndex++].Result, results[intentIndex++].Result));
                Result?.Invoke(this, new IntentResultEventArgs(intents, results.Select(r => r.Result).ToArray()));

                if (infinite)
                {
                    length++;
                }

                HandlerSemaphore.Release();
            }

            IsGaming = false;
            RaiseFinished(TeamHandler1, TeamHandler2);
            if (WriteConsole)
            {
                Console.WriteLine("Game Finished");
            }

            Finished?.Invoke(this, new EventArgs());

            Length = 0;
            Turn   = 0;
        }
Ejemplo n.º 14
0
 public void TurnChange(object obj, TurnChanged e)
 {
     CooldownCurrent -= 1;
 }
Ejemplo n.º 15
0
 protected virtual void OnTurnChanged(EventArgs e)
 {
     TurnChanged?.Invoke(this, e);
 }
Ejemplo n.º 16
0
 protected void OnTurnChanged(ValueChangedEventArgs <Player> eventArgs) => TurnChanged?.Invoke(this, eventArgs);