예제 #1
0
        public Bos(int xmax, int ymax, int aantalBomen)
        {
            if (aantalBomen > (xmax - 2) * (ymax - 2))
            {
                throw new ArgumentException($"Too many trees!!");
            }
            Xmax  = xmax;
            Ymax  = ymax;
            BosId = IDGenerator.GenerateBosId();

            Random random = new Random();

            Bomen = new List <Boom>(aantalBomen);

            int bomenTeller = 0;

            while (bomenTeller < aantalBomen)
            {
                int x = random.Next(1, Xmax);
                int y = random.Next(1, Ymax);
                //Is het hier logisch om nutteloze objecten aan te maken om te kunnen vergelijken? Ik kan ook een dictionary aanmaken die voor elke x de gecombineerde y's bijhoudt!!
                Boom nieuweBoom = new Boom(x, y);

                //Er mogen geen 2 bomen op dezelfde plaats staan. Contains werkt met equals en die is overschreven.
                if (!Bomen.Contains(nieuweBoom))
                {
                    Bomen.Add(nieuweBoom);
                    bomenTeller++;
                }
            }
        }
예제 #2
0
 public override bool Equals(Object obj)
 {
     if (obj == null)
     {
         return(false);
     }
     else
     {
         Boom boom = (Boom)obj;
         return((X == boom.X) && (Y == boom.Y));
     }
 }
        public async Task VoegMonkeyRecordToe(Bos bos)
        {
            Console.WriteLine($"start toevoegen monkeyrecords voor bos {bos.BosId}");
            SqlConnection connection  = getConnection();
            string        queryMonkey = "INSERT INTO dbo.MonkeyRecords(monkeyId, monkeyName, woodId, seqnr, treeId, x, y) VALUES(@monkeyId, @monkeyName, @woodId, @seqnr, @treeId, @x, @y)";

            using (SqlCommand command = connection.CreateCommand())
            {
                connection.Open();
                try
                {
                    command.Parameters.Add(new SqlParameter("@monkeyId", SqlDbType.Int));
                    command.Parameters.Add(new SqlParameter("@monkeyName", SqlDbType.NVarChar));
                    command.Parameters.Add(new SqlParameter("@woodId", SqlDbType.Int));
                    command.Parameters.Add(new SqlParameter("@seqnr", SqlDbType.Int));
                    command.Parameters.Add(new SqlParameter("@treeId", SqlDbType.Int));
                    command.Parameters.Add(new SqlParameter("@x", SqlDbType.Int));
                    command.Parameters.Add(new SqlParameter("@y", SqlDbType.Int));
                    command.CommandText = queryMonkey;

                    for (int aapTeller = 0; aapTeller < bos.Apen.Count; aapTeller++)
                    {
                        Aap aap = bos.Apen[aapTeller];
                        for (int boomTeller = 0; boomTeller < aap.bezochteBomen.Count; boomTeller++)
                        {
                            Boom boom = aap.bezochteBomen[boomTeller];
                            command.Parameters["@monkeyId"].Value   = aap.Id;
                            command.Parameters["@monkeyName"].Value = aap.Naam;
                            command.Parameters["@woodId"].Value     = bos.BosId;
                            command.Parameters["@seqnr"].Value      = boomTeller;
                            command.Parameters["@treeId"].Value     = boom.Id;
                            command.Parameters["@x"].Value          = boom.X;
                            command.Parameters["@y"].Value          = boom.Y;
                            command.ExecuteNonQuery();
                        }
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex);
                }
                finally
                {
                    connection.Close();
                }
                Console.WriteLine($"stop toevoegen monkeyrecords voor bos {bos.BosId}");
            }
        }
예제 #4
0
        public async Task StartOntsnappingAap(Aap aap)
        {
            Console.WriteLine($"{aap.Naam} start ontsnapping");
            bool   ontsnapt     = false;
            Boom   huidigeBoom  = aap.bezochteBomen[0];
            Boom   dichtsteBoom = null;
            double minimum      = Xmax * Ymax;

            while (!ontsnapt)
            {
                //zoeken naar dichtsbijzijnde boom
                //Alle bomen overlopen, minimum vervangen door nieuw minimum.
                for (int teller = 0; teller < Bomen.Count; teller++)
                {
                    if (!aap.bezochteBomen.Contains(Bomen[teller]))
                    {
                        double afstandTotBoom = Math.Sqrt(Math.Pow(huidigeBoom.X - Bomen[teller].X, 2) + Math.Pow(huidigeBoom.Y - Bomen[teller].Y, 2));
                        if (afstandTotBoom < minimum)
                        {
                            minimum      = afstandTotBoom;
                            dichtsteBoom = Bomen[teller];
                        }
                        //Als de boom niet dichter staat dan het minimum wordt hij geskipped
                    }
                    //Als de aap wel al op deze boom is geweest wordt deze boom geskipped!
                }

                double afstandTotRand = (new List <double>()
                {
                    Ymax - huidigeBoom.Y, Xmax - huidigeBoom.X, huidigeBoom.Y - 0, huidigeBoom.X - 0
                }).Min();
                if (afstandTotRand < minimum)
                {
                    ontsnapt = true;
                }
                else
                {
                    huidigeBoom = dichtsteBoom;
                    aap.bezochteBomen.Add(huidigeBoom);
                    minimum = Xmax * Ymax;
                }
            }
            Console.WriteLine($"{aap.Naam} is ontsnapt");
        }
        public async Task voegLogsToe(Bos bos)
        {
            Console.WriteLine($"start toevoegen logs voor bos {bos.BosId}");
            SqlConnection connection = getConnection();
            string        queryLogs  = "INSERT INTO dbo.logs(woodId, monkeyId, message) VALUES(@woodId, @monkeyId, @message)";

            using (SqlCommand command = connection.CreateCommand())
            {
                connection.Open();
                try
                {
                    command.Parameters.Add(new SqlParameter("@woodId", SqlDbType.Int));
                    command.Parameters.Add(new SqlParameter("@monkeyId", SqlDbType.Int));
                    command.Parameters.Add(new SqlParameter("@message", SqlDbType.NVarChar));
                    command.CommandText = queryLogs;
                    for (int aapTeller = 0; aapTeller < bos.Apen.Count; aapTeller++)
                    {
                        Aap aap = bos.Apen[aapTeller];
                        for (int boomTeller = 0; boomTeller < aap.bezochteBomen.Count; boomTeller++)
                        {
                            Boom boom = aap.bezochteBomen[boomTeller];
                            command.Parameters["@monkeyId"].Value = aap.Id;
                            command.Parameters["@woodId"].Value   = bos.BosId;
                            command.Parameters["@message"].Value  = $"{aap.Naam} is now in tree {boom.Id} at location ({boom.X},{boom.Y})";
                            command.ExecuteNonQuery();
                        }
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex);
                }
                finally
                {
                    connection.Close();
                }
            }
            Console.WriteLine($"stop toevoegen logs voor bos {bos.BosId}");
        }