// add a ship to gameboard private Ship PlaceShip(int length, string type) { int bowX = rnd.Next(10); int bowY = rnd.Next(10); int direction = rnd.Next(1, 5); bool validBow = board.FreeSpace(bowX, bowY); int stern; int sternX = -1; int sternY = -1; if (validBow == false) { while (validBow == false) { bowX = rnd.Next(10); bowY = rnd.Next(10); direction = rnd.Next(1, 5); validBow = board.FreeSpace(bowX, bowY); } } if (validBow == true) { switch (direction) { case 1: // stern is north of the bow stern = (bowY - length + 1); if (stern >= 0) { for (int i = stern; i <= bowY; i++) { if (board.FreeSpace(bowX, i) == false) { goto case 2; } else { sternX = bowX; sternY = stern; break; } } break; } else { goto case 2; } case 2: // stern is east of the bow stern = (bowX + length - 1); if (stern <= 9) { for (int i = bowX; i <= stern; i++) { if (board.FreeSpace(i, bowY) == false) { goto case 3; } else { sternX = stern; sternY = bowY; break; } } break; } else { goto case 3; } case 3: // stern is south of the bow stern = (bowY + length - 1); if (stern <= 9) { for (int i = bowY; i <= stern; i++) { if (board.FreeSpace(bowX, i) == false) { goto case 4; } else { sternX = bowX; sternY = stern; break; } } break; } else { goto case 4; } case 4: // stern is west of the bow stern = (bowX - length + 1); if (stern >= 0) { for (int i = stern; stern <= bowX; i++) { if (board.FreeSpace(i, bowY) == false) { goto default; } else { sternX = stern; sternY = bowY; break; } } break; } else { goto default; } default: if (direction != 1) { goto case 1; } else { sternX = 0; sternY = 0; Console.WriteLine("bow position failed to find valid positioning"); break; } } } Ship temp = new Ship(length, bowX, bowY, sternX, sternY, type); board.AddShipIcon(bowX, bowY, sternX, sternY, temp); return(temp); }