public int calcPoint(Hand hand, Tile lastTile, Direction gameDirection, Direction playerDirection, Fuuro fuuro, Dora dora, bool isRiichi) { lock (process) { send("mjscore"); int[] handTmp = new int[41]; foreach (var tile in hand) { handTmp[getTileId(tile)]++; } send(string.Join(" ", handTmp)); send(getTileId(lastTile)); send((int)gameDirection + 30); send((int)playerDirection + 30); send(fuuro.Count); foreach (var group in fuuro) { send(getFuuroType(group), group.Min(t => t.GenaralId)); } int[] doraTmp = new int[10]; for (int i = 0; i < dora.Count; i++) { doraTmp[i] = dora[i].GenaralId; } send(string.Join(" ", doraTmp)); send(isRiichi ? 1 : 0); var res = int.Parse(process.StandardOutput.ReadLine()); return(res); } }
public YakuConfig() { var id = 0; aka_dora = new AkaDora(++id); tenhou = new Tenhou(++id); // Yaku situations tsumo = new Tsumo(++id); riichi = new Riichi(++id); open_riichi = new OpenRiichi(++id); ippatsu = new Ippatsu(++id); chankan = new Chankan(++id); rinshan = new Rinshan(++id); haitei = new Haitei(++id); houtei = new Houtei(++id); daburu_riichi = new DaburuRiichi(++id); daburu_open_riichi = new DaburuOpenRiichi(++id); nagashi_mangan = new NagashiMangan(++id); renhou = new Renhou(++id); // Yaku 1 Han pinfu = new Pinfu(++id); tanyao = new Tanyao(++id); iipeiko = new Iipeikou(++id); haku = new Haku(++id); hatsu = new Hatsu(++id); chun = new Chun(++id); east = new East(++id); south = new South(++id); west = new West(++id); north = new North(++id); yakuhai_place = new YakuhaiPlace(++id); yakuhai_round = new YakuhaiRound(++id); // Yaku 2 Hans sanshoku = new Sanshoku(++id); ittsu = new Ittsu(++id); chantai = new Chanta(++id); honroto = new Honroutou(++id); toitoi = new Toitoi(++id); sanankou = new Sanankou(++id); sankantsu = new Sankantsu(++id); sanshoku_douko = new SanshokuDoukou(++id); chiitoitsu = new Chiitoitsu(++id); shosangen = new Shousangen(++id); // Yaku 3 Hans honitsu = new Honitsu(++id); junchan = new Junchan(++id); ryanpeiko = new Ryanpeikou(++id); // Yaku 6 Hans chinitsu = new Chinitsu(++id); // Yakuman list kokushi = new Kokushi(++id); chuuren_poutou = new ChuurenPoutou(++id); suuankou = new Suuankou(++id); daisangen = new Daisangen(++id); shosuushi = new Shousuushii(++id); ryuisou = new Ryuuiisou(++id); suukantsu = new Suukantsu(++id); tsuisou = new Tsuisou(++id); chinroto = new Chinroutou(++id); daisharin = new Daisharin(++id); daichisei = new Daichisei(++id); // Double yakuman daisuushi = new Daisuushii(++id); daburu_kokushi = new DaburuKokushi(++id); suuankou_tanki = new SuuankouTanki(++id); daburu_chuuren_poutou = new DaburuChuurenPoutou(++id); // Yakuman situations tenhou = new Tenhou(id++); chiihou = new Chiihou(++id); renhou_yakuman = new RenhouYakuman(++id); sashikomi = new Sashikomi(++id); paarenchan = new Paarenchan(++id); // Other dora = new Dora(++id); aka_dora = new AkaDora(++id); }