コード例 #1
0
ファイル: RulesReader.cs プロジェクト: enijkamp/pokerbot
        private static double mapMaxInterval(string value)
        {
            string values = value.Replace("[", "").Replace("]", "");

            string[] numbers = values.Split(',');
            return(TextTools.ParseDouble(numbers[1]));
        }
コード例 #2
0
ファイル: LobbyIdentifier.cs プロジェクト: enijkamp/pokerbot
        private List <ValueWithY> identifyValues(Image tableList, int x, int width, int height)
        {
            // rows
            Image rows = tableList.crop(x, width, 0, height);

            // reduce & replace
            Image reducedRows  = reducer.reduceColors(rows);
            Image replacedRows = replacer.replace(reducedRows);

            // render
            renderImage(reducedRows, new Point(x, 0));

            // chars
            List <ImageLine> lines = HorizontalPartitioner.partitionWithY(replacedRows);

            // chars
            List <ValueWithY> result = new List <ValueWithY>();

            foreach (ImageLine line in lines)
            {
                String textLine = "";
                foreach (Image chars in line)
                {
                    List <Image> combos = CharDecomposer.decompose(chars);
                    foreach (Image chr in combos)
                    {
                        Image character = ImageCropper.crop(chr);
                        textLine += identifyChars(identifier, character);
                    }
                }

                // pure numbers
                string numericTextLine = textLine;
                foreach (char chr in textLine)
                {
                    if (!TextTools.IsNumeric(chr) && !TextTools.IsPoint(chr))
                    {
                        numericTextLine = numericTextLine.Replace(chr.ToString(), "");
                    }
                }

                // convert
                if (numericTextLine.Length != 0)
                {
                    double value = TextTools.ParseDouble(numericTextLine);
                    result.Add(new ValueWithY(value, line.Y));
                }
                else
                {
                    result.Add(new ValueWithY(line.Y));
                }
            }

            return(result);
        }
コード例 #3
0
ファイル: TableIdentifier.cs プロジェクト: enijkamp/pokerbot
            public double process(Image image, Rectangle rect, TableIdentifier parent)
            {
                // colors
                Image cropped  = crop(image, rect);
                Image reduced  = reducer.reduceColors(cropped);
                Image replaced = replacer.replace(reduced);

                // image
                parent.renderImage(inker.replace(replaced), rect);

                // partition
                List <List <Image> > lines = HorizontalPartitioner.partition(replaced);

                if (lines.Count == 0)
                {
                    return(Table.NO_POT);
                }

                // chars
                String textLine = "";

                foreach (Image chars in lines[0])
                {
                    List <Image> combos = CharDecomposer.decompose(chars);
                    foreach (Image chr in combos)
                    {
                        Image character = ImageCropper.crop(chr);
                        textLine += identifyChars(character);
                    }
                }

                // check for digit
                if (!TextTools.ContainsDigit(textLine))
                {
                    return(Table.NO_POT);
                }

                // format
                textLine = textLine.Replace("$", "").Replace("?", "").Trim();

                // money
                return(TextTools.ParseDouble(textLine));
            }
コード例 #4
0
 private double evalFactor(string term, string identifier)
 {
     term = term.Trim();
     if (term.Length == identifier.Length)
     {
         return(1);
     }
     else
     {
         string factorTerm = term.Replace(identifier, string.Empty);
         if (factorTerm.StartsWith("."))
         {
             return(TextTools.ParseDouble("0" + factorTerm));
         }
         else
         {
             return(TextTools.ParseDouble(factorTerm));
         }
     }
 }
コード例 #5
0
ファイル: TableIdentifier.cs プロジェクト: enijkamp/pokerbot
        private void processTextBox(TextBoxPipeline pipe, Player info, Image table, int id, PlayerInfoEnum read, bool isMySeat)
        {
            try
            {
                if (read == PlayerInfoEnum.BOTH || read == PlayerInfoEnum.NAME)
                {
                    // textbox
                    Rectangle rect = layout.Names[id];
                    info.Position = id;
                    info.NameRect = rect;
                    Image         image     = crop(table, rect);
                    List <String> textLines = pipe.process(image, id, rect, this, isMySeat);
                    if (textLines.Count == 0)
                    {
                        info.State = Player.States.NON_EXISTENT;
                    }
                    else
                    {
                        if (!containsChars(textLines[0]))
                        {
                            info.State = Player.States.NON_EXISTENT;
                        }
                        else
                        {
                            info.State = Player.States.EXISTENT;
                            info.Name  = textLines[0];
                        }
                    }
                }

                if (read == PlayerInfoEnum.BOTH || read == PlayerInfoEnum.MONEY)
                {
                    // textbox
                    Rectangle rect = layout.Money[id];
                    info.Position  = id;
                    info.MoneyRect = rect;
                    Image         image     = crop(table, rect);
                    List <String> textLines = pipe.process(image, id, rect, this, isMySeat);

                    if (textLines.Count == 0)
                    {
                        info.State = Player.States.NON_EXISTENT;
                    }
                    else
                    {
                        if (!containsChars(textLines[0]))
                        {
                            info.State = Player.States.NON_EXISTENT;
                        }
                        else
                        {
                            info.State = Player.States.EXISTENT;
                            if (textLines[0].Contains("$"))
                            {
                                info.State = Player.States.EXISTENT;
                                info.Money = TextTools.ParseDouble(textLines[0].Replace("$", "").Trim());
                            }
                            else
                            {
                                info.Money = Player.NO_MONEY;
                            }
                        }
                    }
                }
            }
            catch (Exception)
            {
                Log.Warn("Unable to read player info (mode = " + read + ")");
            }
        }
コード例 #6
0
ファイル: TableIdentifier.cs プロジェクト: enijkamp/pokerbot
            public TableControl process(Image image, int position, Rectangle rect, TableIdentifier parent)
            {
                // crop
                image = crop(image, rect);

                // colors
                Image reduced  = reducer.reduceColors(image);
                Image inverted = inverter.invert(reduced);
                Image replaced = replacer.replace(inverted);

                // image
                parent.renderImage(inker.replace(replaced), rect);

                // partition
                List <List <Image> > lines = HorizontalPartitioner.partition(replaced);

                // ## action ##
                TableControl.ControlType type = TableControl.ControlType.NONE;
                if (lines.Count >= 1)
                {
                    // read chars
                    String actionText = "";
                    foreach (Image chars in lines[0])
                    {
                        List <Image> combos = CharDecomposer.decompose(chars, 0);
                        foreach (Image chr in combos)
                        {
                            Image character = ImageCropper.crop(chr);
                            actionText += identifyChars(character);
                        }
                    }
                    if (actionText == "Fold")
                    {
                        type = TableControl.ControlType.FOLD;
                    }
                    else if (actionText == "Check")
                    {
                        type = TableControl.ControlType.CHECK;
                    }
                    else if (actionText.StartsWith("Cal"))
                    {
                        type = TableControl.ControlType.CALL;
                    }
                    else if (actionText == "Bet")
                    {
                        type = TableControl.ControlType.BET;
                    }
                    else if (actionText.StartsWith("Raise"))
                    {
                        type = TableControl.ControlType.RAISE;
                    }
                    else if (actionText.StartsWith("Post"))
                    {
                        type = TableControl.ControlType.POST_BLIND;
                    }
                }

                // ## amount ##
                double amount = 0.0;

                if (lines.Count >= 2)
                {
                    // read chars
                    String amountText = "";
                    foreach (Image chars in lines[1])
                    {
                        List <Image> combos = CharDecomposer.decompose(chars, 0);
                        foreach (Image chr in combos)
                        {
                            Image character = ImageCropper.crop(chr);
                            amountText += identifyChars(character);
                        }
                    }

                    // format
                    amountText = amountText.Replace("$", "").Replace("?", "").Trim();

                    // money
                    amount = TextTools.ParseDouble(amountText);
                }


                return(new TableControl(type, position, amount));
            }
コード例 #7
0
ファイル: TableIdentifier.cs プロジェクト: enijkamp/pokerbot
            public double process(Image image, Rectangle rect, TableIdentifier parent)
            {
                // colors
                Image reduced  = reducer.reduceColors(image);
                Image inverted = inverter.invert(reduced);
                Image replaced = replacer.replace(inverted);

                // image
                parent.renderImage(inker.replace(replaced), rect);

                // partition
                List <List <Image> > lines = HorizontalPartitioner.partition(replaced);

                if (lines.Count == 0)
                {
                    return(Player.NO_BET);
                }

                // chars
                String textLine = "";

                foreach (Image chars in lines[0])
                {
                    List <Image> combos = CharDecomposer.decompose(chars);
                    foreach (Image chr in combos)
                    {
                        Image character = ImageCropper.crop(chr);
                        textLine += identifyChars(character);
                    }
                }

                // check for digit
                if (!TextTools.ContainsDigit(textLine))
                {
                    return(Player.NO_BET);
                }

                // sanity check
                if (!textLine.Contains("$"))
                {
                    throw new ArgumentException("bet text has no dollar sign");
                }

                // replace all non-numeric chars
                textLine = textLine.Trim();
                string numericTextLine = textLine;

                foreach (char chr in textLine)
                {
                    if (!TextTools.IsNumeric(chr) && !TextTools.IsPoint(chr))
                    {
                        numericTextLine = numericTextLine.Replace(chr.ToString(), "");
                    }
                }


                // sanity check (sometimes some pixels are identifier as '.')
                if (numericTextLine.StartsWith("."))
                {
                    numericTextLine = numericTextLine.Substring(1);
                }

                // money
                return(TextTools.ParseDouble(numericTextLine));
            }