С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
2 / 2 / 0
Регистрация: 22.09.2012
Сообщений: 202
1

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

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

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

Игра лабиринт. ИИ в лабиринте. Как задать лабиринт
У меня есть следующее задание: Дано: - робот - лабиринт Задание: - Нужно реализовать...

Как отделить бизнес логику от UI ?
У меня бизнес логика перемешена с UI. Как отделить бизнес логику в отдельный класс, экземпляр...

Как правильно отделить логику от вида
Есть таблица в БД состоящая из четырех столбцов н.п. ID SURNAME NAME PHONE 1 Петров Петя ...

Инкапсуляция или как правильно отделить логику
Делаю проект в WPF(но это не важно). Вопрос таков: может ли класс где обработчики всех событий...

Игра лабиринт
using System; using System.Collections.Generic; using System.Linq; using System.Text; ...

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

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

Я думаю смысл понятен)
1
Эксперт .NET
17791 / 12942 / 3381
Регистрация: 17.09.2011
Сообщений: 21,223
15.01.2013, 15:06 3
Цитата Сообщение от Kreativ Посмотреть сообщение
что значит отделить логику от интерфейса
Это значит, что можно взять весь код, который выполняет основную задачу - поиск пути в лабиринте, перенести его в консольное приложение, абсолютно ничего в нем не меняя, и он будет там работать точно так же, только вместо графического отображения пути в консоль будет вывод, например, "налево-направо-прямо".
1
2 / 2 / 0
Регистрация: 22.09.2012
Сообщений: 202
15.01.2013, 15:18  [ТС] 4
в принципе разобрался, по ходу написания если вопросы возникнут, то еще отпишусь, спасибо
0
Администратор
Эксперт .NET
9616 / 4758 / 761
Регистрация: 17.04.2012
Сообщений: 9,612
Записей в блоге: 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
1803 / 615 / 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
6100 / 4956 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
16.01.2013, 15:38 12
Kreativ, можно сериализовать массив игр (в одном и том же файле), ну или например словарь
Dictionary<string,Game>
то есть словарь, содержащий название игры - игру
1
Администратор
Эксперт .NET
9616 / 4758 / 761
Регистрация: 17.04.2012
Сообщений: 9,612
Записей в блоге: 14
17.01.2013, 20:16 13
Вы не видели примеров сериализации объектов? Тогда вот - MSDN
Сохранение идёт в файл, в который захотите. Просто сохраняете каждый раз массив в отдельный файл.
0
Master of Orion
Эксперт .NET
6100 / 4956 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
17.01.2013, 20:19 14
tezaurismosis, вопрос: а как потом эти массивы загружать, если не знать имя игры? То есть пользователь сохранил игру "qwerty.save", как потом при запуске программа будет его загружать? Со словарем-то просто: при любом имени можно пройтись foreach, к тому же будет всего 1 файл сохранения, а не 100500, а вот для каждой игры свой файл - это не очень. Особенно, если нужно сохранения удалять.
0
Администратор
Эксперт .NET
9616 / 4758 / 761
Регистрация: 17.04.2012
Сообщений: 9,612
Записей в блоге: 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
6100 / 4956 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
19.01.2013, 23:01 16
tezaurismosis, если мы заранее не знаем имени игры, как мы его восстановим?
Хотя лучше действительно в разные файлы Но в один массив проще
1
Администратор
Эксперт .NET
9616 / 4758 / 761
Регистрация: 17.04.2012
Сообщений: 9,612
Записей в блоге: 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
20.01.2013, 11:07
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.01.2013, 11:07
Помогаю со студенческими работами здесь

Игра Лабиринт
В лабиринте средством перемещения так сказать &quot;персонажа&quot; являются стрелки.Помогите пожалуйста...

Игра лабиринт!
Необходимо создать программу-игру лабаиринт!! на форме!! очень срочно нужно у кого есть исходники...

игра-ЛАБИРИНТ!
Нужно написать игрушку-лабиринт, очень простую на С++! Она должна иметь несколько уровней (разных...

Игра лабиринт VB
Хочу сделать игру типа лабиринта. В которой объект передвигается по полю при нажатии...

Игра Лабиринт
Пишу простейшую игру лабиринт.Поле загружаю из файла, курсор двигаю клавишами через...

Игра Лабиринт
Кто-нибудь может помочь написать игру &quot;Лабиринт&quot; на Си? Или может у Вас есть исходники?


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru