public bool ПоставитьСлучайно(int номер) { int длина = длина_кораблей[номер]; Program.Точка нос; Program.Точка шаг; if (rand.Next(2) == 0) { нос = new Program.Точка(rand.Next(0, азмер_моря.x - длина + 1), rand.Next(0, азмер_моря.y)); шаг = new Program.Точка(1, 0); } else { нос = new Program.Точка(rand.Next(0, азмер_моря.x), rand.Next(0, азмер_моря.y - длина + 1)); шаг = new Program.Точка(0, 1); } Program.Точка[] палуба = new Program.Точка[длина]; for (int j = 0; j < длина; j++) { палуба[j] = new Program.Точка(нос.x + j * шаг.x, нос.y + j * шаг.y); ОчиститьОбласть(палуба[j]); } ПоставитьКорабль(номер, палуба); return(true); }
public Program.Статус Fight(out Program.Точка target) { if (modeDanger) { target = FightDanger(); } else { target = FightShapes(); } Program.Статус status = sea.Выстрел(target); switch (status) { case Program.Статус.Мимо: map[target.x, target.y] = 1; break; case Program.Статус.анил: map[target.x, target.y] = 2; modeDanger = true; break; case Program.Статус.Убил: case Program.Статус.Победил: map[target.x, target.y] = 2; int len = MarkKilledShip(target); shipLenght[len]--; modeDanger = false; break; } return(status); }
private void CheckShipDirection(Program.Точка ship, int sx, int sy, int lenght) { if (Map(ship.x, ship.y) != 2) { return; } if (Map(ship.x - sx, ship.y - sy) == 2) { return; } if (sx == 0) { if (Map(ship.x - 1, ship.y) == 2) { return; } if (Map(ship.x + 1, ship.y) == 2) { return; } } if (sy == 0) { if (Map(ship.x, ship.y - 1) == 2) { return; } if (Map(ship.x, ship.y + 1) == 2) { return; } } int unknown = 0; int unknown_j = 0; for (int j = 1; j < lenght; j++) { int p = Map(ship.x + j * sx, ship.y + j * sy); if (p == 1) { return; } if (p == -1) { return; } if (p == 0) { unknown++; if (unknown == 1) { unknown_j = j; } } } if (unknown >= 1) { put[ship.x + unknown_j * sx, ship.y + unknown_j * sy]++; } }
private int MarkKilledShip(Program.Точка place) { if (!sea.НаМоре(place)) { return(0); } if (map[place.x, place.y] == 2) { map[place.x, place.y] = 3; int x, y; for (x = place.x - 1; x <= place.x + 1; x++) { for (y = place.y - 1; y <= place.y + 1; y++) { if (Map(x, y) == 0) { map[x, y] = 1; } } } int lenght = 1; lenght += MarkKilledShip(new Program.Точка(place.x - 1, place.y)); lenght += MarkKilledShip(new Program.Точка(place.x + 1, place.y)); lenght += MarkKilledShip(new Program.Точка(place.x, place.y - 1)); lenght += MarkKilledShip(new Program.Точка(place.x, place.y + 1)); return(lenght); } return(0); }
private Program.Точка FightDanger() { InitPut(); for (int x = 0; x < Море.азмер_моря.x; x++) { for (int y = 0; y < Море.азмер_моря.y; y++) { if (map[x, y] == 2) { bool longer = false; Program.Точка ship = new Program.Точка(x, y); for (int lenght = shipLenght.Length - 1; lenght >= 2; lenght--) { if (longer || shipLenght[lenght] > 0) { CheckShipDirection(ship, -1, 0, lenght); CheckShipDirection(ship, 1, 0, lenght); CheckShipDirection(ship, 0, -1, lenght); CheckShipDirection(ship, 0, 1, lenght); longer = true; } } } } } return(RandomPut()); }
private void ShowCompShip(Program.Точка place, int nr) { if (mode == Mode.EditShips) { GridComp.ShowShip(place, nr); } }
public int КартаКораблей(Program.Точка t) { if (НаМоре(t)) { return(Карта_кораблей[t.x, t.y]); } return(-1); }
public void ShowShip(Program.Точка place, int nr) { if (nr < 0) { grid[place.x, place.y].Style.BackColor = color_back; } else { grid[place.x, place.y].Style.BackColor = color_ship[nr]; } }
protected void ОчиститьОбласть(Program.Точка t) { Program.Точка p; for (p.x = t.x - 1; p.x <= t.x + 1; p.x++) { for (p.y = t.y - 1; p.y <= t.y + 1; p.y++) { ОчиститьТочку(p); } } }
public void ОчиститьТочку(Program.Точка t) { if (!НаМоре(t)) { return; } if (Карта_кораблей[t.x, t.y] == -1) { return; } УбратьКорабль(Карта_кораблей[t.x, t.y]); }
public Program.Точка[] GetSelectedCells() { if (grid.SelectedCells.Count == 0) { return(null); } Program.Точка[] ship = new Program.Точка[grid.SelectedCells.Count]; int j = 0; foreach (DataGridViewCell cell in grid.SelectedCells) { ship[j++] = new Program.Точка(cell.ColumnIndex, cell.RowIndex); } grid.ClearSelection(); return(ship); }
public bool ПоставитьПоТочкам(Program.Точка[] палуба) { int длина = палуба.Length; int номер = НайтиНомер(длина); if (номер < 0) { return(false); } Program.Точка лв = палуба[0]; Program.Точка пн = палуба[0]; for (int j = 0; j < длина; j++) { лв.x = Math.Min(лв.x, палуба[j].x); лв.y = Math.Min(лв.y, палуба[j].y); пн.x = Math.Max(пн.x, палуба[j].x); пн.y = Math.Max(пн.y, палуба[j].y); } if (лв.x == пн.x) { if (пн.y - лв.y + 1 != длина) { return(false); } } else if (лв.y == пн.y) { if (пн.x - лв.x + 1 != длина) { return(false); } } else { return(false); } for (int j = 0; j < длина; j++) { ОчиститьОбласть(палуба[j]); } ПоставитьКорабль(номер, палуба); return(true); }
public void ShowFight(Program.Точка place, Program.Статус status) { grid[place.x, place.y].Style.BackColor = color_fight[(int)status]; }
private void ShowCompFight(Program.Точка place, Program.Статус status) { GridComp.ShowFight(place, status); }
private void ShowUserFight(Program.Точка place, Program.Статус status) { GridUser.ShowFight(place, status); }
private void ShowUserShip(Program.Точка place, int nr) { GridUser.ShowShip(place, nr); }