private void onTurnChanged(TurnEventsArgs i_TurnEventArgs) { if (TurnChanged != null) { TurnChanged.Invoke(i_TurnEventArgs); } }
public void OnTurnChanged(TurnChanged e) { EventHandler <TurnChanged> handler = TurnChangedEvent; if (handler != null) { handler(this, e); } }
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)); }
public TurnChanged SetPlayerChoosing() { ClearStateVariables(); var newChoosingState = new Choosing(); var stateChanged = Next(newChoosingState); var turnChanged = new TurnChanged(stateChanged.FromStateName, stateChanged.ToStateName); return(turnChanged); }
public TurnChanged SetPlayerInputBlocked() { ClearStateVariables(); var newBlockedState = new Blocked(); var stateChanged = Next(newBlockedState); var turnChanged = new TurnChanged(stateChanged.FromStateName, stateChanged.ToStateName); return(turnChanged); }
public TurnChanged SetPlayerIdle() { ClearStateVariables(); IsPlayerIdle = true; var newIdleState = new Idle(); var stateChanged = Next(newIdleState); var turnChanged = new TurnChanged(stateChanged.FromStateName, stateChanged.ToStateName); return(turnChanged); }
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); }
public TurnChanged EndPlayerTurn() { if (!IsPlayerTurn()) { throw new NotPlayerTurnException(); } var stateChanged = Exit(); var turnChanged = new TurnChanged(stateChanged.FromStateName, stateChanged.ToStateName); return(turnChanged); }
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(); } } } }
// 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; } } }
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(); * } * } */ }
public virtual void OnTurnChanged(EventArgs e) { //Note: syntactic sugar for checking if handler is null TurnChanged?.Invoke(this, e); }
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; }
public void TurnChange(object obj, TurnChanged e) { CooldownCurrent -= 1; }
protected virtual void OnTurnChanged(EventArgs e) { TurnChanged?.Invoke(this, e); }
protected void OnTurnChanged(ValueChangedEventArgs <Player> eventArgs) => TurnChanged?.Invoke(this, eventArgs);