Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
1 / 1 / 3
Регистрация: 22.01.2015
Сообщений: 199
1

Метод проверки корректности размещения кораблей в игре "морской бой"

10.12.2018, 17:58. Просмотров 538. Ответов 2

Добрый день. В игре "морской бой" необходимо проверить корректность размещения кораблей. Первым делом пытаюсь ограничить список, исключив сам объект и корабли, находящиеся дальше 2 клеток по любой из осей. Каждый корабль имеет Список занимаемых клеток в качестве аттрибута, а каждая клетка - статус (зактивна, стреляна) и координаты. Пока всё, чтоесть по данному методу. Помогите дописать, пожалуйста)

C#
1
2
3
4
5
6
7
8
9
10
11
12
public bool CheckField(Field Field)  // метод для проверки корректности выставленных на поле кораблей
        {
            int alignX = 1;
            int alignY = 1;
            List<Ship> ships;
            
            foreach (var item in Field.getMyShips()) // для каждого корабля на поле
            {
                ships = Field.getMyShips().Where();               
                ships.Remove(item);                
            }
        }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.12.2018, 17:58
Ответы с готовыми решениями:

Морской бой: Не могу реализовать класс кораблей
Не могу придумать класс для кораблей. Выручайте)

Игра морской бой: никак не придумаю как лучше реализовать корабли в игре
Пишу игру &quot;Морской бой&quot; на c# и никак не решу как лучше реализовать в программе корабли.

Морской бой
Здраствуйте. Простите пожалуйста, немогли бы вы мне помочь в поиске компонента C# для реализации...

Морской бой
хочу написать игру... но если честно, то даже не знаю с какой стороны подойти и как должно это...

2
Супер-модератор
Эксперт .NET
12033 / 10037 / 4195
Регистрация: 17.03.2014
Сообщений: 20,159
Записей в блоге: 1
10.12.2018, 20:51 2
Jocker, как по-твоему можно дописать кода без кода классов Field и Ship?
0
1 / 1 / 3
Регистрация: 22.01.2015
Сообщений: 199
10.12.2018, 22:07  [ТС] 3
Цитата Сообщение от OwenGlendower Посмотреть сообщение
как по-твоему можно дописать кода без кода классов Field и Ship?
ой, простите, забыл вставить)

Класс Field
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace SeeBattle
{
   public class Field
    {
        private List<Ship> enemyShips;
        private List<Ship> myShips;
        private int _size;
 
        public Field (int Size)
        {
            _size = Size;
        }
 
        public List<Ship> getMyShips() // получить список кораблей, находящихся на поле
        {
            return myShips;
        }
 
        public void AddShip(Cell firstCell, Cell lastCell) // выставить корабль на поле
        {
            myShips.Add(new Ship(firstCell, lastCell));
        }
 
        public bool isWin () // выполнены ли условия для победы
        {
            if (enemyShips.Count == 0)
                return true;
            else return false;
        }       
    }
}
Класс Ship
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
using System;
using System.Collections.Generic;
 
namespace SeeBattle
{
    public class Ship
    {
        public List<Cell> cells { get; set; }
        public List<Cell> bufferZone { get; set; }
        private State state = State.Active;
        private Cell _startCell;
        private Cell _lastCell;
 
        public Ship(Cell startCell, Cell lastCell)
        {
            FillShipCells(); // инициализация класса заполняет список клеток всеми клетками, которые занимает корабль
            _startCell = startCell;
            _lastCell = lastCell;
        }
 
        public List<Cell> getCells()
        {
            return cells;
        }
 
        private void FillShipCells()
        {
            int deltaX = _startCell.getX() - _lastCell.getX(); // разность между Х координатой начальной и конечной клетки
            int deltaY = _startCell.getY() - _lastCell.getY(); // разность между Y координатой начальной и конечной клетки
 
            if (_startCell == _lastCell)
                cells.Add(_startCell);             // если корабль однопалубный
            else if (deltaX == 0)                                        // если корабль вертикальный
                for (int i = 0; i < Math.Abs(deltaY) + 1; i++)           // заполняет список клеток корабля, где "Math.Abs(deltaY) + 1" - формула размера корабля
                {
                    if (_startCell.getY() < _lastCell.getY())
                        cells.Add(new Cell(_startCell.getX(), _startCell.getY() + i));   // если начальная клетка выше конечной
                    else
                        cells.Add(new Cell(_startCell.getX(), _lastCell.getY() + i)); // если начальная клетка ниже конечной
                }
 
            else if (deltaY == 0)                                              // если корабль горизонтальный (действия аналогичны вертикальному кораблю)
                for (int i = 0; i < Math.Abs(deltaX) + 1; i++)
                {
                    if (_startCell.getX() < _lastCell.getX())
                        cells.Add(new Cell(_startCell.getX() + i, _startCell.getY()));
                    else
                        cells.Add(new Cell(_lastCell.getX() + i, _startCell.getY()));
                }
        }
        
        public void Destroy()  // Уничтожить корабль. Присвоить всем клеткам, принадлежавшим кораблю, статус "уничтожено" и "выстрелено" - всем вокруг уничтоженного корабля
        {
            state = State.Defeated;
        }
    }
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.12.2018, 22:07

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Морской бой
Вот решил написать морской бой. Как всё это сделать примерно понимаю, но вот хочу посоветоваться с...

Морской Бой
Вопрос в том как сделать меню какоенибудь чтоб выбор в игре был пример 1-палубные и двух палобные...

Морской бой
Ребят, а как написать код, чтоб корабли в притык нельзя было ставить?! Зарание спасибо! вот мой...

Ошибка после конвертации метода на С++ к С#: "Неявное преобразование типа "int" в "bool" невозможно"
Ошибка после преобразования метода на С++ к С#: &quot;Неявное преобразование типа &quot;int&quot; в &quot;bool&quot;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.