Exemple #1
0
        //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]);
                        }
                    }
                }
            }
        }
Exemple #2
0
    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));
        }
Exemple #4
0
        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();
                 }
             }
         }
     }
 }
Exemple #6
0
 //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;
         }
     }
 }
Exemple #7
0
        //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);
        }