Exemple #1
0
        private async Task computeHand(CommandContext ctx, string hand, string options)
        {
            var basicHand    = HandParser.GetSimpleHand(hand);
            var handEmoji    = HandParser.GetHandEmojiCodes(hand, ctx.Client);
            var optionsEmoji = options == "all"
                ? handEmoji
                : HandParser.GetHandEmojiCodes(options, ctx.Client);

            try
            {
                await ctx.Message.DeleteAsync();
            }
            catch
            {
                // do nothing
            }

            var    hand34      = C.one_line_string_to_34_array(basicHand);
            string suitOrder   = U.getSuitOrder(basicHand);
            var    shantenCalc = new ShantenCalculator();
            int    shanten     = -2;
            var    nbTiles     = hand34.Sum();

            if (nbTiles == 13 || nbTiles == 14)
            {
                shanten = shantenCalc.Calculate_shanten(hand34);
            }
            StringBuilder sb = new();

            sb.AppendLine($"<@!{ctx.User.Id}>: {GetHandMessage(handEmoji)}  {getShanten(shanten)}\n");
            var divider = new HandDivider();
            var results = divider.divide_hand(hand34);

            int i = 1;

            foreach (var result in results)
            {
                var hand136 = C.from_34_indices_to_136_arrays(result);
                var setsStr = hand136.Select(set => C.to_one_line_string(set));
                IEnumerable <string> orderedSetStr = new List <string>();
                foreach (var chr in suitOrder)
                {
                    orderedSetStr = orderedSetStr.Concat(setsStr.Where(x => x.Contains(chr)));
                }
                sb.AppendLine($"{i}:{string.Join(",", orderedSetStr.Select(x => $"{GetHandMessage(HandParser.GetHandEmojiCodes(x, ctx.Client))}"))}\n");
                i++;
            }
            var message = await ctx.Channel.SendMessageAsync(sb.ToString());

            {
                foreach (var emoji in optionsEmoji)
                {
                    await message.CreateReactionAsync(emoji);
                }
            }
        }
Exemple #2
0
 public static IList <TileKinds> Hand(Tiles34 tiles, int handIndex = 0)
 {
     return(HandDivider.DivideHand(tiles)[handIndex]);
 }