private void ApplyMove(Board board, Colour colour, MoveViewer move) { board.MakeMove(move.Value); Ply++; if (move.PieceType == PieceType.Pawn || move.CapturePieceType != PieceType.None) { HalfMoveClock = 0; } else { ++HalfMoveClock; } var gameState = GetGameState(); var currentState = board.CurrentState; var historyItem = new GameHistoryNode(currentState, gameState); history.Push(historyItem); if (historyItem.IsIrreversible) { drawBuffer.Clear(); } else { drawBuffer.Add(historyItem); } var isDrawn = IsDrawn(HalfMoveClock, drawBuffer); if (isDrawn) { Draw?.Invoke(this, new MoveAppliedEventArgs(move, gameState, Evaluate())); return; } var moves = new List <uint>(); moveGenerator.Generate(board, colour.Opposite(), moves); AvailableMoves = moves.Select(x => new MoveViewer(x)); if (!AvailableMoves.Any()) { Checkmate?.Invoke(this, new MoveAppliedEventArgs(move, gameState, Evaluate())); return; } MoveApplied?.Invoke(this, new MoveAppliedEventArgs(move, gameState, Evaluate())); }
/// <summary> /// reset /// </summary> public void ResetGame() { gameOver = false; chessMove = true; if (hasLoad) { return; } if (hasLoad) { return; } chessBoard = new int[10, 9] { { 2, 3, 6, 5, 1, 5, 6, 3, 2 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 4, 0, 0, 0, 0, 0, 4, 0 }, { 7, 0, 7, 0, 7, 0, 7, 0, 7 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 14, 0, 14, 0, 14, 0, 14, 0, 14 }, { 0, 11, 0, 0, 0, 0, 0, 11, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 9, 10, 13, 12, 8, 12, 13, 10, 9 } }; boardGrid = new GameObject[10, 9]; if (chessPeople == 1 || chessPeople == 2) { boardGo = boardGos[0]; } else { boardGo = boardGos[1]; } InitGrid(); InitChess(); rules = new Rules(); movingOfChess = new MovingOfChess(this); checkmate = new Checkmate(); chessReseting = new ChessReseting(); chessReseting.resetCount = 0; chessReseting.chessSteps = new ChessReseting.Chess[400]; canMoveUIStack = new Stack <GameObject>(); for (int i = 0; i < 40; i++) { canMoveUIStack.Push(Instantiate(canMovePosUIGo)); } currentCanMoveUIStack = new Stack <GameObject>(); searchEngine = new SearchEngine(); hasLoad = true; }
/// <summary> /// 重置游戏 /// </summary> public void ResetGame() { chessMove = true; chessBoard = new int[10, 9] { { 2, 3, 6, 5, 1, 5, 6, 3, 2 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 4, 0, 0, 0, 0, 0, 4, 0 }, { 7, 0, 7, 0, 7, 0, 7, 0, 7 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 14, 0, 14, 0, 14, 0, 14, 0, 14 }, { 0, 11, 0, 0, 0, 0, 0, 11, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 9, 10, 13, 12, 8, 12, 13, 10, 9 } }; boardGrid = new GameObject[10, 9]; if (chessPeople == 1 || chessPeople == 2) { boardGo = boardGos[0]; } else { boardGo = boardGos[1]; } InitGrid(); InitChess(); rules = new Rules(); movingOfChess = new MovingOfChess(this); chessRegreting = new ChessRegreting { regretCount = 0, chessSteps = new ChessRegreting.Chess[400] }; checkmate = new Checkmate(); canMoveUIStack = new Stack <GameObject>(); for (int i = 0; i < Constants.canMoveUIStackLength; i++) { canMoveUIStack.Push(Instantiate(canMovePosUIGo)); } currentCanMoveUIStack = new Stack <GameObject>(); }
public void startGame(int scene) { if (GenerateGame.instance.whiteKing != true && GenerateGame.instance.blackKing != true) { return; } int boardSize = GenerateGame.instance.boardSize; int promoRows = int.Parse(GameObject.Find("PromoRows").GetComponentInChildren <Text>().text); List <Piece> white = new List <Piece>(); List <Piece> black = new List <Piece>(); foreach (List <GeneratedTile> item in GenerateGame.instance.board) { foreach (GeneratedTile i in item) { if (i.occupied) { if (i.isWhite) { white.Add(i.occupiedBy); } else { black.Add(i.occupiedBy); } } } } int s = GameObject.Find("Rules").GetComponent <Dropdown>().value; Rules rules; switch (s) { case 0: rules = new Checkmate(); break; case 1: rules = new Capture(); break; case 2: rules = new Elimination(); break; default: rules = new Checkmate(); break; } GameObject setupObject = new GameObject(); setupObject.name = "SetupObject"; setupObject.AddComponent <GameInfoHolder>(); setupObject.GetComponent <GameInfoHolder>().black = black; setupObject.GetComponent <GameInfoHolder>().white = white; setupObject.GetComponent <GameInfoHolder>().boardSize = boardSize; setupObject.GetComponent <GameInfoHolder>().promoRows = promoRows; setupObject.GetComponent <GameInfoHolder>().useCaptured = GameObject.Find("Captured").GetComponentInChildren <Toggle>().isOn; setupObject.GetComponent <GameInfoHolder>().rules = rules; if (GameObject.Find("Player")) { setupObject.GetComponent <GameInfoHolder>().player = GameObject.Find("Player").GetComponent <Dropdown>().value; } if (GameObject.Find("AI")) { setupObject.GetComponent <GameInfoHolder>().ai = GameObject.Find("AI").GetComponent <Dropdown>().value; } DontDestroyOnLoad(GameObject.Find("SetupObject")); SceneManager.LoadScene(scene); }