|
Модератор
|
|
Пример создания игры 204826.06.2019, 16:07. Показов 29629. Ответов 36
Метки 2048, datatemplate, gam, icommand, inotifypropertychanged, inpc, model, model-view-viewmodel, mvvm, view, viewmodel, wpf (Все метки)
Тема из цикла Готовые решения, примеры и рекомендации начинающим на WPF [Элд Хасп]
Пример практической реализации игры по мотивам темы Суммирование элементов в 2048 от nekonihilist. 1) Алгоритм игры Не мудрствуя лукаво возьмём из Вики https://ru.wikipedia.org/wiki/... 1%80%D0%B0)
8
|
|
| 26.06.2019, 16:07 | |
|
Ответы с готовыми решениями:
36
Алгоритм сложения чисел игры 2048 Пример создания приложения для тестирования [WPF, Элд Хасп] Пример создания match-3 игры |
|
Модератор
|
|
| 10.11.2019, 16:43 [ТС] | |
|
sttrox, это не Модель, а тип для представления данных.
В данном случае не видел смысла для разделенной реализации ПРЕДСТАВЛЕНИЯ и БИЗНЕС-ЛОГИКИ для типа ячейки. Так как весь смысл этого типа и заключается в представлении. В других случаях, конечно, надо разделять типы для данных (DTO типы) и типы для их представления.
0
|
|
|
WPF Разработчик
463 / 167 / 42
Регистрация: 20.02.2018
Сообщений: 285
|
|
| 10.11.2019, 16:51 | |
|
Элд Хасп, с такой идеей можно везде не увидеть смысла и мешать Model с ViewModel.
Слова о том, что следует писать всегда правильно, что бы не ошибаться принадлежат Вам. На мой взгляд следовало уделить особое внимание соблюдению MVVM в этом примере. Поскольку код программы это пример для подражания. И не знай я концепций сделал бы множество программ с данной ошибкой, поскольку она очень удобна. Всегда лень оборачивать Model в ViewModel
0
|
|
|
Модератор
|
|
| 10.11.2019, 17:07 [ТС] | |
|
sttrox, это игра.
И источник данных это сама View. По этому В ДАННОМ СЛУЧАЕ нет смысла в разделении представления и бизнес-логики в типе данных ячейки. Так же где-то в разделе есть тема о практических реализациях MVVM. Там в обсуждении более опытные товарищи высказались за то, что на практике часто используется в Модели и View одни и те же типы данных. И это не является нарушением MVVM. Нарушением MVVM является работа с данными в View: создание, удаление, изменение и т.п. Добавлено через 1 минуту sttrox, посмотрите тему Классы Model в View
0
|
|
|
WPF Разработчик
463 / 167 / 42
Регистрация: 20.02.2018
Сообщений: 285
|
|
| 10.11.2019, 22:15 | |
|
Элд Хасп, Вам ответили здесь, что в V можно передать не Model с логикой, а DTO
которое является простым хранилищем информации. У Вас же, модель имеет бизнес-логику и отображается на UI как VM, поскольку имеет логику отображения. Storm23, Вы пишите здесь, что в DTO позволительно реализовывать INotifyPropertyChanged, возникает два вопроса. 1. Каким образом отличать DTO от VM, если содержание у них будет очень да же похожее. 2. Как сериализовать эту DTO, ведь интерфейсы не сериализуются (по крайней мере xml)
0
|
|
|
Модератор
|
|
| 11.11.2019, 04:48 [ТС] | |
|
sttrox, какую бизнес-логику имеет тип Cell?
Типе только один метод перемещения значения в другую клетку. Сам тип создан как универсальный, может использоваться где угодно. Допустим, вы же можете использовать тип string и в Модели, и в View. Или тип System.Point. И множество других дефолтных Net типов. Это же не является нарушением MVVM. Так почему же нельзя создать свой такой же универсальный тип?
1
|
|
|
Модератор
|
|||||||
| 11.11.2019, 05:13 [ТС] | |||||||
Не сериализуются свойства в типе интерфейса. Сам же тип с объявленным интерфейсом сериализуются без проблем.
1
|
|||||||
|
WPF Разработчик
463 / 167 / 42
Регистрация: 20.02.2018
Сообщений: 285
|
|
| 11.11.2019, 12:54 | |
|
Элд Хасп, да, Вы правы, Ваш Cell является подобием того же System.Windows.Point.
Не выходит ли что Cell является DTO, а не моделью? Добавлено через 1 час 6 минут Элд Хасп, нет, Cell не является DTO, поскольку имеет некую логику, тогда что же это такое? Так же что такое System.Windows.Point
0
|
|
|
Модератор
|
|
| 11.11.2019, 12:55 [ТС] | |
|
sttrox, функции Модели это работа с данными.
А что это за типы данных уже роли не играет. Может быть string, может Point, а может и свой кастомный Cell. DTO тип это простой тип-контейнер для обмена данными. Кроме свойств в нем почти нет функционала. При необходимости простейшие методы сравнения, парсинга, ToString и т.д. Какого-то определенного стандарта, что допустимо для DTO типа, а что нет - я не встречал.
0
|
|
|
WPF Разработчик
463 / 167 / 42
Регистрация: 20.02.2018
Сообщений: 285
|
|
| 11.11.2019, 13:06 | |
|
Элд Хасп, Да, я понял что DTO это только данные.
Теперь вопрос в том, что такое Cell, она фактически то же самое что и Point. Что это в рамках архитектуры? Модели? Сущности?
0
|
|
|
0 / 0 / 0
Регистрация: 27.05.2022
Сообщений: 10
|
|
| 01.06.2022, 13:52 | |
|
можете подсказать что такое get; set;? Зачем оно нужно
0
|
|
|
Модератор
|
||
| 01.06.2022, 14:35 [ТС] | ||
|
В современном Шарпе публичные поля не используются. Это рудимент "ранних эпох" оставленный для совместимости.
0
|
||
|
0 / 0 / 0
Регистрация: 27.05.2022
Сообщений: 10
|
||||||
| 02.06.2022, 10:21 | ||||||
|
Я все таки как-то начал понимать этот код, но застопорился на ViewModel! можете подсказать что такое "сеттер", PropertyChanged, e.PropertyName, string.IsNullOrEmpty(propertyName) || modelProperties.IndexOf(propertyName) >= 0, OnPropertyChanged(propertyName), RestartCommand = new RelayCommand(par => ReStart()),
public RelayCommand RestartCommand { get; }
0
|
||||||
|
Модератор
|
||||||||
| 02.06.2022, 10:42 [ТС] | ||||||||
set свойства.В XAML это Setter Стиля.PropertyChanged - это событие интерфейса INotifyPropertyChanged.PropertyChanged через который происходит уведомление об изменении свойства.e.PropertyName - это свойство аргумента этого события PropertyChangedEventArgs.PropertyName которое содержит строковое имя изменившегося свойства.Если оно null или string.Empty - значит изменились все свойства. Если имя null или Empty - значит изменились все свойств надо выполнить этот блок if. Или если имя свойства есть в списке modelProperties, то тоже надо выполнить этот блок if. par => ReStart().На уровне Модели удобно работать с двумерным представлением поля. Но WPF плохо "понимает" многомерные коллекции, поэтому в VM производится отражение двумерного поля Модели в последовательный список. Добавлено через 3 минуты
0
|
||||||||
|
0 / 0 / 0
Регистрация: 27.05.2022
Сообщений: 10
|
|
| 02.06.2022, 11:32 | |
|
Ну, можете дать пожалуйста литературу по c#
Добавлено через 5 минут Можете сказать пожалуйста по каким источникам вы учились
0
|
|
|
Модератор
|
|||
| 02.06.2022, 19:04 [ТС] | |||
|
FAQ для студентов или школьников Где учиться программированию, с чего начинать? С чего начать изучение C#? Добавлено через 2 минуты Для чего вообще в целом нужен с# и что на нём пишут?
0
|
|||
| 02.06.2022, 19:04 | |
|
Помогаю со студенческими работами здесь
37
Симуляция игры 2048 Перевод кода игры 2048 с С# на С++ Код игры "2048" на Java, часть кода не понятна Core 2 Duo E4400,Geforce 8600 GT Super,DIMM 2048 MB,Micro Star Internetional - что поменять для игры в GTA 4 на максимальных настройках? Есть такой код для игры 2048 на C++ в консоли, но после компиляции, после введения имени игрока все крашится, в чем беда Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Хитросплетение родственных связей пантеона греческих богов.
russiannick 14.05.2026
Однооконник, позволяющий узреть и изучить отдельных героев древней Греции.
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible". . .
|
[golang] Угол между стрелками часов
alhaos 12.05.2026
По заданным значениям часа и минуты необходимо определить значение меньшего угла между стрелками аналогового циферблата часов.
import "math"
func angleClock(hour int, minutes int) float64 {
. . .
|
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo
https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html
и его же старой инструкции по установке Lazarus с gtk2. . .
|
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер.
Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
|
|
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта
Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
|
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром.
возможно получится прикрутить интерпретатор питон для кастомизации игровой логики.
что есть на текущий момент:. . .
|
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2.
Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
|
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
|