Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Диаграмма классов. Нужен совет. 
:(
    Опции темы
mes
Дата 30.12.2010, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(TGrey @  30.12.2010,  14:54 Найти цитируемый пост)
Я не хочу утверждать, что я прав или эта статья, просто хочу разобраться, как же оно на самом деле. 

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

букет цветов  - композиция.. 
ваза, в которой стоит букет цветов - агрегация..

Добавлено через 1 минуту и 28 секунд
Цитата(TGrey @  30.12.2010,  14:54 Найти цитируемый пост)
Кстати тогда Player получается и Агрегирует Map

игрок агрегирует не карту, а указатель на карту, а карта представляет собой композицию игроков и врагов..



--------------------
PM MAIL WWW   Вверх
TGrey
Дата 30.12.2010, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 294
Регистрация: 1.12.2007

Репутация: нет
Всего: 1



Ну только по выше указанному совету класс Гейм представляет собой композицию игроков и врагов?

Код

class Game
{
     CMap *map;
     Player *pl;
     Enemy *en[4];
     Game()
     {
            map = new CMap();
            pl = new Player(map);
            en[0..3] = new Enemy(map);
      }
};

class Player
{
     CMap *map;
     Player(CMap *m);
};

class Enemy : public Player
{
     Enemy(CMap *m);
};

class CMap{};

Примерно такая структура классов получается. А куда тогда желательно впихнуть Класс, который буде рисовать карту?
Если его сделать независимым и создавать вместе с Game. И потом просто передавать ему массив с картой?
Код

Game game;
Drawer draw;
...
draw.DrawMap(game.Map);

Ничего не корректного не будет?
PM MAIL   Вверх
mes
Дата 30.12.2010, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(TGrey @  30.12.2010,  16:57 Найти цитируемый пост)
у только по выше указанному совету класс Гейм представляет собой композицию игроков и врагов?

"обычно" класс Гейм не предоставляет собой композицию врагов и плееров, так как без он не предоставляет их наружу.. а сам изменяет когда и что нужно.. Он может содержать в себе эту композицию..

Добавлено через 1 минуту и 58 секунд
Цитата(TGrey @  30.12.2010,  16:57 Найти цитируемый пост)
А куда тогда желательно впихнуть Класс, который буде рисовать карту?

форме (или его окну)..

Добавлено через 3 минуты и 23 секунды
Цитата(TGrey @  30.12.2010,  16:57 Найти цитируемый пост)
class Player
{
     CMap *map;
     Player(CMap *m);
};
class Enemy : public Player
{
     Enemy(CMap *m);
};

у Вас плеер и енеми самодостаточные ? т.е логика их поведения обслуживается ими же ? сомневаюсь..  
если сомнения верны, то схема не правильна..



--------------------
PM MAIL WWW   Вверх
TGrey
Дата 30.12.2010, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 294
Регистрация: 1.12.2007

Репутация: нет
Всего: 1



Ну так тогда же будет та же связь, что преподаватель забраковал, карта знает о игроке, а игрок знает о карте...
PM MAIL   Вверх
mes
Дата 30.12.2010, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(TGrey @  30.12.2010,  17:09 Найти цитируемый пост)
у так тогда же будет та же связь, что преподаватель забраковал. 

т.е возможны только два варианта ? и больше никак ?

Добавлено через 3 минуты и 24 секунды
кстати насчет Player.. тот Player, o котором идет речь, это всего лишь фишка на поле..
класс осуществляющий управление этой фишкой , это другая сущность.. 
мне кажется Вы пытаетесь сделать из них единое целое.. 




--------------------
PM MAIL WWW   Вверх
TGrey
Дата 30.12.2010, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 294
Регистрация: 1.12.2007

Репутация: нет
Всего: 1



В том то и дело, что я не уверен, что ему надо сделать, он сказал, что это не верно, что карта знает о игроке, а игрок знает о карте. Не смотря на это я вот сижу обдумываю, как сделать эти классы независимыми, но не вижу смысла в том, что игрок есть, но он не знает ничего о карте, на которой должен ходить. Это не логично. Все что мне пришло в голову убрать все методы "Перехода" с класса Игрока и засунуть их в другой. А потом по средствам того если переход возможен, то вызывать некие методы, которые будут изменять уже значения полей Игрока. Вот собственно единственный вариант, который мне пришел в голову, чтобы сделать Игрока не зависимым от карты.
К этом как раз и подходит, то предложение, что Гейм является контейнером для всех, при этом Игрок знает о карте, но карта не знает о игроке. Это как бы даже логически подходит. Тогда же остается нужда в доп. классе который должен знать и о Карте и о Игроке, чтобы проверять возможность Ходьбы и изменять данные на карте и чтобы изменять поля Игрока. smile 
PM MAIL   Вверх
mes
Дата 30.12.2010, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(TGrey @  30.12.2010,  17:18 Найти цитируемый пост)
он сказал, что это не верно, что карта знает о игроке, а игрок знает о карте

если игрок - эта фишка на поле, как уже было выше сказано, то согласен что неверно..

Добавлено через 56 секунд
Цитата(TGrey @  30.12.2010,  17:18 Найти цитируемый пост)
Не смотря на это я вот сижу обдумываю, как сделать эти классы независимыми, но не вижу смысла в том, что игрок есть, но он не знает ничего о карте, на которой должен ходить. 

не путайте игрока и фишку игрока..

Добавлено через 2 минуты и 29 секунд
Цитата(TGrey @  30.12.2010,  17:18 Найти цитируемый пост)
К этом как раз и подходит, то предложение, что Гейм является контейнером для всех,

является не контейнером.. а обслуживателем единой логики...

Добавлено через 4 минуты и 41 секунду
Цитата(TGrey @  30.12.2010,  17:18 Найти цитируемый пост)
 Тогда же остается нужда в доп. классе который должен знать и о Карте и о Игроке, чтобы проверять возможность Ходьбы и изменять данные на карте

это и есть гейм ..

Цитата(TGrey @  30.12.2010,  17:18 Найти цитируемый пост)
и чтобы изменять поля Игрока.

какого игрока ? фишку он меняет.. а состояние управляющего находится вне ведомости класса игры..

Добавлено через 5 минут и 10 секунд
опишите игру, которую Вы делаете, чтоб можно было подсказать точнее.. 



--------------------
PM MAIL WWW   Вверх
TGrey
Дата 30.12.2010, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 294
Регистрация: 1.12.2007

Репутация: нет
Всего: 1



А какая разница между игрок\фишка игрока?


Игра Пак-Мен. В моем варианте:
CMap - загружает карту из файла(0 и 1), рисует карту.
Player - методы обработки ходьбы игрока(если может походить по карте и там есть монетка по значение в массиве меняется на 2)
Enemy - методы обработки ходьбы врага.

Структура такова
Код

class CMap
{
    Player *pl;
    Enemy *en[4];
}

class Player
{
      Move(char Map[25][25]);
}

class Enemy : Player
{};

По таймеру рисует карту
Map *m;
m->DrawMap(Form4->Canvas);

По нажатию на клавиши меняет направление
        if( Key == VK_LEFT )
             m->SetDir(DLeft);

По таймеру перемещает картинку
m->GetPlayer()->NewOffset(m->Map);

PM MAIL   Вверх
mes
Дата 30.12.2010, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(TGrey @  30.12.2010,  17:40 Найти цитируемый пост)
А какая разница между игрок\фишка игрока?

в том фишка лежит себе где нибудь и никого не трогает.. 
зато всем контроллерам видно где и что лежит и двигают что им можно, когда им нужно и можно.. 
smile

Добавлено через 5 минут и 1 секунду
Цитата(TGrey @  30.12.2010,  17:40 Найти цитируемый пост)
class CMap
{
    Player *pl;
    Enemy *en[4];
}

smile

Цитата(TGrey @  30.12.2010,  17:40 Найти цитируемый пост)
class Player
{
      Move(char Map[25][25]);

 smile 

Цитата(TGrey @  30.12.2010,  17:40 Найти цитируемый пост)

class Enemy : Player
{};

smile

Цитата(TGrey @  30.12.2010,  17:40 Найти цитируемый пост)
 m->SetDir(DLeft);

smile

свой вариант напишу попозже..сейчас нет достаточно времени.. 




--------------------
PM MAIL WWW   Вверх
TGrey
Дата 30.12.2010, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 294
Регистрация: 1.12.2007

Репутация: нет
Всего: 1



Что-то я вообще потерялся...
Хорошо выходит, что мой Класс Плеер - фишка. Значит он ничего сам делать не должен и ни о чем знать не должен тоже. В это же время, если учитывать новую структуру классов, то класс Гейм - это контроллер, который будет пытаться перейти в карте и если это возможно, тогда он двигает Игрока(он же Фишка).
Тогда игрок ничего не соображает вообще, методов в нем выходит вообще не будет, только поля для очков, жизней и другие параметры.
Значит Гейм - управляет переходами, содержит Карту, содержит Игроков.
Игрок вообще ничего не знает.
Карта тоже ничего не знает, содержит только массив с самой картой.

PM MAIL   Вверх
mes
Дата 30.12.2010, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



приступим...

нам нужно :
 карта местности 
 активные фишки (игрок, враги)
 пассивные фишки (подарки)

1. фишки могут быть расположены на карте местности, а могут просто хранить координату на поле, при том второе имеет предпочтение ввиду экономичности..
2. передвижение, разбор столкновений, и др подобное осуществляет контролер игры..
3. игрок может изменить направление принадлежащей ему фишки..(*тут пересечение с пунктом 2.)
4. игра может находиться в разных игровых состояниях (start, play, finish)
5. отрисовка должна осуществляться внешним объектом, на основании общей информации..

Добавлено через 1 минуту и 17 секунд
теперь надо подумать как это все состыковать..



--------------------
PM MAIL WWW   Вверх
TGrey
Дата 31.12.2010, 00:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 294
Регистрация: 1.12.2007

Репутация: нет
Всего: 1



Ну пассивных фишек нет) Без них обойдусь.
В данный момент есть только Игроки и Враги которые хранят в себе координаты на поле. Методе столкновений и переходов я уже написал, нужно только перенести их в Game(он же контроллер). Тогда выходит, что Гейм будет вызывать функции Перехода, в случае "съедания" монетки изменять данные в массиве Карты и изменять координаты Игроков\Врагов.

А вот на счет отрисовки, внешний объект будет создаваться на форме, как отдельный класс, который рисует карту из заданного массива. Тогда выходит что он должен будет получать класс Гейм и из него выбирать массив с Картой.

Как-то так?
user posted image
PM MAIL   Вверх
mes
Дата 31.12.2010, 00:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



отвлекли немного.. вот пока часть наброска.. 
Код

struct active_chip {
   point direction;
   point position; 
   color skin;
};

struct player {
    void set_direction (point direction) {
       chip.direction = direction;
    }

    active_chip & chip;
};

struct playing {
   player& get_player ();
};

struct game {
   void start ();
   void play ();
   void finish ();
   playing get_playing ();
};




--------------------
PM MAIL WWW   Вверх
TGrey
Дата 31.12.2010, 00:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 294
Регистрация: 1.12.2007

Репутация: нет
Всего: 1



Спасибо, но мне не столь важен код, как сама диаграмма) Я потом под нее свой код подгоню.
PM MAIL   Вверх
mes
Дата 31.12.2010, 00:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(TGrey @  30.12.2010,  23:04 Найти цитируемый пост)
Ну пассивных фишек нет)

Цитата(TGrey @  30.12.2010,  23:04 Найти цитируемый пост)
в случае "съедания" монетки изменять

ну так монетки и подразумевались в роли пассивных фишек smile

Добавлено через 1 минуту и 47 секунд
Цитата(TGrey @  30.12.2010,  23:04 Найти цитируемый пост)
тогда выходит что он должен будет получать класс Гейм и из него выбирать массив с Картой.

для отрисовки (в принципе) нужна не толька Карта, а вся информациядоступная через game..

Добавлено через 2 минуты и 47 секунд
Цитата(TGrey @  30.12.2010,  23:22 Найти цитируемый пост)
но мне не столь важен код, как сама диаграмма) Я потом под нее свой код подгоню. 

мне просто легче кодом выражаться.. с uml я не сталкивался smile

Добавлено через 5 минут и 29 секунд
Цитата(TGrey @  30.12.2010,  23:04 Найти цитируемый пост)
А вот на счет отрисовки,

метод формы вызывает render отрисовщика, передавая в него контекст для рисования и ссылку на игру.. 



--------------------
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0897 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.