public void ScriptTestMethod() { var config = new TestConfig(); Commands commands = new Commands(config); config.ReadConfig(new string[] { "x-offset=10", "y-offset=50", "image=firstpic:data\\hint.png" }); Script.InitScript(commands); GImage img = new GImage("data\\testsource.png"); Script s = new Script("test"); // Грузим исходную картинку, на которой осуществляется поиск s.Parse("match firstpic"); { ScriptState st = new ScriptState(s, img); Run(s, st); Assert.IsTrue(st.Rectangle.Equals(new Rectangle(1238, 853, 196, 37)), "Не найден прямоугольник"); } s = new Script("test"); s.Parse("setmode first"); s.Parse("mode first"); { ScriptState st = new ScriptState(s, img); Run(s, st); Assert.IsTrue(st.Running, "Тест не продолжился"); } s.Parse("mode nfirst"); { ScriptState st = new ScriptState(s, img); Run(s, st); Assert.IsFalse(st.Running, "Тест продолжился ошибочно"); } }
public void TM() { var config = new TestConfig(); Commands commands = new Commands(config); config.ReadConfig(new string[] { "x-offset=10", "y-offset=50", }); Script.InitScript(commands); var img = new GImage(@"data\leofield.jpg"); Script s = new Script("test"); // Грузим исходную картинку, на которой осуществляется поиск s.Parse("detectfield"); s.Parse("fielddetected"); s.Parse("fieldcells"); { ScriptState st = new ScriptState(s, img); Run(s, st); StringBuilder sb = new StringBuilder(1024); for (var y = 0; y < ScriptState.FieldSize.Height; ++y) { for (var x = 0; x < ScriptState.FieldSize.Width; ++x) { var c = st[x, y]; var t = c.NotOpened ? '_' : c.Flag ? 'P' : c.Empty ? ' ' : (char)((byte)'0' + c.Number); sb.Append(t); sb.Append(' '); } sb.Append("\n"); } File.WriteAllText("out.txt", sb.ToString()); } }
public void DetectField() { var config = new TestConfig(); Commands commands = new Commands(config); config.ReadConfig(new string[] { "x-offset=10", "y-offset=50", }); Script.InitScript(commands); GImage img = new GImage("data\\fullfield.png"); Script s = new Script("test"); // Грузим исходную картинку, на которой осуществляется поиск s.Parse("detectfield"); s.Parse("fielddetected"); var nimg = new GImage("data\\nofield.png"); { ScriptState st = new ScriptState(s, nimg); Run(s, st); Assert.IsFalse(st.Running, "Лишнее поле нашлось"); } { ScriptState st = new ScriptState(s, img); Run(s, st); Assert.IsTrue(st.Running, "Поле не нашлось"); } }
public void FlashDetectTest() { var config = new TestConfig(); Commands commands = new Commands(config); config.ReadConfig(new string[] { "max-width=1000", "max-height=800" }); var img = new Bitmap("data\\nofield.png"); GImage.FindFlash(config, true, true, img); var r = new GImage(img); r.Draw(new Rectangle(config.xOffset, config.yOffset, config.maxWidth, config.maxHeight), new Gray(128), 2); //r.Save("0.bmp"); Assert.AreEqual(832, config.xOffset, "Detect X"); Assert.AreEqual(130, config.yOffset, "Detect Y"); }
/// <summary> /// Инициализация скриптового движка /// </summary> /// <param name="commands">Ссылка на список команд</param> public static void InitScript(Commands commands) { commandList = commands; }
/// <summary> /// Загрузить скрипты из файла /// </summary> /// <param name="cfg">Ссылка на объект конфигурации</param> /// <param name="commands">Ссылка на список команд</param> /// <returns>Список скриптов</returns> public static Script[] LoadScript(Config cfg, Commands commands) { InitScript(commands); var scripts = new List<Script>(); var a = System.IO.File.ReadAllText(@"mine.script").Split('\n'); Script current = null; foreach (var s in a) { if (!string.IsNullOrWhiteSpace(s)) { var st = s.Trim(); if (!(st.StartsWith("#") || st.StartsWith("//"))) { // Начало блока скрипта с переменной if (st.StartsWith("@")) { var p = st.IndexOf(':'); if (p < 0) Program.log.Error("Script name definition error {0}", s); else { var sn = st.Substring(1, p - 1).Trim(); if (!scripts.Exists(m => m.Name == sn)) { current = new Script(sn); current.Parse(st.Substring(p + 1)); scripts.Add(current); } else { Program.log.Error("Duplicate script {0}", s); } } } else if (current == null) { // До первого скрипта - блок глобальных параметров cfg.ReadConfig(st); } else // После заголовка скрипта всё относится к нему current.Parse(s); } } } return scripts.ToArray(); }
public MainForm() { InitializeComponent(); kmine.WindowTarget.RegisterWindow(this); commands = new Commands(config); }