コード例 #1
0
        private void Scramble(MahjongBoard board)
        {
            List <MahjongPair> reversed = new List <MahjongPair>();

            while (board.Tiles.Count > 0)
            {
                List <MahjongTile> removable = new List <MahjongTile>();
                removable.AddRange(ExtractRemovableTiles(board));
                while (removable.Count > 1)
                {
                    reversed.Add(MahjongPair.GetPair(removable));
                }
                foreach (MahjongTile tile in removable)
                {
                    board.Add(tile);
                }
            }
            for (int i = reversed.Count - 1; i >= 0; i--)
            {
                int typeIndex = random.Next() % types.Count;
                reversed[i].TileOne.Type = board.types[typeIndex];
                reversed[i].TileTwo.Type = board.types[typeIndex];
                board.Add(reversed[i].TileOne);
                board.Add(reversed[i].TileTwo);
            }
        }
コード例 #2
0
 private void Structure(MahjongBoard board)
 {
     for (int index = 0; index < Indexes; index++)
     {
         for (int column = 0; column < Columns; column++)
         {
             for (int row = 0; row < Rows; row++)
             {
                 MahjongTile tile = AddTile(null, column, row, index);
                 if (tile != null)
                 {
                     board.Tiles.Add(tile);
                 }
             }
         }
     }
 }
コード例 #3
0
        private List <MahjongTile> ExtractRemovableTiles(MahjongBoard board)
        {
            List <MahjongTile> removable = new List <MahjongTile>();

            MahjongTile[] tiles = new MahjongTile[board.Tiles.Count];
            board.Tiles.CopyTo(tiles, 0);
            foreach (MahjongTile tile in tiles)
            {
                if (board.CanMove(tile))
                {
                    removable.Add(tile);
                }
            }
            foreach (MahjongTile tile in removable)
            {
                board.Remove(tile);
            }
            return(removable);
        }
コード例 #4
0
 private void Generate(MahjongBoard board)
 {
     board.Tiles = new ObservableCollection <MahjongTile>();
     Structure(board);
     Scramble(board);
 }