Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 10.01.2019
Сообщений: 28
1

Создание объекта класса, который будет содержать указанное количество объектов другого класса

26.04.2019, 13:10. Просмотров 1599. Ответов 8
Метки нет (Все метки)

Здравствуйте. Я сейчас только учусь, помогите, пожалуйста.
Задача такая: необходимо создать класс кораблика из игры "Морской бой", при этом он должен содержать количество палуб, иметь возможность доступа к каждой палубе по адресу, типа "А3", помечать палубы, как взорванные и в целом корабль, как уничтоженный.

Я подумал о варианте, когда есть класс "корабль" и есть класс "палуба", создать композицию, при создании корабля, палуба создается автоматически и без корабля существовать не может. Но тут появляется вопрос: если корабль не однопалубный, то как сделать так, чтобы при введении пользователем количества палуб, в классе "корабль" создавалось именно такое количество палуб?
Имеет ли место быть мой вариант? Если да, то каким образом осуществить идею? Если есть более простые варианты, то какие?
Заранее благодарю.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.04.2019, 13:10
Ответы с готовыми решениями:

Возможно ли создать объект своего класса, который состоит из объектов другого класса?
Возможно ли создать объект своего класса, который состоит из объектов другого класса, например: ...

Создание объекта класса с полем являющимся объектом другого класса
Bill a; cin>>a;//тут я ввел с помощью перегруженного оператора ElementSpiska c; //поля у...

Вызвать процедуру\функцию из другого объекта\класса. Из одного класса\объекта сделать два
Здравствуйте. Подскажите что не правильно делаю, и возможно ли вообще - вызвать процедуру\функцию...

Перегрузка операции + с преобразованием объектов одного класса в объекты другого класса
Доброго времени суток! Изучаю ООП, при выполнении следующего задания возникли сложности: Создать...

8
https://vk.com/a.tsarev83
562 / 365 / 177
Регистрация: 06.02.2012
Сообщений: 1,250
26.04.2019, 13:25 2
Может это вам поможет
Sea-Battle-Game
1
0 / 0 / 0
Регистрация: 10.01.2019
Сообщений: 28
26.04.2019, 13:36  [ТС] 3
Спасибо большое за попытку, но не помогло((
Я же только учусь, тема для меня не легкая. Открыл, посмотрел, там очень много всего, много чужого кода. Что-то учел для себя, но понял очень мало. Все равно спасибо, думаю, когда получше с понимаем станет, вернусь к этому архиву.
0
319 / 197 / 130
Регистрация: 17.04.2019
Сообщений: 826
26.04.2019, 13:44 4
Fardar, это вам надо создать "Морской бой", и вы сами придумали эту структуру классов? Или же это именно задание?
0
0 / 0 / 0
Регистрация: 10.01.2019
Сообщений: 28
26.04.2019, 13:53  [ТС] 5
Структуру придумал сам. Я пока не совсем понимаю тему ООП, предположил, что такая структура может работать, но не уверен в этом. Не факт, что язык может вообще поддерживать подобный синтаксис.
0
319 / 197 / 130
Регистрация: 17.04.2019
Сообщений: 826
26.04.2019, 13:59 6
Fardar, такое, конечно, можно реализовать, но зачем усложнять?
0
0 / 0 / 0
Регистрация: 10.01.2019
Сообщений: 28
26.04.2019, 14:08  [ТС] 7
Я был бы очень рад не усложнять, но я не знаю как. Только учусь, поэтому плохо соображаю что и как. В первом сообщении написал, что если есть вариант проще, то прошу рассказать.
0
319 / 197 / 130
Регистрация: 17.04.2019
Сообщений: 826
26.04.2019, 15:33 8
Лучший ответ Сообщение было отмечено Fardar как решение

Решение

Fardar, вот код по вашей структуре классов, возьмите его за основу:
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
public class Ship
{
    public enum Location { Vertically, Horizontally };
        
    public class Deck
    {
        private bool _isExists;
        private Point _position;
            
        public bool IsExists
        {
            set { _isExists = value; }
            get { return _isExists; }
        }
            
        public Point Position
        {
            get { return _position; }
        }
            
        public Deck(Point position)
        {
            _isExists = true;
            _position = position;
        }
    }
        
    private Deck[] _decks;
        
    public Ship(int decksNumber, Point bowPosition, Location location)
    {
        _decks = new Deck[decksNumber];
        _decks[0] = new Deck(bowPosition);
        for (int i = 1; i < decksNumber; i++)
            _decks[i] =  new Deck((location == Location.Horizontally) ? new Point(bowPosition.X + 1, bowPosition.Y) : new Point(bowPosition.X, bowPosition.Y + 1));
    }
        
    public Deck this[int index]
    {
        get { return ((index >= 0 && index <_decks.Length) ? _decks[index] : null); }
    }
        
    public int DecksNumber
    {
        get { return _decks.Length; }
    }
}
Добавлено через 2 минуты
Fardar, вам нужно сделать метод проверки возможности вставить корабль в указанное место, а далее уже можно будет реализовывать логику игры.
1
Модератор
8264 / 5639 / 1629
Регистрация: 21.04.2018
Сообщений: 16,839
Записей в блоге: 2
26.04.2019, 16:24 9
Цитата Сообщение от Fardar Посмотреть сообщение
Я был бы очень рад не усложнять, но я не знаю как.
Если учитесь ООП, то это не сложная структура.
Саму задачу можно, конечно, реализовать и проще - без ООП. Но тогда, соответственно, и опыта не получите.

В Ваших вариантах по реализации задачи пропущен ещё один класс, который является основным и без которого реализация задачи станет не возможным. И ещё один дополнительный класс

Основной класс Sea (Море) которое и должно содержать корабли состоящие из палуб.

Этот класс (как вариант) должен содержать:
конструктор с параметрами длина (или высота) и ширина
матрицу ячеек (клеток) Cells из объектов Cell
метод Bang (выстрел) проверяющий попадание
метод CreateShip, создающий корабль.
список кораблей
список палуб

Тип Cell должен иметь:
содержание палуба или null
свойства сообщающее о занятости одной из соседних клеток.

В типе Палуба должно быть событие, через которое она может известить подписчиков о попадании в неё.

При создании корабля класс Sea передаёт в конструктор набор уже созданных палуб.
И класс корабля подписывается на событие всех палуб и хранит их список.

Добавлено через 3 минуты
Собственные координаты палубе знать необязательно. По смыслу это функция типа Cell. Если Cell получает выстрел (Bang), то он сообщает содержанию (контенту), что в него попали. А контент (в данном случае палуба) сообщает своим подписчикам, что он разрушен (потоплен).
2
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.04.2019, 16:24

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

XmlJava. Сериализация класса с полем - массивом объектов другого класса
Есть 2 класса Студент и Академ.группа(с полем - массивом студентов). Необходимо выполнить...

Массив объектов одного класса как поле другого класса
Доброе время суток. Мне тут в универе задали лабу, нужно создать класс полем которого будет массив...

Использование объектов одного класса в функциях другого класса
Нужно создать класс Комната и класс ДвериОкна, при этом программа должна добавлять объекты класса...

Коллекция объектов одного класса в экземпляре другого класса
Извиняюсь, если написал не совсем адекватный заголовок. В общем, у меня есть такая модель: public...


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

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

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