Example #1
0
            public void Unit_HoraResultTest()
            {
                //親40符3翻 ダブ東 ツモ 7800点
                {
                    var expected = 7800;
                    var tehai = new Tehai(new List<string>() { "1m", "2m", "3m", "4p", "5p", "6p", "7p", "7p", "7p", "9p", "9p", "E", "E", "E" });

                    var gameId = 1;
                    var playerPosition = 0;
                    var lastAddedPai = "E";

                    var ifr = new InfoForResult(gameId, playerPosition);
                    ifr.IsTsumo = true;
                    ifr.IsFured = false;
                    ifr.IsMenzen = true;
                    ifr.UseYamaPaiNum = 5;
                    ifr.SetLastAddedPai(lastAddedPai);
                    var fd = new Field();

                    var result = ResultCalclator.CalcHoraResult(tehai, ifr, fd, lastAddedPai);
                    Assert.AreEqual(expected, result.pointResult.HoraPlayerIncome);
                }

                //親50符2翻 ツモ 三暗刻
                {
                    var expected = 9600;
                    var tehai = new Tehai(new List<string>() { "1m", "1m", "1m", "2p", "2p", "2p", "4p", "5p", "5p", "5p", "6p", "E", "E", "5p" });

                    var gameId = 1;
                    var playerPosition = 0;
                    var lastAddedPai = "5p";

                    var ifr = new InfoForResult(gameId, playerPosition);
                    ifr.IsTsumo = true;
                    ifr.IsFured = false;
                    ifr.IsMenzen = true;
                    ifr.UseYamaPaiNum = 5;
                    ifr.SetLastAddedPai(lastAddedPai);
                    var fd = new Field();

                    var result = ResultCalclator.CalcHoraResult(tehai, ifr, fd, lastAddedPai);
                    Assert.AreEqual(expected, result.pointResult.HoraPlayerIncome);
                }

                //子20符2翻 タンピン
                {
                    var expected = 2000;
                    var tehai = new Tehai(new List<string>() { "2m", "3m", "4m", "2p", "3p", "4p", "4p", "5p", "6p", "4s", "5s", "8s", "8s" });

                    var gameId = 1;
                    var playerPosition = 1;
                    var lastAddedPai = "6s";

                    var ifr = new InfoForResult(gameId, playerPosition);
                    ifr.IsTsumo = false;
                    ifr.IsFured = false;
                    ifr.IsMenzen = true;
                    ifr.UseYamaPaiNum = 5;
                    var fd = new Field();
                    ifr.SetLastAddedPai(lastAddedPai);
                    var result = ResultCalclator.CalcHoraResult(tehai, ifr, fd, lastAddedPai);
                    Assert.AreEqual(expected, result.pointResult.HoraPlayerIncome);
                }

                //子20符3翻 タンヤオ三食一盃口
                {
                    var expected = 8000;
                    var tehai = new Tehai(new List<string>() { "2m", "3m", "4m", "2p", "3p", "4p", "2p", "4p", "5s", "5s", "2s", "3s", "4s" });

                    var gameId = 1;
                    var playerPosition = 1;
                    var lastAddedPai = "3p";

                    var ifr = new InfoForResult(gameId, playerPosition);
                    ifr.IsTsumo = false;
                    ifr.IsFured = false;
                    ifr.IsMenzen = true;
                    ifr.UseYamaPaiNum = 5;
                    var fd = new Field();
                    ifr.SetLastAddedPai(lastAddedPai);
                    var result = ResultCalclator.CalcHoraResult(tehai, ifr, fd, lastAddedPai);
                    Assert.AreEqual(expected, result.pointResult.HoraPlayerIncome);
                }

                //子40符1翻 自摸
                {
                    var expected = 1500;
                    var tehai = new Tehai(new List<string>() { "1m", "2m", "3m", "3m", "4m", "5m", "1p", "1p", "1p", "2s", "3s", "4s", "5s", "5s" });

                    var gameId = 1;
                    var playerPosition = 1;
                    var lastAddedPai = "3m";

                    var ifr = new InfoForResult(gameId, playerPosition);
                    ifr.IsTsumo = true;
                    ifr.IsFured = false;
                    ifr.IsMenzen = true;
                    ifr.UseYamaPaiNum = 5;
                    var fd = new Field();
                    ifr.SetLastAddedPai(lastAddedPai);
                    var result = ResultCalclator.CalcHoraResult(tehai, ifr, fd, lastAddedPai);
                    Assert.AreEqual(expected, result.pointResult.HoraPlayerIncome);
                }

                //子50符2翻 ロン
                {
                    var expected = 3200;
                    var tehai = new Tehai(new List<string>() { "1m", "1m", "1m", "2m", "2m", "2m", "1p", "1p", "1p", "2p", "3p", "4s", "4s" });

                    var gameId = 1;
                    var playerPosition = 1;
                    var lastAddedPai = "1p";

                    var ifr = new InfoForResult(gameId, playerPosition);
                    ifr.IsTsumo = false;
                    ifr.IsFured = false;
                    ifr.IsMenzen = true;
                    ifr.UseYamaPaiNum = 5;
                    var fd = new Field();
                    ifr.SetLastAddedPai(lastAddedPai);
                    var result = ResultCalclator.CalcHoraResult(tehai, ifr, fd, lastAddedPai);
                    Assert.AreEqual(expected, result.pointResult.HoraPlayerIncome);
                }
            }
Example #2
0
            public void Unit_YakuResultTest()
            {
                //chinitsu pinfu iipeiko
                {
                    Tehai testTehai = new Tehai(new List<string> { "1m", "2m", "3m", "4m", "5m", "6m", "7m", "7m", "1m", "2m", "2m", "3m", "3m", "4m" });

                    var lastAdded = "4m";
                    var testIfr = new InfoForResult();
                    testIfr.IsMenzen = true;
                    testIfr.IsOya = true;
                    testIfr.IsTsumo = true;
                    testIfr.UseYamaPaiNum = 10;
                    testIfr.SetLastAddedPai(lastAdded);
                    var result = new HoraResult();
                    result = ResultCalclator.CalcHoraResult(testTehai, testIfr, new Field(), lastAdded);
                    var yakuMap = result.yakuResult.yakus;
                    Assert.IsTrue(yakuMap.Count(e => (string)e[0] == MJUtil.YAKU_STRING[(int)MJUtil.Yaku.CHINNITSU]) == 1);
                    Assert.IsTrue(yakuMap.Count(e => (string)e[0] == MJUtil.YAKU_STRING[(int)MJUtil.Yaku.PINFU]) == 1);
                    Assert.IsTrue(yakuMap.Count(e => (string)e[0] == MJUtil.YAKU_STRING[(int)MJUtil.Yaku.IIPEIKOU]) == 1);

                }
            }
Example #3
0
            public void Unit_HoraResultTestUseHoraPatternExamples()
            {
                using (StreamReader sr = new StreamReader(@"../../HoraPatternOutputSmall.txt", Encoding.GetEncoding("shift_jis")))
                {
                    var lineNumber = 0;

                    while (true)
                    {
                        string line = sr.ReadLine();
                        if (line == null) break;
                        lineNumber++;
                        var obj = JsonConvert.DeserializeObject<MJsonMessageHora_Extend>(line);

                        int expected = obj.hora_points;

                        var gameId = obj.kyoku;
                        var playerPosition = obj.actor;
                        var lastAddedPai = obj.pai;

                        var stubOyaId = 0;// replaced after
                        var ifr = new InfoForResult(gameId, playerPosition, stubOyaId, obj.bakaze);
                        ifr.IsTsumo = obj.actor == obj.target;

                        var ankantsuCount = obj.hora_furos.Count(e => e[0] == "ankantsu");
                        ifr.IsMenzen = obj.hora_furos.Count - ankantsuCount == 0;
                        ifr.IsFured = !ifr.IsMenzen;
                        ifr.UseYamaPaiNum = 5;
                        ifr.SetLastAddedPai(lastAddedPai);

                        ifr.IsIppatsu = yakuContains(obj, "ippatsu");
                        ifr.IsReach = yakuContains(obj, "reach");
                        ifr.IsDoubleReach = yakuContains(obj, "double_reach");
                        ifr.IsHaitei = yakuContains(obj, "haiteiraoyue");
                        ifr.IsHoutei = yakuContains(obj, "hoteiraoyui");
                        ifr.IsRinshan = yakuContains(obj, "rinshankaiho");
                        ifr.IsChankan = yakuContains(obj, "chankan");

                        ifr.IsOya = (obj.kyoku - 1 - obj.actor + Constants.PLAYER_NUM) % Constants.PLAYER_NUM == 0;

                        foreach (var doraMarker in obj.dora_markers)
                        {
                            ifr.RegisterDoraMarker(doraMarker);
                        }

                        ifr.RegisterUraDoraMarker(obj.uradora_markers);

                        var fd = new Field(obj.kyoku, 0, 0, 0,obj.bakaze);
                        var tehai = new Tehai(obj.hora_tehais);

                        foreach (var furo in obj.hora_furos)
                        {
                            // ankan don't contains furo.furopai
                            if (MJUtil.TARTSU_TYPE_STRING_ENUM_MAP[furo[0]] == MJUtil.TartsuType.ANKANTSU)
                            {
                                var f = new Furo(furo[0], Pai.UNKNOWN_PAI_STRING, furo.GetRange(1, furo.Count - 1));
                                tehai.furos.Add(f);
                            }
                            else
                            {
                                var f = new Furo(furo[0], furo[1], furo.GetRange(2, furo.Count - 2));
                                tehai.furos.Add(f);
                            }
                        }

                        if (ifr.IsTsumo)
                        {
                            tehai.tehai.Add(new Pai(lastAddedPai));
                        }

                        var result = ResultCalclator.CalcHoraResult(tehai, ifr, fd, lastAddedPai);
                        var myPointResult = result.pointResult.HoraPlayerIncome;

                        if (myPointResult != expected)
                        {
                            Debug.WriteLine(lineNumber + ", acc = " + expected + " --> " + myPointResult + " tehais:" + string.Join(",", tehai.GetTehaiStringList().ToList()));

                            foreach (var yaku in result.yakuResult.yakus) {
                                Debug.WriteLine("accual yaku {0}, han {1}",yaku[0],yaku[1]);
                            }

                            result = ResultCalclator.CalcHoraResult(tehai, ifr, fd, lastAddedPai);
                        }
                        Assert.AreEqual(expected, myPointResult);

                    }
                }
            }