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++; } } }
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}"); } }
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}"); }