//7.6 #region 自定义的递归函数Expand(MineGrid mineGrid),是扫雷游戏的核心算法 private void Expand(MineGrid mineGrid) { int row = mineGrid.Row; int col = mineGrid.Col; int minRow = row == 0 ? 0 : row - 1; int maxRow = row == RowsNum - 1 ? row : row + 1; int minCol = col == 0 ? 0 : col - 1; int maxCol = col == ColsNum - 1 ? col : col + 1; int aroundNums = GetAroundNums(mineGrid); mineGrid.State = 15 - aroundNums; mineGrid.OldState = 15 - aroundNums; if (aroundNums == 0) { for (int i = minRow; i <= maxRow; i++) { for (int j = minCol; j <= maxCol; j++) { if (!(i == row && j == col) && mineGrids[i, j].State == (int)MineGridState.Normal && (!mineGrids[i, j].IsMine)) { Expand(mineGrids[i, j]); } } } } }
public void InvestigateElement() { touches.Vibrate(); if (this.bIsMine) { // Show all mines MineGrid.uncoverMines(); // Game Over ms.bHasLost = true; } else { // Show adjacent mine number int x = (int)transform.position.x; int y = (int)transform.position.y; LoadTexture(MineGrid.adjacentMines(x, y)); // Uncover area w/out mines MineGrid.FFuncover(x, y, new bool[MineGrid.w, MineGrid.h]); // Find out if the game was won if (MineGrid.bIsFinished()) { ms.bHasWon = true; } } touches.bAaction = false; }
public void MineGrid_ConstructorWorks() { MineGrid grid = new MineGrid(20, 14, 30); // Parameters of grid are correct. Assert.IsTrue(grid.Width == 20); Assert.IsTrue(grid.Height == 14); Assert.IsTrue(grid.NumberOfMines == 30); // Throws exception if too many mines Assert.ThrowsException <InvalidOperationException>(() => new MineGrid(20, 14, 113)); }
public GameForm(int gridWidth, int gridHeight, int gridMines) { // Set fields from constructor parameters. GridWidth = gridWidth; GridHeight = gridHeight; GridMines = gridMines; // Initialise MineGrid. MineGrid = new MineGrid(GridWidth, GridHeight, GridMines); InitializeComponent(); }
void OnMouseOver() { if (MineGrid.gameOver == false) { if (Input.GetMouseButtonDown(0)) { if (!isFlagged) { if (isMined) { MineGrid.UncoverMines(); mineGrid.LoseGame(); //losecardref.SetActive(true); } else { isClicked = true; int x = (int)transform.position.x; int y = (int)transform.position.y; LoadTexture(MineGrid.AdjacentMines(x, y)); MineGrid.FFuncover(x, y, new bool[MineGrid.dimension.x, MineGrid.dimension.y]); MineGrid.FloodedtoClicked(); if (MineGrid.IsFinished()) { mineGrid.FinishGame(); } } } } if (Input.GetMouseButtonDown(1)) { if (!isClicked) { if (!isFlagged) { FlagTile(); if (MineGrid.IsFinished()) { mineGrid.FinishGame(); } } else { UnFlagTile(); } } } } }
//7.3 #region InitGame() private void InitGame() { SpendSeconds = 0; gameState = (int)GameState.Wait; FaceIndex = (int)FaceStyle.Normal; MinesNum = RowsColsNums[Difficulty * 3 + 2]; for (int i = 0; i < RowsNum; i++) { for (int j = 0; j < ColsNum; j++) { mineGrids[i, j] = new MineGrid(); mineGrids[i, j].Row = i; mineGrids[i, j].Col = j; mineGrids[i, j].State = (int)(MineGridState.Normal); mineGrids[i, j].OldState = (int)(MineGridState.Normal); mineGrids[i, j].IsMine = false; } } }
//7.6 #region 自定义函数GetAroundNums(MineGrid mineGrid) private int GetAroundNums(MineGrid mineGrid) { int row = mineGrid.Row; int col = mineGrid.Col; int aroundNums = 0; int minRow = row == 0 ? 0 : row - 1; int maxRow = row == RowsNum - 1 ? row : row + 1; int minCol = col == 0 ? 0 : col - 1; int maxCol = col == ColsNum - 1 ? col : col + 1; for (int i = minRow; i <= maxRow; i++) { for (int j = minCol; j <= maxCol; j++) { if (!(i == row && j == col) && mineGrids[i, j].IsMine) { aroundNums++; } } } return(aroundNums); }