Exemple #1
0
        public LogParser(string FileName)
        {
            this.FileName = FileName;

            if (!File.Exists(FileName)) return;

            string[] lines = System.IO.File.ReadAllLines(FileName);

            for (int i = 0; i < lines.Length; i++) 
            {
                string line = lines[i];
                const string url = "http://tenhou.net/0/?log=";
                int Pos = line.IndexOf(url);
                int PosEndTW = line.IndexOf("&tw=");
                int PosEndTS = line.IndexOf("&ts=");
                int PosEnd = PosEndTW;

                Console.Title = String.Format("Parsing log {0:d}/{1:d}", i + 1, lines.Length);

                if ((PosEndTW != -1) && (PosEndTS != -1)) PosEnd = (PosEndTW > PosEndTS) ? PosEndTS : PosEndTW;

                if (PosEnd == -1) PosEnd = line.IndexOf("\">");

                if (Pos >= 0)
                {
                    Pos += url.Length;

                    string Hash = line.Substring(Pos, PosEnd - Pos);
                    TenhouHash H = new TenhouHash(Hash);

                    if(!HashList.Hashes.Contains(H.DecodedHash))
                        HashList.Hashes.Add(H.DecodedHash);
                }
            }
        }
Exemple #2
0
        static void CreatePaifu(string Hash, List<Argument> ArgList, List<Search.Result> Results)
        {
            string Dir = "paifu";
            string FN = null;
            int Round = -1;
            int ShowShanten = 0;
            int ShowYaku = 1;
            int ShowNames = 1;
            int ShowDanger = 1;
            int ShowColor = 1;
            int ShowSex = 0;

            if (Hash.CompareTo("") == 0)
            {
                Console.WriteLine("Error: Hash not defined.");
                return;
            }

            Hash = new Tenhou.TenhouHash(Hash).DecodedHash;

            // Parse options
            foreach (Argument A in ArgList)
            {
                switch (A.Name)
                {
                    case "tileset":
                        Paifu.PaifuTileImage.TilesDirectory = A.Value;
                        break;
                    case "dir":
                        Dir = A.Value;
                        break;
                    case "round":
                        Round = Convert.ToInt32(A.Value);
                        break;
                    case "filename":
                        FN = A.Value;
                        break;
                    case "shanten":
                        ShowShanten = ParseBoolArg(A.Value, "shanten");
                        break;
                    case "yaku":
                        ShowYaku = ParseBoolArg(A.Value, "yaku");
                        break;
                    case "nickname":
                        ShowNames = ParseBoolArg(A.Value, "nickname");
                        break;
                    case "danger":
                        ShowDanger = ParseBoolArg(A.Value, "danger");
                        break;
                    case "color":
                        ShowColor = ParseBoolArg(A.Value, "color");
                        break;
                    case "sex":
                        ShowSex = ParseBoolArg(A.Value, "sex");
                        break;
                }
            }

            Mahjong.Replay R = new Mahjong.Replay();
            R.LoadXml(Hash);

            for (int i = 0; i < R.Rounds.Count; i++)
            {
                if ((Round != -1) && (Round != i)) continue;

                Paifu.PaifuGenerator P = new Paifu.PaifuGenerator(R, i);

                string FileName;

                if (FN == null)
                {
                    if (!Directory.Exists(Dir)) Directory.CreateDirectory(Dir);
                    FileName = String.Format("./{0:s}/{1:s}_{2:d}.png", Dir, Hash, i);
                }
                else
                {
                    FileName = (Round == -1) ? String.Format("{0:s}_{1:d}.png", FN, i) : String.Format("{0:s}.png", FN);
                }

                P.ShowShanten = ShowShanten;
                P.ShowDanger = ShowDanger;
                P.ShowYakuInfo = ShowYaku;
                P.ShowNames = ShowNames;
                P.ShowColor = ShowColor;
                P.ShowSex = ShowSex;

                P.Generate();
                P.Save(FileName);
            }
        }
Exemple #3
0
        static void CreateDiscard(string Hash, List<Argument> ArgList, List<Search.Result> Results)
        {
            int Round = -1;
            int Player = -1;
            bool RiichiLimit = false;
            bool NakiHL = false;
            bool TsumogiriHL = false;
            bool ShowHand = false;

            string FN = null;
            string Dir = "discard";

            if (Hash.CompareTo("") == 0)
            {
                Console.WriteLine("Error: Hash not defined.");
                return;
            }

            Hash = new Tenhou.TenhouHash(Hash).DecodedHash;

            // Parse options
            foreach (Argument A in ArgList)
            {
                switch (A.Name)
                {
                    case "tileset":
                        Paifu.PaifuTileImage.TilesDirectory = A.Value;
                        break;
                    case "dir":
                        Dir = A.Value;
                        break;
                    case "round":
                        Round = Convert.ToInt32(A.Value);
                        break;
                    case "player":
                        Player = Convert.ToInt32(A.Value);
                        break;
                    case "filename":
                        FN = A.Value;
                        break;
                    case "riichi":
                        RiichiLimit = true;
                        break;
                    case "naki":
                        NakiHL = true;
                        break;
                    case "tsumogiri":
                        TsumogiriHL = true;
                        break;
                    case "hand":
                        ShowHand = true;
                        break;
                    default:
                        break;
                }
            }

            Mahjong.Replay R = new Mahjong.Replay();
            R.LoadXml(Hash);

            for (int i = 0; i < R.Rounds.Count; i++)
            {
                if ((Round != -1) && (Round != i)) continue;

                for (int p = 0; p < R.PlayerCount; p++)
                {
                    if ((Player != -1) && (Player != p)) continue;

                    Discarder.Discard D = new Discarder.Discard(R, i, p);
                    string FileName, HandFileName;
                    if (FN == null)
                    {
                        if (!Directory.Exists(Dir)) Directory.CreateDirectory(Dir);
                        FileName = String.Format("./{0:s}/{1:s}_{2:d}_{3:d}.png", Dir, Hash, Round, p);
                        HandFileName = String.Format("./{0:s}/{1:s}_{2:d}_{3:d}_hand.png", Dir, Hash, Round, p);
                    }
                    else
                    {
                        FileName = (Round == -1) ? String.Format("{0:s}_{1:d}_{2:d}.png", FN, i, p) : String.Format("{0:s}.png", FN);
                        HandFileName = (Round == -1) ? String.Format("{0:s}_{1:d}_{2:d}_hand.png", FN, i, p) : String.Format("{0:s}_hand.png", FN);
                    }

                    D.RiichiLimit = RiichiLimit;
                    D.HighlightNaki = NakiHL;
                    D.HighlightTsumogiri = TsumogiriHL;

                    D.Generate();
                    D.Save(FileName);

                    if (ShowHand)
                    {
                        Discarder.HandOutput HO = new Discarder.HandOutput(R, i, p);
                        HO.Generate();
                        HO.Save(HandFileName);
                    }
                }
            }
        }