Last active
August 29, 2015 14:21
-
-
Save vsvld/cd43f2f55f5daf720576 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//FALSE = will place into computer sea | |
//TRUE = will place into user sea | |
public void PlaceAllShips(bool usersea) | |
{ | |
int i; | |
ArrayList ships = new ArrayList(); // для зберігання кораблів всіх кораблів, які треба поставити на дошку | |
// додаємо всі кораблі в список | |
for (i = 0; i < ShipConstants.TOTAL_BATTLESHIPS; i++) ships.Add(new BattleShip(0, 0, ShipDirection.Horizontal)); | |
for (i = 0; i < ShipConstants.TOTAL_CRUISERS; i++) ships.Add(new Cruiser(0, 0, ShipDirection.Horizontal)); | |
for (i = 0; i < ShipConstants.TOTAL_SUBMARINES; i++) ships.Add(new Submarine(0, 0, ShipDirection.Horizontal)); | |
for (i = 0; i < ShipConstants.TOTAL_ROWING_BOATS; i++) ships.Add(new Rowing_Boat(0, 0, ShipDirection.Horizontal)); | |
// для користувача просто додаємо кораблі зі списку | |
if (usersea) | |
{ | |
foreach (Ship ship in ships) | |
PlaceUserShip(ship); | |
} | |
// для комп’ютера передаємо весь список і номер початкового корабля | |
else | |
{ | |
PlaceComputerShip(ships, 0); | |
} | |
} | |
private bool PlaceComputerShip(ArrayList ships, int counter) | |
{ | |
Ship shnew; | |
ShipDirection direction; | |
int xpp, ypp; | |
ArrayList coords = new ArrayList(); | |
// не входимо, якщо вже всі кораблі додані | |
if (counter != ships.Count) | |
{ | |
Ship sh = (Ship)ships[counter]; // беремо наступний | |
bool failed = true; // чи не змогло при всіх комбінаціях розташувати корабель | |
do | |
{ | |
bool combNotFound = true; | |
// знаходимо комбінацію, яку ще не використовували для цього кроку | |
do | |
{ | |
direction = (ShipDirection)randomNum(0, 2); | |
xpp = randomNum(0, SeaConstants.SEA_SIZE); | |
ypp = randomNum(0, SeaConstants.SEA_SIZE); | |
Tuple<int, int, ShipDirection> tuple = new Tuple<int, int, ShipDirection>(xpp, ypp, direction); | |
// якщо такої комбінації не було | |
if (!coords.Contains(tuple)) | |
{ | |
combNotFound = false; | |
coords.Add(tuple); // додаємо комбінацію в список використаних | |
// створюємо новий корабель, щоб додати на дошку | |
shnew = new Ship(sh.shipType, xpp, ypp, sh.length, direction, 0, false, sh.blocks[0].printChar, sh.blocks[0].shipname); | |
// додаємо і якщо додали успішно | |
if (ComputerSea.AddShip(shnew)) | |
{ | |
// рекурсивно додаємо наступний і якщо все далі пройшло успішно, | |
// знімаємо мітку, щоб вийти з загального циклу | |
if (PlaceComputerShip(ships, ++counter)) failed = false; | |
else new EmptySea(xpp, ypp); // ця штука не працює, має бути щось типу ComputerSea.AddSea(new EmptySea(xpp, ypp);) | |
} | |
} | |
} while (combNotFound); | |
} while (failed); | |
} | |
return true; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment