public LIList <Message> GetVisibleMessages(Element c) { LIList <Message> res_messages = new LIList <Message>(); LinkedListNode <Message> messageNode; if (c is Ant) { messageNode = Map.GetTile(c.Position).messages.First; while (messageNode != null) { res_messages.AddLast(messageNode.Value); messageNode = messageNode.Next; } } else if (c is Rain) { for (int i = 0; i < AntHillConfig.rainWidth; i++) { for (int j = 0; j < AntHillConfig.rainWidth; j++) { messageNode = Map.GetTile(c.Position.X + i, c.Position.Y + j).messages.First; while (messageNode != null) { if (!res_messages.Contains(messageNode.Value)) { res_messages.AddLast(messageNode.Value); } messageNode = messageNode.Next; } } } } return(res_messages); }
public void CitizenTest() { Worker worker1 = new Worker(new Position(2, 2)); Worker worker2 = new Worker(new Position(3, 3)); XmlReaderWriter reader = new XmlReaderWriter(); reader.ReadMe("..\\..\\tests\\test-RAIN-anthill.xml"); AHGraphics.Init(); /*test AddSet() function*/ Simulation tmp_isw = new Simulation(new Map(AntHillConfig.mapColCount, AntHillConfig.mapRowCount, AntHillConfig.tiles)); //Message message = new Message(new Position(2, 2), MessageType.FoodLocalization, new Position(0,0)); tmp_isw.CreateMessage(new Position(2, 2), MessageType.FoodLocalization, new Position(0, 0)); tmp_isw.ants.AddLast(worker1); tmp_isw.ants.AddLast(worker2); //tmp_isw.messages.AddLast(message); //worker1.AddToSet(message,2); //worker1.SpreadSignal(tmp_isw); LIList <Message> list = tmp_isw.GetVisibleMessages(worker2); bool check = list.Count != 0; Assert.IsTrue(check, "problem with adding messages"); /*test GetNearestFood()*/ LIList <Food> foodList = new LIList <Food>(); foodList.AddLast(new Food(new Position(4, 4), 1)); foodList.AddLast(new Food(new Position(8, 8), 3)); foodList.AddLast(new Food(new Position(2, 3), 3)); foodList.AddLast(new Food(new Position(1, 1), 3)); Food nFood = worker1.testGetNearestFood(foodList); Assert.AreEqual(new Position(2, 3), nFood.Position, "finding nearest food problem"); /*test ReadMessage()*/ Worker worker3 = new Worker(new Position(4, 4)); worker3.AddToSet(new Message(new Position(5, 5), MessageType.FoodLocalization, new Position(0, 0)), 1); worker3.AddToSet(new Message(new Position(1, 1), MessageType.FoodLocalization, new Position(0, 0)), 3); worker3.AddToSet(new Message(new Position(3, 3), MessageType.FoodLocalization, new Position(0, 0)), 2); Message nMessage = worker3.testReadMessage(MessageType.FoodLocalization); Assert.AreEqual(new Position(1, 1), nMessage.Position, "ReadMessage function problem in Citizen"); }
public LIList <Food> GetVisibleFood(Element c) { LIList <Food> res_food = new LIList <Food>(); LinkedListNode <Food> foodNode = food.First; if (c is Spider || c is Ant) //same radius { int radius2 = AntHillConfig.antSightRadius * AntHillConfig.antSightRadius; while (foodNode != null) { int dx = foodNode.Value.Position.X - c.Position.X; int dy = foodNode.Value.Position.Y - c.Position.Y; if (dx * dx + dy * dy <= radius2) { if (_map.CheckVisibility(c.Position, foodNode.Value.Position)) { res_food.AddLast(foodNode.Value); } } foodNode = foodNode.Next; } } else if (c is Rain) { while (foodNode != null) { if (_map.GetTile(foodNode.Value.Position).TileType == TileType.Outdoor && ((Rain)c).IsRainOver(foodNode.Value.Position)) { res_food.AddLast(foodNode.Value); } foodNode = foodNode.Next; } } return(res_food); }
public LIList <Spider> GetVisibleSpiders(Element c) { LIList <Spider> res_spiders = new LIList <Spider>(); LinkedListNode <Spider> spiderNode = spiders.First; if (c is Spider || c is Ant) //same radius { int radius2 = AntHillConfig.antSightRadius * AntHillConfig.antSightRadius; while (spiderNode != null) { int dx = spiderNode.Value.Position.X - c.Position.X; int dy = spiderNode.Value.Position.Y - c.Position.Y; if (dx * dx + dy * dy <= radius2) { if (_map.CheckVisibility(c.Position, spiderNode.Value.Position)) { res_spiders.AddLast(spiderNode.Value); } } spiderNode = spiderNode.Next; } } else if (c is Rain) { while (spiderNode != null) { if (_map.GetTile(spiderNode.Value.Position).TileType == TileType.Outdoor && ((Rain)c).IsRainOver(spiderNode.Value.Position)) { res_spiders.AddLast(spiderNode.Value); } spiderNode = spiderNode.Next; } } return(res_spiders); }
public bool CreateEgg(Position pos) { eggs.AddLast(new Egg(pos)); return(true); }
public bool CreateWarrior(Position pos) { ants.AddLast(new Warrior(pos)); return(true); }
public bool CreateSpider(Position point) { spiders.AddLast(new Spider(point)); return(true); }
public bool CreateFood(Position point, int quantity) { food.AddLast(new Food(point, quantity)); return(true); }
public Map(int w, int h, Tile[,] tiles) { this._width = w; this._height = h; this._tiles = new Tile[w, h]; for (int x = 0; x < w; x++) { for (int y = 0; y < h; y++) { this._tiles[x, y] = new Tile(tiles[x, y].TileType, tiles[x, y].Position); } } _messagesCount = new MessageCount[_width, _height]; LIList <Tile> indoorTilesTemp = new LIList <Tile>(), wallTilesTemp = new LIList <Tile>(), outdoorTilesTemp = new LIList <Tile>(); Tile t; for (int y = 0; y < this._height; y++) { for (int x = 0; x < this._width; x++) { switch ((t = tiles[x, y]).TileType) { case TileType.Outdoor: outdoorTilesTemp.AddLast(t); break; case TileType.Indoor: indoorTilesTemp.AddLast(t); break; case TileType.Wall: wallTilesTemp.AddLast(t); break; } } } if (outdoorTilesTemp.Count == 0) { throw new Exception(Properties.Resources.noOutdoorTilesError); } if (indoorTilesTemp.Count == 0) { throw new Exception(Properties.Resources.noIndoorTilesError); } _indoorTiles = new Tile[indoorTilesTemp.Count + wallTilesTemp.Count]; _wallTiles = new Tile[indoorTilesTemp.Count + wallTilesTemp.Count]; _outdoorTiles = new Tile[outdoorTilesTemp.Count]; _indoorTilesCount = indoorTilesTemp.Count; _wallTilesCount = wallTilesTemp.Count; _outdoorTilesCount = outdoorTilesTemp.Count; RewriteTiles(_indoorTiles, indoorTilesTemp); RewriteTiles(_outdoorTiles, outdoorTilesTemp); RewriteTiles(_wallTiles, wallTilesTemp); }
public void AddPointWithIntensity(Tile t, int intensity, Map map) { points.AddLast(new PointWithIntensity(t, intensity)); map.AddMessage(this.GetMessageType, t.Position); }