// IBattleship::GetShot public Point GetShot() { Point p = new Point(); if (attackVector.Count() > 0) { p = ExtendShot(); return(p); } // Contemplate a shot at every-single point, and measure how effective it would be. Board potential = new Board(size); for (p.Y = 0; p.Y < size.Height; ++p.Y) { for (p.X = 0; p.X < size.Width; ++p.X) { if (shotBoard.ShotAt(p)) { potential[p] = 0; continue; } foreach (HunterBoard b in targetBoards) { potential[p] += b.GetWeightAt(p); } } } // Okay, we have the shot potential of the board. // Lets pick a weighted-random spot. Point shot; shot = potential.GetWeightedRandom(rand.NextDouble()); shotBoard[shot] = Shot.Unresolved; return(shot); }