示例#1
0
 public Boom(Boom obj) //voor deepcopy
 {
     this.xCoordinaat = obj.xCoordinaat;
     this.yCoordinaat = obj.yCoordinaat;
     this.id          = obj.id;
     this.apenInBoom  = obj.apenInBoom;
 }
示例#2
0
 public Log(Aap aap, Boom boom, TimeSpan elapsedTime, int seqNr)
 {
     Aap         = aap;
     Boom        = boom;
     ElapsedTime = elapsedTime;
     SeqNr       = seqNr;
 }
        private List <Boom> MaakBomen(Bitmap bitmap, int aantalBomen)
        {
            int         id    = 1;
            Random      r     = new Random();
            List <Boom> bomen = new List <Boom>();

            Graphics g   = Graphics.FromImage(bitmap);
            Pen      pen = new Pen(Color.Green, 1);

            for (int i = 0; i < aantalBomen; i++)
            {
                Boom boom = new Boom(id, r.Next(0, bitmap.Width), r.Next(0, bitmap.Height));
                if (!bomen.Contains(boom))
                {
                    bomen.Add(boom);
                    g.DrawCircle(pen, boom.X, boom.Y, 3);
                    id++;
                }
                else
                {
                    i--;
                }
            }
            return(bomen);
        }
        private void Draw(Bitmap bm)
        {
            Graphics g = Graphics.FromImage(bm);
            //bomen
            Pen pen = new Pen(Color.GreenYellow, 1);

            foreach (Boom boom in bos.bomen)
            {
                g.DrawEllipse(pen, boom.xCoordinaat * 20, boom.yCoordinaat * 20, 17, 17);
            }
            //path
            Random r = new Random();
            Color  kleurke;

            foreach (Aap aap in bos.log.ontsnapteApen)
            {
                kleurke = Color.FromArgb(r.Next(1, 256), r.Next(1, 256), r.Next(1, 256));
                for (int i = 0; i < aap.bezochteBomen.Count - 1; i++)
                {
                    pen.Color = kleurke;
                    Boom currentBoom = aap.bezochteBomen[i];
                    Boom nextBoom    = aap.bezochteBomen[i + 1];
                    g.DrawLine(pen, currentBoom.xCoordinaat * 20 + 10, currentBoom.yCoordinaat * 20 + 10, nextBoom.xCoordinaat * 20 + 10, nextBoom.yCoordinaat * 20 + 10);
                }
                Boom eersteBoom = aap.bezochteBomen[0];
                g.FillEllipse(new SolidBrush(kleurke), eersteBoom.xCoordinaat * 20, eersteBoom.yCoordinaat * 20, 17, 17);
            }
        }
示例#5
0
        private double LengteTussenBomen(Boom boom1, Boom boom2)
        {
            int    verschilXWaarden = boom1.xCoordinaat - boom2.xCoordinaat;
            int    verschilYWaarden = boom1.yCoordinaat - boom2.yCoordinaat;
            double lengte           = Math.Sqrt(Math.Pow(verschilXWaarden, 2) + Math.Pow(verschilYWaarden, 2));

            return(Math.Abs(lengte));
        }
示例#6
0
 public Aap(Boom startBoom, int id, string naam)
 {
     bezochteBomen = new List <Boom>
     {
         startBoom
     };
     this.id   = id;
     this.naam = naam;
 }
 private double DistanceToBorder(Boom boom, Bitmap bitmap)
 {
     return((new SortedSet <double>()
     {
         bitmap.Width - boom.Y,
         bitmap.Height - boom.X,
         boom.Y - 0,
         boom.X - 0
     }).Min);
 }
示例#8
0
        private double LengteTussenAapEnRand(Aap aap)
        {
            Boom   currentboom = aap.bezochteBomen.Last();
            double lengte      = (new List <double>()
            {
                yMaxWaarde - currentboom.yCoordinaat,
                xMaxWaarde - currentboom.xCoordinaat,
                currentboom.yCoordinaat - yMinWaarde,
                currentboom.xCoordinaat - xMinWaarde
            }).Min();

            return(lengte);
        }
        public async Task Escape(Bos bos, Stopwatch stopwatch)
        {
            Console.WriteLine($"start escape wood {bos.Id}");
            DatabaseManager dbm   = new DatabaseManager(@"Data Source=LAPTOP-1U6AQSEQ\SQLEXPRESS;Initial Catalog=EscapeFromTheWoods;Integrated Security=True");
            List <Task>     tasks = new List <Task>();

            tasks.Add(Task.Run(() => dbm.AddWoodRecords(bos)));
            Random rnd = new Random();

            for (int i = 0; i < bos.Apen.Count; i++)
            {
                Console.WriteLine($"{bos.Apen[i].Naam} starts escape");
                Aap aap = bos.Apen[i];
                stopwatch.Start();
                Boom beginboom = bos.Bomen[rnd.Next(1, bos.Bomen.Count - 1)];
                bos.Graphics.FillCircle(new SolidBrush(aap.Color), beginboom.X, beginboom.Y, 3);

                aap.TouchedBomen.Add(beginboom);
                int seqNr = 1;
                while (beginboom != null)
                {
                    Log log = new Log(aap, beginboom, stopwatch.Elapsed, seqNr);
                    aap.Logs.Add(log);

                    Boom nieuweBoom = bos.Bomen.OrderBy(boom => BerekenAfstand(boom, beginboom)).Except(aap.TouchedBomen).First();
                    if (DistanceToBorder(beginboom, bos.Bitmap) > BerekenAfstand(beginboom, nieuweBoom))
                    {
                        bos.Graphics.DrawLine(aap.Pen, beginboom.X, beginboom.Y, nieuweBoom.X, nieuweBoom.Y);
                        aap.TouchedBomen.Add(nieuweBoom);
                        beginboom = nieuweBoom;
                    }
                    else
                    {
                        beginboom = null;
                    }
                    Console.WriteLine(log.ToString());
                    tasks.Add(Task.Run(() => dbm.AddLogs(bos.Id, log)));
                    tasks.Add(Task.Run(() => dbm.AddMonkeyRecords(bos.Id, log)));
                    seqNr++;
                }
                Console.WriteLine($"{bos.Apen[i].Naam} has escaped");
            }
            Writer writer = new Writer();

            tasks.Add(Task.Run(() => writer.WriteLogs(bos)));
            Task.WaitAll(tasks.ToArray());
            bos.Bitmap.Save(Path.Combine(@"C:\Users\davy\Documents\data\EscapeFromTheWoods", $"{bos.Id}_Escapethewoods.Jpeg"), ImageFormat.Jpeg);
            Console.WriteLine($"Stop escape wood {bos.Id}");
        }
示例#10
0
        public string getSprongenLog()
        {
            StringBuilder sprongenLog    = new StringBuilder();
            int           meestesprongen = ontsnapteApen.Max(a => a.bezochteBomen.Count);

            for (int i = 0; i < meestesprongen; i++)
            {
                foreach (Aap aap in ontsnapteApen)
                {
                    if (i < aap.bezochteBomen.Count)
                    {
                        Boom currentBoom = aap.bezochteBomen[i];
                        sprongenLog.Append($"{aap.naam} is in tree {currentBoom.id} at ({currentBoom.xCoordinaat},{currentBoom.yCoordinaat})\n");
                    }
                }
            }
            return(sprongenLog.ToString());
        }
示例#11
0
        public void SpringAap(Aap aap)
        {
            Tuple <double, Boom> result = null;
            double lengteRand           = 0;
            Task   zoekBoom             = Task.Run(() => { result = ZoekDichtsteBoom(aap); });
            Task   lengte = Task.Run(() => { lengteRand = LengteTussenAapEnRand(aap); });

            Task.WaitAll(zoekBoom, lengte);
            double dichtsteLengte = result.Item1;
            Boom   dichtsteBoom   = result.Item2;

            if (dichtsteLengte < lengteRand)
            {
                aap.Spring(dichtsteBoom);
                SpringAap(aap);
            }
            else
            {
                VerwijderAap(aap);
            }
        }
示例#12
0
        /// <summary>
        /// Initialiseerd bos zonder apen
        /// indien begrenzin maar 2 waardes heeft : xmax,ymax
        /// </summary>
        /// <param name="begrenzing">xmin,xmax,ymin,ymax</param>
        /// <param name="aantalBomen">generate aantal bomen</param>
        public Bos(List <int> begrenzing, int id, int aantalBomen)
        {
            log     = new Log();
            this.id = id;
            bomen   = new List <Boom>();
            apen    = new List <Aap>();
            if (begrenzing.Count > 2)
            {
                this.xMinWaarde = begrenzing[0];
                this.xMaxWaarde = begrenzing[1];
                this.yMinWaarde = begrenzing[2];
                this.yMaxWaarde = begrenzing[3];
            }
            else
            {
                this.xMaxWaarde = begrenzing[0];
                this.yMaxWaarde = begrenzing[1];
            }
            //Initialiseer random bomen
            Random r = new Random();

            for (int i = 0; i < aantalBomen; i++)
            {
                int  xCoordinaat = r.Next(xMinWaarde, xMaxWaarde);
                int  yCoordinaat = r.Next(yMinWaarde, yMaxWaarde);
                Boom randomBoom  = new Boom(xCoordinaat, yCoordinaat, i);
                if (!bomen.Contains(randomBoom))
                {
                    bomen.Add(randomBoom);
                }
                else
                {
                    i--;
                }
            }
        }
示例#13
0
        private Tuple <double, Boom> ZoekDichtsteBoom(Aap aap)
        {
            Console.WriteLine($"start calculating escape route for wood: {id}, monkey: {aap.naam}");
            Boom   huidigeBoom  = aap.bezochteBomen.Last();
            double dichtste     = double.MaxValue;
            Boom   dichtsteBoom = null;

            foreach (Boom boom in bomen)
            {
                if (!aap.bezochteBomen.Contains(boom))
                {
                    double lengte = LengteTussenBomen(boom, huidigeBoom);
                    if (lengte != 0)
                    {
                        if (lengte < dichtste)
                        {
                            dichtste     = lengte;
                            dichtsteBoom = boom;
                        }
                    }
                }
            }
            return(new Tuple <double, Boom>(dichtste, dichtsteBoom));
        }
        private double BerekenAfstand(Boom b1, Boom b2)
        {
            double afstand = Math.Sqrt(Math.Pow(b1.X - b2.X, 2) + Math.Pow(b1.Y - b2.Y, 2));

            return(afstand);
        }
示例#15
0
        private static DataSet GetDataTables(Bos bos)
        {
            Console.WriteLine("getting info");
            //WoodRecords
            DataTable woodRecords = new DataTable("WoodRecords");

            woodRecords.Columns.Add("recordId", typeof(int));
            woodRecords.Columns.Add("woodID", typeof(int));
            woodRecords.Columns.Add("treeID", typeof(int));
            woodRecords.Columns.Add("x", typeof(int));
            woodRecords.Columns.Add("y", typeof(int));
            woodRecords.PrimaryKey = new DataColumn[] { woodRecords.Columns["recordId"] };
            //MonkeyRecords
            DataTable monkeyRecords = new DataTable("MonkeyRecords");

            monkeyRecords.Columns.Add("recordID", typeof(int));
            monkeyRecords.Columns.Add("monkeyID", typeof(int));
            monkeyRecords.Columns.Add("monkeyName", typeof(string));
            monkeyRecords.Columns.Add("woodID", typeof(int));
            monkeyRecords.Columns.Add("seqnr", typeof(int));
            monkeyRecords.Columns.Add("treeID", typeof(int));
            monkeyRecords.Columns.Add("x", typeof(int));
            monkeyRecords.Columns.Add("y", typeof(int));
            monkeyRecords.PrimaryKey = new DataColumn[] { monkeyRecords.Columns["recordID"] };
            //Logs
            DataTable logs = new DataTable("Logs");

            logs.Columns.Add("Id", typeof(int));
            logs.Columns.Add("woodID", typeof(int));
            logs.Columns.Add("monkeyID", typeof(int));
            logs.Columns.Add("message", typeof(string));
            logs.PrimaryKey = new DataColumn[] { logs.Columns["Id"] };
            #region datatables aanvullen
            //WoodRecords
            int bosId = bos.id;
            for (int i = 0; i < bos.bomen.Count; i++)
            {
                Boom currentBoom = bos.bomen[i];
                woodRecords.Rows.Add(woodRecordID, bosId, currentBoom.id, currentBoom.xCoordinaat, currentBoom.yCoordinaat);
                woodRecordID++;
            }
            //MonkeyRecords
            for (int i = 0; i < bos.log.ontsnapteApen.Count; i++)
            {
                Aap currentAap = bos.log.ontsnapteApen[i];
                for (int seqnr = 0; seqnr < currentAap.bezochteBomen.Count; seqnr++)
                {
                    Boom currentBoom = currentAap.bezochteBomen[seqnr];
                    monkeyRecords.Rows.Add(monkeyRecordID, currentAap.id, currentAap.naam, bosId, seqnr, currentBoom.id, currentBoom.xCoordinaat, currentBoom.yCoordinaat);
                    monkeyRecordID++;
                    //Logs
                    logs.Rows.Add(logID, bosId, currentAap.id, $"{currentAap.naam} is now in tree {currentBoom.id} at location ({currentBoom.xCoordinaat},{currentBoom.yCoordinaat})");
                    logID++;
                }
            }
            #endregion
            //create DataSet => kan gebruikt worden om xml mee te maken
            DataSet set = new DataSet("EscapeFromTheWoods");
            set.Tables.Add(woodRecords);
            set.Tables.Add(monkeyRecords);
            set.Tables.Add(logs);
            return(set);
        }
示例#16
0
 public void Spring(Boom dichtsteBoom)
 {
     Console.WriteLine($"aap : {naam} is van {bezochteBomen.Last().xCoordinaat} , {bezochteBomen.Last().yCoordinaat} naar {dichtsteBoom.xCoordinaat}, {dichtsteBoom.yCoordinaat} Gesprongen");
     bezochteBomen.Add(dichtsteBoom);
     dichtsteBoom.apenInBoom.Remove(this);
 }