2 / 2 / 0
Регистрация: 22.09.2012
Сообщений: 202
1

Игра "Лабиринт". Отделить логику от интерфейса

15.01.2013, 10:01. Показов 2935. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем, извините за возможно глупый вопрос, но что значит отделить логику от интерфейса. Пишу игру лабиринт, компьютер должен найти кратчайший путь. Я так понимаю, что необходимо создать отдельный класс -Алгоритм решения, еще один класс который будет рисовать на поле формы. Из главной формы буду передавать размеры лабиринта в класс вычисления, в котором будет один public метод который вернет массив, содержащий путь в класс отрисовки. Еще мне нужно сохранять игру, открывать, на это тоже наверно нужен класс? Я думаю сохранять текущий массив на поле в файл, а когда открывать его отрисовывать. Может быть совсем неправильно рассуждаю, подскажите как лучше сделать. Заранее спасибо
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.01.2013, 10:01
Ответы с готовыми решениями:

Игра "Лабиринт"
Хочу написать игру "Лабиринт". Сюжет: Поле NxN клеток, старт слева, финиш справа. Тело N...

XML Request и ошибка "Недопустимая лексема "=" в объявлении класса, структуры или интерфейса"
Пишу отправку xml запроса,компилятор ругается. using System; using System.Configuration;...

Ошибка "Недопустимая лексема "{" в объявлении класса, структуры или интерфейса"
Ошибка "Недопустимая лексема "{" в объявлении класса, структуры или интерфейса", помогите! Вот...

Игра "Змейка", ошибка "Globals.Close не объявлен", неправильная логика игры
Нашёл в интернете код игры "змейка" и саму скомпилированную игру. Но есть загвоздка. А точнее две...

17
Автор FAQ
Автор FAQ
1800 / 612 / 37
Регистрация: 22.12.2009
Сообщений: 1,544
15.01.2013, 14:41 2
Здравствуйте!
Я думаю сохранять текущий массив на поле в файл, а когда открывать его отрисовывать
Я думаю, вам поможет - "Сериализация"
отделить логику от интерфейса
Хороший пример этому технология - "WPF".

Класс - представляет собой одну сушность.
К примеру - игровое поле это отдельный класс.
Элемент поля(клетка), если он сложный - тоже отдельный класс
Игрок - отдельный класс
Всю логику , не связанную с полем и игроком - например действия противника, если такой имеется - тоже оформить в класс.

Я думаю смысл понятен)
1
Эксперт .NET
17363 / 12771 / 3341
Регистрация: 17.09.2011
Сообщений: 21,051
15.01.2013, 15:06 3
Цитата Сообщение от Kreativ Посмотреть сообщение
что значит отделить логику от интерфейса
Это значит, что можно взять весь код, который выполняет основную задачу - поиск пути в лабиринте, перенести его в консольное приложение, абсолютно ничего в нем не меняя, и он будет там работать точно так же, только вместо графического отображения пути в консоль будет вывод, например, "налево-направо-прямо".
1
2 / 2 / 0
Регистрация: 22.09.2012
Сообщений: 202
15.01.2013, 15:18  [ТС] 4
в принципе разобрался, по ходу написания если вопросы возникнут, то еще отпишусь, спасибо
0
Администратор
Эксперт .NET
9414 / 4700 / 759
Регистрация: 17.04.2012
Сообщений: 9,544
Записей в блоге: 14
15.01.2013, 15:26 5
Прочтите тут: http://www.mono-project.com/Gui_Toolkits внизу страницы, раздел "Alternative Implementation Approaches". Хороший пример использования отделения интерфейса от логики.
1
192 / 192 / 29
Регистрация: 03.12.2009
Сообщений: 853
15.01.2013, 17:06 6
Возможно стоит посмотреть в сторону паттерна MVVM, хотя я не уверен
1
2 / 2 / 0
Регистрация: 22.09.2012
Сообщений: 202
15.01.2013, 17:20  [ТС] 7
прочитал раздел "Alternative Implementation Approaches",потихоньку все проясняется. Насчет MVVM почитал, но кажется это уже слишком глубоко если можно так выразится. Мне сейчас просто нужно правильно определить классы, их связь - для начала, но в любом случае спасибо
0
Автор FAQ
Автор FAQ
1800 / 612 / 37
Регистрация: 22.12.2009
Сообщений: 1,544
15.01.2013, 17:32 8
Цитата Сообщение от Kreativ Посмотреть сообщение
прочитал раздел "Alternative Implementation Approaches",потихоньку все проясняется. Насчет MVVM почитал, но кажется это уже слишком глубоко если можно так выразится. Мне сейчас просто нужно правильно определить классы, их связь - для начала, но в любом случае спасибо
Кстати говоря про классы и их связь - если время позволяет, почитайте про паттерны.
0
2 / 2 / 0
Регистрация: 22.09.2012
Сообщений: 202
15.01.2013, 17:41  [ТС] 9
Цитата Сообщение от Rockedit Посмотреть сообщение
Я думаю, вам поможет - "Сериализация"
Возник вопрос по поводу сериализации, допустим я записываю массив в файл(сохраняю игру) трижды, под разными именами, как тогда можно десериализовать конкретный массив? Т.е. по имени сохраненной игры соотв массив.
каждый раз в новый файл как то не хочется.
0
840 / 478 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
15.01.2013, 18:49 10
Ну сопоставить в файли соответствие массиву- имя. И по введёному имени десериализировать.
0
2 / 2 / 0
Регистрация: 22.09.2012
Сообщений: 202
15.01.2013, 21:30  [ТС] 11
Цитата Сообщение от Wolkodav Посмотреть сообщение
Ну сопоставить в файли соответствие массиву- имя
я чет понять не могу, как сопоставить то?
0
Master of Orion
Эксперт .NET
6096 / 4952 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
16.01.2013, 15:38 12
Kreativ, можно сериализовать массив игр (в одном и том же файле), ну или например словарь
Dictionary<string,Game>
то есть словарь, содержащий название игры - игру
1
Администратор
Эксперт .NET
9414 / 4700 / 759
Регистрация: 17.04.2012
Сообщений: 9,544
Записей в блоге: 14
17.01.2013, 20:16 13
Вы не видели примеров сериализации объектов? Тогда вот - MSDN
Сохранение идёт в файл, в который захотите. Просто сохраняете каждый раз массив в отдельный файл.
0
Master of Orion
Эксперт .NET
6096 / 4952 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
17.01.2013, 20:19 14
tezaurismosis, вопрос: а как потом эти массивы загружать, если не знать имя игры? То есть пользователь сохранил игру "qwerty.save", как потом при запуске программа будет его загружать? Со словарем-то просто: при любом имени можно пройтись foreach, к тому же будет всего 1 файл сохранения, а не 100500, а вот для каждой игры свой файл - это не очень. Особенно, если нужно сохранения удалять.
0
Администратор
Эксперт .NET
9414 / 4700 / 759
Регистрация: 17.04.2012
Сообщений: 9,544
Записей в блоге: 14
19.01.2013, 23:00 15
Psilon, да точно, не правильно прочитал то, что просит автор темы, мне показалось, что нужно сохранять в разные файлы.
Цитата Сообщение от Psilon Посмотреть сообщение
То есть пользователь сохранил игру "qwerty.save", как потом при запуске программа будет его загружать?
По имени и будет. При десериализации тоже используется имя файла. Например:
C#
1
2
3
4
5
string path = "qwerty.save";
XmlSerializer serializer = new XmlSerializer(typeof(Save));
StreamReader reader = new StreamReader(path);
save = (Save)serializer.Deserialize(reader);
reader.Close();
И ещё: я сторонник раздельных сохранений, поскольку достаточно поиграл в глюченные игры - в случае вылета игры во время сохранения, игра унесёт за собой все сохранения, если они хранятся в одном файле, а так - только одно из сохранений.
0
Master of Orion
Эксперт .NET
6096 / 4952 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
19.01.2013, 23:01 16
tezaurismosis, если мы заранее не знаем имени игры, как мы его восстановим?
Хотя лучше действительно в разные файлы Но в один массив проще
1
Администратор
Эксперт .NET
9414 / 4700 / 759
Регистрация: 17.04.2012
Сообщений: 9,544
Записей в блоге: 14
19.01.2013, 23:13 17
Psilon, если не знаем, то да. А я представил себе загрузочный экран типа:
Код
======= LOAD GAME ========
** 1.sav -------- <Load> |
** 2.sav -------- <Load> |
** n.sav -------- <Load> |
--------------------------
Какой надо - загружаешь.
1
2 / 2 / 0
Регистрация: 22.09.2012
Сообщений: 202
20.01.2013, 11:07  [ТС] 18
Извините, что так долго не отвечал,
tezaurismosis, действительно может быть будет лучше в разные файлы, я повспоминал игры какие играл, все профили хранились раздельно
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.01.2013, 11:07
Помогаю со студенческими работами здесь

Известны сорта роз, выращиваемых тремя цветоводами: "Анжелика", "Виктория", "Гагарин", "Ave Maria", "Катарина", "Юбилейн
Известны сорта роз, выращиваемых тремя цветоводами: &quot;Анжелика&quot;, &quot;Виктория&quot;, &quot;Гагарин&quot;, &quot;Ave...

"ConsoleApplication1.Person" не реализует член интерфейса "ConsoleApplication1.IPerson.Money()"
Здравствуйте, при реализации кода появляются такие ошибки: 1.&quot;ConsoleApplication1.Person&quot; не...

Дан массив строк: "red", "green", "black", "white", "blue". Запишите в файл элементы массива построчно (в новой строке)
пишу так но не помогает: static void Main(string args) { string...

"Буквенный" лабиринт (TopCoders 250)
Хотелось бы узнать ваш алгоритм решения это задачи . Дан массив string letterMaze , состоящий из...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru