КРИ 2008. Проектирование игр: функциональный подход
1. Проектирование игр: функциональный подход Автор: Кирилл Лебедев , компания Evosquare [email_address] При участии: С.В. Сычёва , Система «ТРИЗ-ШАНС» [email_address]
2.
3.
4. class Противник { // и т.д. }; class Скат : public Противник { // и т.д. }; class Рак : public Противник { // и т.д. }; Пример "Аквариум"
16. Пример "Аквариум" Противоречие " должно быть одно – и должно быть другое " С одной стороны, класс необходимо поместить в одну ветвь иерархии, а с другой стороны – класс нужно поместить в другую, параллельную, ветвь иерархии.
18. Пример "Аквариум" class Модель; class Роль; class Передвижение; class ИгровойОбъект { Модель * m_pМодель; Роль * m_pРоль; Передвижение * m_pПередвижение; };
20. Объект или функция? Построение непротиворечивой иерархии объектным способом невозможно
21. Альтернативы Объект или функция? Игровой Объект == набор функций Игровой Объект – точка в пространстве функций
22.
23.
24.
25.
26.
27.
28.
29. Шаг 2. Избавиться от ветвлений Пример enum ICriterious { eUseShield, eMakeTurn, eAvoidMine }; ICriterious iCriterious; switch (iCriterious) { case eUseShield: UseShield(); break ; case eMakeTurn: Turn(); break ; case eAvoidMine: AvoidMine(); break ; } Увернуться Нет Близко Есть Включить щит Есть Близко Есть Объехать мину Не важно Далеко Есть Действие Критерий 3 "Наличие щита" Критерий 2 "Расстояние до мины" Критерий 1 "Наличие мины"
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44. Объём документации Статистика 50 3 Итого: 36 2 Ридер 14 1 Компилятор Количество страниц Количество документов Название проекта
45. Объём кода Статистика 1378 3940 49 Итого: 646 1938 22 Ридер 732 2002 27 Компилятор Количество строк комментариев Количество строк кода Количество классов Модуль
46. Сроки Статистика Причина задержки – возникновение непредвиденных задач при реализации стыка между картами 240 128 Итого: 56 16 Тестирование, отладка и оптимизация 84 16 Кодирование 84 80 Проектирование 16 16 Постановка задачи Время, реальное (ч) Время, прогноз (ч) Этап
47. Производительность Статистика 22 – 50 20 несколько тысяч Норма (п о данным IBM ) 131 30 3940 База данных для роутинга Скорость разработки (строк кода в день) Время разработки (в днях) Объем (в строках кода ) Проект
48.
49. Качество Статистика Ошибки, оставшиеся в модуле до прохождения тестирования Качество Статистика 0.5 2 Общие данные 0.5 1 Ридер 0.5 1 Компилятор Количество ошибок до тестирования на 1000 строк кода Количество ошибок до тестирования Модуль