Beispiel #1
0
        public PaifuTileImage(int Index, float Scale, bool Red)
        {
            Tile = new Mahjong.Tile(Index);
            Tile.AkaNashi = !Red;

            string TileName;

            switch(Index)
            {
                case -1: // closed tile
                    TileName = "0z";
                    break;
                case -2: // tsumogiri
                    TileName = "tsumogiri";
                    break;
                default:
                    TileName = Tile.TileName;
                    break;
            }

            string FileName = String.Format(".//{0:s}//{1:s}.gif", TilesDirectory, TileName);

            // Add png option
            if (!File.Exists(FileName)) FileName = String.Format(".//{0:s}//{1:s}.png", TilesDirectory, TileName);
            if (!File.Exists(FileName))
            {
                FileName = String.Format(".//tiles//{1:s}.gif", TilesDirectory, TileName);
                if (!File.Exists(FileName)) FileName = String.Format(".//tiles//{0:s}.png", TileName);
            }

            Bitmap B = new Bitmap(FileName);
            Original = B;// new Bitmap(B);
            Bmp = new Bitmap(Original);
        }
Beispiel #2
0
        private bool CheckFormInHand(Mahjong.Hand H)
        {
            int[] Tehai = new int[38];

            for (int i = 0; i < Tehai.Length; i++) Tehai[i] = 0;

            // Create tehai
            for (int i = 0; i < H.Tiles.Length; i++)
            {
                if (H.Tiles[i] == -1) continue;

                Mahjong.Tile T = new Mahjong.Tile(H.Tiles[i]);

                Tehai[T.TileId]++;
            }

            // Check form in specified suits
            for (int i = 0; i < 3; i++)
            {
                bool Mark = true;

                if (Form[11 + i] != 0)
                {
                    for (int j = 1; j < 10; j++)
                    {
                        if (Form[j] == -1) continue;

                        if (Form[j] != Tehai[i * 10 + j])
                        {
                            Mark = false;
                            break;
                        }
                    }

                    if (Mark) return true;
                }
            }

            return false;
        }
Beispiel #3
0
        private void CheckTiles(Result R)
        {
            if (DrownTiles == null) return;

            for (int i = 0; i < R.Replay.Rounds.Count; i++)
            {
                Mahjong.Round Rnd = R.Replay.Rounds[i];

                for (int j = 0; j < R.Replay.PlayerCount; j++)
                {
                    // build drown tiles map
                    int[] RealDrownTiles = new int[DrownTiles.Length];
                    for (int k = 0; k < RealDrownTiles.Length; k++) RealDrownTiles[i] = 0;

                    for (int k = 0; k < Rnd.Steps.Count; k++)
                    {
                        Mahjong.Step S = Rnd.Steps[k];
                        if (S.Player != j) continue;

                        if ((S.Type == Mahjong.StepType.STEP_DRAWTILE) || (S.Type == Mahjong.StepType.STEP_DRAWDEADTILE))
                        {
                            Mahjong.Tile T = new Mahjong.Tile(S.Tile);

                            RealDrownTiles[T.TileId]++;
                        }
                    }

                    // compare drown tiles with mask
                    for (int k = 0; k < RealDrownTiles.Length; k++)
                    {
                        if (RealDrownTiles[k] < DrownTiles[k])
                        {
                            R.HandMark[i][j] = false;
                            break;
                        }
                    }
                }
            }
        }
Beispiel #4
0
        private int GetDeadWaitCount(Mahjong.Round Rnd, int KanCount, int[] Waiting)
        {
            int Count = 0;
            for (int i = KanCount; i < 14 + KanCount; i++)
            {
                Mahjong.Tile T = new Mahjong.Tile(Rnd.Wall.Tiles[i]);

                if (Waiting.Contains(T.TileId)) Count++;
            }

            return Count;
        }