Ejemplo n.º 1
0
        private void FocusLobby(LobbyLayout layout, Iterator <Image> screen)
        {
            Log.Info("selecting lobby");
            for (int tries = 0; tries < 5; tries++)
            {
                // check
                {
                    Image lobbyCorner = screen.next().crop(0, 300, 0, 300);
                    if (PatternLocator.isLoggedInLobbyVisible(lobbyCorner))
                    {
                        return;
                    }
                }

                // focus
                {
                    Point taskbarLobby = TaskBarLobby(layout);
                    mouse.MoveAndLeftClick(taskbarLobby.X, taskbarLobby.Y, 10, 10);
                    Thread.Sleep(700);
                }

                // check
                {
                    Image lobbyCorner = screen.next().crop(0, 300, 0, 300);
                    if (PatternLocator.isLoggedInLobbyVisible(lobbyCorner))
                    {
                        return;
                    }
                }
            }
            throw new Exception("cannot focus lobby");
        }
Ejemplo n.º 2
0
        private List <Point> TaskBarPrograms(LobbyLayout lobby, Image screenshot)
        {
            // screenshot
            Log.Debug("device control display dimensions {W=" + deviceControl.DisplayWidth + ",H="
                      + deviceControl.DisplayHeight + "} crop area {X=" + lobby.Taskbar.X + ",Y=" + lobby.Taskbar.Y + "}");
            Image taskbar = screenshot.crop(lobby.Taskbar.X, deviceControl.DisplayWidth,
                                            lobby.Taskbar.Y, deviceControl.DisplayHeight - 2);
            List <Point> icons = PatternLocator.locateTaskBarPrograms(taskbar, lobby.Taskbar.X, lobby.Taskbar.Y);

            Log.Info("found " + icons.Count + " taskbar icons");
            return(icons);
        }
Ejemplo n.º 3
0
        private TableContainer FocusTable(LobbyLayout layout, List <TableContainer> candidates, Point taskBarPosition)
        {
            Iterator <Image> screen = new ScreenImageIterator(deviceControl);
            int tries = 0;

            while (true)
            {
                // tries
                if (tries > 2)
                {
                    ErrorHandler.ReportException(new Exception("cannot focus table"), "focus table");
                    return(TABLE_NOT_FOUND);
                }

                // check for other window
                Image screenshot = screen.next();

                // press buttons
                if (PressCheckOrFold(screenshot))
                {
                    continue;
                }

                // click task bar
                int randomOff = (int)(random.NextDouble() * 3);
                mouse.Move(taskBarPosition.X + randomOff, taskBarPosition.Y + randomOff);
                Thread.Sleep(150);
                mouse.LeftClick();
                Thread.Sleep(350);

                // check for other window
                screenshot = screen.next();

                // check focus
                foreach (TableContainer table in candidates)
                {
                    if (IsTableVisible(table, CropTable(screenshot, table.Layout)))
                    {
                        return(table);
                    }
                }

                // move somewhere else
                mouse.Move(taskBarPosition.X - 100, taskBarPosition.Y - 50);
                Thread.Sleep(200 + tries * 100);

                // tries
                tries++;
            }
        }
Ejemplo n.º 4
0
        public static void Main(string[] args)
        {
            Thread.Sleep(10 * 1000);

            LobbyIdentifier identifier = new LobbyIdentifier();
            DeviceControl   device     = new Win32Control();
            Image           screenshot = new ScreenImageIterator(device).next();
            Point           offset     = PatternLocator.locateLobby(screenshot);
            LobbyLayout     layout     = new LobbyLayout();

            Image window    = screenshot.crop(offset.X, screenshot.width, offset.Y, screenshot.height);
            Image tableList = window.crop(layout.TableList.X, layout.TableList.X + layout.TableList.Width,
                                          layout.TableList.Y, layout.TableList.Y + layout.TableList.Height);
            List <LobbyTable> lobbyTables = identifier.identifyLobbyTables(tableList, offset);

            foreach (LobbyTable lobby in lobbyTables)
            {
                Console.WriteLine(lobby.ToString());
            }
        }
Ejemplo n.º 5
0
        public static void Main(string[] args)
        {
            Log.SetLevel(Log.Level.FINEST);
            Iterator <Image> screenIter;

            if (USE_SCREEN)
            {
                // wait
                Log.Info("waiting ...");
                Thread.Sleep(5000);

                // full screen
                Console.WriteLine("## scanning for lobby ##");
                Image fullScreen = new ScreenImageIterator(new Win32Control()).next();
                Point offset     = PatternLocator.locateLobby(fullScreen);
                Console.WriteLine("lobby found at x=" + offset.X + " y=" + offset.Y);

                // desk
                LobbyLayout layout = new LobbyLayout();
                screenIter = new ScreenImageIterator(new Win32Control(), new Rectangle(offset.X + layout.TableList.X, offset.Y + layout.TableList.Y, layout.TableList.Width, layout.TableList.Height));
            }
            else
            {
                screenIter = new MockOneImageIterator(toImage(new Bitmap("test/lobby1.bmp")));
            }

            // screen + reduce + invert
            Iterator <Image> reduceIter  = new ReduceColorIterator(screenIter, new ColorReducers.LobbyChars());
            Iterator <Image> replaceIter = new ReplaceColorIterator(reduceIter, Color.White, Color.Transparent);

            // proxy
            ImagesRenderer        renderer  = newImageRenderer();
            IteratorProxy <Image> proxyIter = new IteratorProxy <Image>(replaceIter);
            ColorReplacer         replacer  = new ColorReplacer(Color.Transparent, Color.Cyan);

            proxyIter.handler += delegate(Image next)
            {
                setImage(renderer, toBitmap(replacer.replace(next)));
            };

            // partition + decompose + crop
            Iterator <List <List <Image> > > patitionIter = new ImageHoriPartitionIterator(proxyIter);
            Iterator <List <List <Image> > > cropIter     = new CropImageIterator(patitionIter);

            // patterns
            List <CharPattern> patterns   = CharReader.readCharsFromResourcesLobby();
            CharIdentifier     identifier = new CharIdentifier(patterns);

            // identify
            int count = 0;

            while (cropIter.hasNext())
            {
                List <List <Image> > lines = cropIter.next();
                // line
                foreach (List <Image> line in lines)
                {
                    // chars
                    String textLine = "";
                    foreach (Image chars in line)
                    {
                        List <Image> combos = CharDecomposer.decompose(chars, 0);
                        foreach (Image chr in combos)
                        {
                            Image character = ImageCropper.crop(chr);
                            textLine += identifyChars(identifier, character, ref count);
                        }
                    }

                    Console.WriteLine(textLine);
                }
            }
        }
Ejemplo n.º 6
0
        private List <LobbyTable> IdentifyLobbyTables(LobbyIdentifier lobbyIdentifier, LobbyLayout layout, Iterator <Image> screen, Point offset)
        {
            for (int tries = 0; tries < 10; tries++)
            {
                // time
                DateTime startLobby = DateTime.Now;

                // select last row
                mouse.MoveAndLeftClick(offset.X + layout.LastRow.X, offset.Y + layout.LastRow.Y, 20, 5);

                // move mouse
                mouse.Move(offset.X + layout.Mouse.X, offset.Y + layout.Mouse.Y);
                Thread.Sleep(100);

                // shot
                Image screenshot = screen.next();

                // crop
                Image window    = screenshot.crop(offset.X, screenshot.width, offset.Y, screenshot.height);
                Image tableList = window.crop(layout.TableList.X, layout.TableList.X + layout.TableList.Width,
                                              layout.TableList.Y, layout.TableList.Y + layout.TableList.Height);
                try
                {
                    List <LobbyTable> lobbyTables = lobbyIdentifier.identifyLobbyTables(tableList, offset);

                    // log
                    Log.Info("identified " + lobbyTables.Count + " joinable lobby tables");

                    // nothing found?
                    if (lobbyTables.Count == 0)
                    {
                        throw new Exception("identified 0 lobby tables, trying again");
                    }

                    return(lobbyTables);
                }
                catch (Exception ex)
                {
                    // handle error
                    ErrorHandler.ReportExceptionWithImage(ex, "lobby identifier error", tableList);

                    // sleep
                    Thread.Sleep(1000);

                    // focus lobby
                    FocusLobby(layout, screen);

                    continue;
                }
            }
            throw new Exception("cannot identify lobby table list");
        }
Ejemplo n.º 7
0
        public List <TableContainer> OpenNewTables(Settings settings, ImageRenderer imageRenderer, TableFoundDelegate tableDelegate)
        {
            Log.Info("## scanning for lobby ##");

            // identifier
            LobbyIdentifier lobbyIdentifier = new LobbyIdentifier();

            // set renderer
            tableIdentifier.Renderer = imageRenderer;
            lobbyIdentifier.Renderer = imageRenderer;

            // screen
            Iterator <Image> screen = new ScreenImageIterator(deviceControl);
            LobbyLayout      layout = new LobbyLayout();

            // find lobby
            FocusLobby(layout, screen);
            Image screenshot  = screen.next();
            Point lobbyOffset = PatternLocator.locateLobby(screenshot);

            // loop until we got enough tables
            List <TableContainer> tables = new List <TableContainer>();

            while (knownTables.Count < settings.AutoLocateTablesNum)
            {
                // check for tables
                PressCheckOrFold(screenshot);

                // scan lobby
                List <LobbyTable> lobbyTables = IdentifyLobbyTables(lobbyIdentifier, layout, screen, lobbyOffset);

                // open tables?
                if (HasOpenTables(lobbyTables))
                {
                    // select table
                    LobbyTable bestTable = SelectBestTable(lobbyTables);

                    // render
                    if (imageRenderer != null)
                    {
                        imageRenderer.renderImage(ImageTools.rectImage(), new Point(bestTable.RelX, bestTable.RelY));
                    }

                    // open table
                    Log.Info("opening table " + bestTable.ToString() + " with score " + String.Format("{0:0.00}", bestTable.Score));
                    TableContainer container = OpenTable(bestTable, settings, screen, bestTable);
                    if (container != TABLE_ALREADY_JOINED && container != TABLE_NOT_FOUND && container != CANNOT_FIND_SEAT)
                    {
                        // add to known tables
                        tables.Add(container);
                        knownTables.Add(container);
                        Log.Info("added new table " + tables.Count);

                        // invoke delegate
                        if (tableDelegate != null)
                        {
                            tableDelegate(container);
                        }
                    }

                    // reselect lobby (otherwise automatically selected by pokerstars -> close table)
                    if (container == TABLE_NOT_FOUND || knownTables.Count > 0)
                    {
                        FocusLobby(layout, screen);
                        keyboard.pressPageUp(3);
                    }
                    // move up for "better" tables
                    else
                    {
                        keyboard.pressPageUp(2);
                        Thread.Sleep(100);
                    }
                }
                else
                {
                    // scroll
                    keyboard.pressPageDown();
                    Thread.Sleep(1000);
                }
            }

            // minimize lobby
            Thread.Sleep(1000);

            return(tables);
        }
Ejemplo n.º 8
0
 private Point TaskBarLobby(LobbyLayout layout)
 {
     return(new Point(layout.Taskbar.X + 25, layout.Taskbar.Y + 10));
 }
Ejemplo n.º 9
0
        public static void Main(string[] args)
        {
            Log.SetLevel(Log.Level.FINEST);
            Iterator <Image> screenIter;
            LobbyLayout      layout = new LobbyLayout();
            Point            offset;

            if (USE_SCREEN)
            {
                // wait
                Log.Info("waiting ...");
                Thread.Sleep(3000);

                // full screen
                Console.WriteLine("## scanning for lobby ##");
                Image fullScreen = new ScreenImageIterator(new Win32Control()).next();
                offset = PatternLocator.locateLobby(fullScreen);
                Console.WriteLine("lobby found at x=" + offset.X + " y=" + offset.Y);

                // lobby
                screenIter = new ScreenImageIterator(new Win32Control(), new Point(offset.X, offset.Y));
                screenIter = new WaitDeltaImageIterator(screenIter);
            }
            else
            {
                offset     = new Point(0, 0);
                screenIter = new MockOneImageIterator(toImage(new Bitmap("test/lobby1.bmp")));
            }

            // screen + reduce + invert
            ColorReducer  reducer       = new ColorReducers.LobbyChars();
            ColorReducer  reducerJoined = new ColorReducers.LobbyCharsJoined();
            ColorReplacer replacer      = new ColorReplacer(Color.White, Color.Transparent);


            // renderer
            ImagesRenderer renderer      = newImageRenderer();
            ColorReplacer  replacerTrans = new ColorReplacer(Color.Transparent, Color.Cyan);

            // patterns
            List <CharPattern> patterns   = CharReader.readCharsFromResourcesLobby();
            CharIdentifier     identifier = new CharIdentifier(patterns);

            // identify
            while (screenIter.hasNext())
            {
                // rows
                List <LobbyTable> rows = new List <LobbyTable>();

                // image
                Image screen = screenIter.next();

                // list
                Image tableList = screen.crop(layout.TableList.X, layout.TableList.X + layout.TableList.Width,
                                              layout.TableList.Y, layout.TableList.Y + layout.TableList.Height);

                // identify
                List <ValueWithY> playerCounts = identifyValues(tableList, layout.PlayersCountX,
                                                                layout.PlayersCountX + layout.PlayersCountW, tableList.height,
                                                                reducer, replacer, identifier, renderer);
                List <ValueWithY> potSizes = identifyValues(tableList, layout.PotX,
                                                            layout.PotX + layout.PotW, tableList.height,
                                                            reducer, replacer, identifier, renderer);
                List <ValueWithY> flops = identifyValues(tableList, layout.FlopsX,
                                                         layout.FlopsX + layout.FlopsW, tableList.height,
                                                         reducer, replacer, identifier, renderer);

                List <LobbyTable> tables = new List <LobbyTable>();
                for (int i = 0; i < playerCounts.Count; i++)
                {
                    // location
                    int x = offset.X + layout.TableList.X + layout.TableList.Width / 2;
                    int y = offset.Y + layout.TableList.Y + playerCounts[i].Y;

                    // cell
                    int   celly  = playerCounts[i].Y;
                    int   cellx  = layout.PlayersCountX;
                    Image cell   = tableList.crop(cellx, cellx + layout.PlayersCountW, celly, celly + layout.CellHeight);
                    bool  joined = ContainsJoinedColor(cell, reducerJoined, renderer);

                    // table
                    tables.Add(new LobbyTable(i + 1, (int)playerCounts[i].Value, potSizes[i].Value, (int)flops[i].Value, x, y, offset.X, offset.Y, joined));
                }

                // print
                foreach (LobbyTable table in tables)
                {
                    Console.WriteLine(table.ToString());
                }

                // wait
                Console.ReadKey();
            }
        }