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

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

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

Студворк — интернет-сервис помощи студентам
Привет всем, извините за возможно глупый вопрос, но что значит отделить логику от интерфейса. Пишу игру лабиринт, компьютер должен найти кратчайший путь. Я так понимаю, что необходимо создать отдельный класс -Алгоритм решения, еще один класс который будет рисовать на поле формы. Из главной формы буду передавать размеры лабиринта в класс вычисления, в котором будет один public метод который вернет массив, содержащий путь в класс отрисовки. Еще мне нужно сохранять игру, открывать, на это тоже наверно нужен класс? Я думаю сохранять текущий массив на поле в файл, а когда открывать его отрисовывать. Может быть совсем неправильно рассуждаю, подскажите как лучше сделать. Заранее спасибо
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.01.2013, 10:01
Ответы с готовыми решениями:

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

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

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

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

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

Я думаю смысл понятен)
1
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
15.01.2013, 15:06
Цитата Сообщение от Kreativ Посмотреть сообщение
что значит отделить логику от интерфейса
Это значит, что можно взять весь код, который выполняет основную задачу - поиск пути в лабиринте, перенести его в консольное приложение, абсолютно ничего в нем не меняя, и он будет там работать точно так же, только вместо графического отображения пути в консоль будет вывод, например, "налево-направо-прямо".
1
2 / 2 / 0
Регистрация: 22.09.2012
Сообщений: 202
15.01.2013, 15:18  [ТС]
в принципе разобрался, по ходу написания если вопросы возникнут, то еще отпишусь, спасибо
0
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9670 / 4823 / 762
Регистрация: 17.04.2012
Сообщений: 9,661
Записей в блоге: 14
15.01.2013, 15:26
Прочтите тут: http://www.mono-project.com/Gui_Toolkits внизу страницы, раздел "Alternative Implementation Approaches". Хороший пример использования отделения интерфейса от логики.
1
192 / 192 / 29
Регистрация: 03.12.2009
Сообщений: 853
15.01.2013, 17:06
Возможно стоит посмотреть в сторону паттерна MVVM, хотя я не уверен
1
2 / 2 / 0
Регистрация: 22.09.2012
Сообщений: 202
15.01.2013, 17:20  [ТС]
прочитал раздел "Alternative Implementation Approaches",потихоньку все проясняется. Насчет MVVM почитал, но кажется это уже слишком глубоко если можно так выразится. Мне сейчас просто нужно правильно определить классы, их связь - для начала, но в любом случае спасибо
0
Автор FAQ
Автор FAQ
 Аватар для Rockedit
1803 / 615 / 37
Регистрация: 22.12.2009
Сообщений: 1,544
15.01.2013, 17:32
Цитата Сообщение от Kreativ Посмотреть сообщение
прочитал раздел "Alternative Implementation Approaches",потихоньку все проясняется. Насчет MVVM почитал, но кажется это уже слишком глубоко если можно так выразится. Мне сейчас просто нужно правильно определить классы, их связь - для начала, но в любом случае спасибо
Кстати говоря про классы и их связь - если время позволяет, почитайте про паттерны.
0
2 / 2 / 0
Регистрация: 22.09.2012
Сообщений: 202
15.01.2013, 17:41  [ТС]
Цитата Сообщение от Rockedit Посмотреть сообщение
Я думаю, вам поможет - "Сериализация"
Возник вопрос по поводу сериализации, допустим я записываю массив в файл(сохраняю игру) трижды, под разными именами, как тогда можно десериализовать конкретный массив? Т.е. по имени сохраненной игры соотв массив.
каждый раз в новый файл как то не хочется.
0
 Аватар для Wolkodav
842 / 480 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
15.01.2013, 18:49
Ну сопоставить в файли соответствие массиву- имя. И по введёному имени десериализировать.
0
2 / 2 / 0
Регистрация: 22.09.2012
Сообщений: 202
15.01.2013, 21:30  [ТС]
Цитата Сообщение от Wolkodav Посмотреть сообщение
Ну сопоставить в файли соответствие массиву- имя
я чет понять не могу, как сопоставить то?
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6101 / 4957 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
16.01.2013, 15:38
Kreativ, можно сериализовать массив игр (в одном и том же файле), ну или например словарь
Dictionary<string,Game>
то есть словарь, содержащий название игры - игру
1
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9670 / 4823 / 762
Регистрация: 17.04.2012
Сообщений: 9,661
Записей в блоге: 14
17.01.2013, 20:16
Вы не видели примеров сериализации объектов? Тогда вот - MSDN
Сохранение идёт в файл, в который захотите. Просто сохраняете каждый раз массив в отдельный файл.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6101 / 4957 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
17.01.2013, 20:19
tezaurismosis, вопрос: а как потом эти массивы загружать, если не знать имя игры? То есть пользователь сохранил игру "qwerty.save", как потом при запуске программа будет его загружать? Со словарем-то просто: при любом имени можно пройтись foreach, к тому же будет всего 1 файл сохранения, а не 100500, а вот для каждой игры свой файл - это не очень. Особенно, если нужно сохранения удалять.
0
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9670 / 4823 / 762
Регистрация: 17.04.2012
Сообщений: 9,661
Записей в блоге: 14
19.01.2013, 23:00
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
 Аватар для Psilon
6101 / 4957 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
19.01.2013, 23:01
tezaurismosis, если мы заранее не знаем имени игры, как мы его восстановим?
Хотя лучше действительно в разные файлы Но в один массив проще
1
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9670 / 4823 / 762
Регистрация: 17.04.2012
Сообщений: 9,661
Записей в блоге: 14
19.01.2013, 23:13
Psilon, если не знаем, то да. А я представил себе загрузочный экран типа:
Code
1
2
3
4
5
======= LOAD GAME ========
** 1.sav -------- <Load> |
** 2.sav -------- <Load> |
** n.sav -------- <Load> |
--------------------------
Какой надо - загружаешь.
1
2 / 2 / 0
Регистрация: 22.09.2012
Сообщений: 202
20.01.2013, 11:07  [ТС]
Извините, что так долго не отвечал,
tezaurismosis, действительно может быть будет лучше в разные файлы, я повспоминал игры какие играл, все профили хранились раздельно
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.01.2013, 11:07
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru