示例#1
0
 private void RefreshDatabaseListView()
 {
     lock (Bot.Database.DatabaseLock)
     {
         var imagelist = new ImageList();
         this.listviewDatabase.Clear();
         int i = 1;
         foreach (Sample sample in Bot.Database.Database)
         {
             imagelist.Images.Add(sample.Bitmap);
             ListViewItem item = new ListViewItem("Letter " + i, i - 1);
             if (sample is LetterSample)
             {
                 LetterSample letterSample = sample as LetterSample;
                 if (letterSample.Kind == SampleKind.Known)
                 {
                     item.Text = letterSample.Letter.ToString();
                 }
                 if (letterSample.Kind == SampleKind.BannedStone)
                 {
                     item.Text = "Banned";
                 }
             }
             if (sample is ScreenpartSample)
             {
                 ScreenpartSample screenpartSample = sample as ScreenpartSample;
                 item.Text = screenpartSample.Screenpart.ToString();
             }
             item.Tag = sample;
             this.listviewDatabase.Items.Add(item);
             i++;
         }
         this.listviewDatabase.LargeImageList = imagelist;
     }
 }
示例#2
0
        private void AttemptToRecognizeStartSituation()
        {
            SpecialSituationDescription = "";
            List <ScreenpartSample> scrSamples = new List <ScreenpartSample>();

            lock (bot.Database.DatabaseLock)
            {
                foreach (var smpl in bot.Database.Database.OfType <ScreenpartSample>())
                {
                    if (!smpl.Scanned)
                    {
                        smpl.ColorData = bot.PresageAndRecognize.SimplifyOtherBitmap(smpl.Bitmap, new System.Drawing.Rectangle(0, 0, smpl.Bitmap.Width, smpl.Bitmap.Height));
                        smpl.Scanned   = true;
                    }
                    scrSamples.Add(smpl);
                }
            }

            int THRESHOLD             = 1000;
            var snap                  = bot.Scan.LastSnapshot;
            int closest               = Int32.MaxValue;
            ScreenpartSample closestS = null;

            foreach (var scrSample in scrSamples)
            {
                var compareData = snap.ColorDataScreenparts[scrSample.Screenpart];
                int dist        = (bot.PresageAndRecognize.GetDistance(scrSample.ColorData, compareData));
                if (dist < closest)
                {
                    closest  = dist;
                    closestS = scrSample;
                }
            }
            SpecialSituationDescription = "Recognized screenpart: " + closestS.Screenpart + " (distance " + closest + ")";
            if (closest < THRESHOLD)
            {
                switch (closestS.Screenpart)
                {
                case Scan.Screenpart.TREASURE_CHEST_TOP_ROW:
                    for (char i = 'A'; i <= 'Z'; i++)
                    {
                        bot.Injection.PressChar(i);
                    }

                    AfterPauseState = AutonomousState.ReadingLetters;
                    State           = AutonomousState.WakingUp;
                    TimeUntilAction = TimeSpan.FromMilliseconds(DELAY_AFTER_TREASURE_ROW_COMPLETE);
                    break;
                }
            }
        }