void GenericAction() { Func <MoveSequence, int> getMovableCount = (seq) => { int count = 0; for (int i = 0; i < seq.SequenceCount; ++i) { var single = seq[i]; count += single.Count; } return(count); }; SwitchActionTeam(); buildedData.Rebuild(board); var currentTeams = from Pieces p in board.GetPieces() where p.Team == actionTeam select p; int movableCount = 0; foreach (var p in board.GetPieces()) { if (p?.Team == actionTeam) { var seq = p.QueryMovable(MoveType.StandardMove); seq.Build(board, MoveType.StandardMove); movableCount += getMovableCount(seq); seq = p.QueryMovable(MoveType.Attack); seq.Build(board, MoveType.Attack); movableCount += getMovableCount(seq); if (p is Pawn k) { seq = k.QueryEnpassant(board); movableCount += getMovableCount(seq); } } } if (movableCount == 0) { if (buildedData.IsChecked(actionTeam)) { GameoverEvent?.Invoke(this, GameoverType.Checkmate); } else { GameoverEvent?.Invoke(this, GameoverType.Stalemate); } } }
void HandleGameover(object sender, EventArgs args) { GameoverEvent e = args as GameoverEvent; string text = ""; if (e.playerDefeated && e.aiDefeated) { Application.LoadLevel("Defeat"); } else if (e.aiDefeated) { Application.LoadLevel("Win"); } else if (e.playerDefeated) { Application.LoadLevel("Defeat"); } /* * bCombatMenu.DisplayGameover(text, !e.playerDefeated); * EventProxyManager.FireEvent(this, new EventDoneEvent());*/ }