0

Делаю игру на память при помощи WPF .net framework . Суть игры состоит в следующем: стартовое окно предлагает выбрать сложность (лёгкая, средняя, сложная), нажав на кнопку "Начать игру" окно переключается на игровое, где уже расположено то количество карт соответствующее выбранному уровню сложности. Вверху располагается прогресс-бар показывающий сколько времени осталось. Собственно смысл игры находить 2 пары одинаковых карт (скорее всего вы играли в подобное, либо знаете её правила).

Игру ещё предстоит написать, но в виду того что времени не так много как и опыта - я нуждаюсь в помощи.

У меня есть несколько вопросов, но это не значит что иные советы навредят. Вопросы:

  1. Как связать созданные классы (при помощи "Создать элемент" в проекте)? Я хочу обращаться к классам из других классов, а так же в каждом иметь возможность обращаться к окну (xaml).
  2. Не раз сталкивался с интерфейсом INotifyPropertyChanged и хотелось бы узнать как можно его тут применить. В комплекте к нему вроде как идёт специально обозванный класс ObservableCollection. Как я понимаю интерфейс нужен для извещения об изменении свойств, а класс для их применения?
  3. Как лучше создавать элемент карту (содержит в себе картинку)? Я пробовал создавать через словарь ресурсов, но многое мне до сих пор не понятно. Собственно делал стиль для чек-бокса (потому как мы будем выбирать первую и вторую карты, не больше), добавил border, а на него image. И тут возник вопрос: как добавить свойство source к чек-боксу, что бы можно было в коде спокойно менять ему картинки. Вторая проблема, это триггер, который должен красить border другой цвет когда мнимый чек-бокс отмечен (и к примеру менять размер).
  4. Как будет лучше располагать эти карты (с помощью grid или может datagrid?). Карты будут располагаться согласно "сетке", а перед этим создаваться с... присвоенным идентификатором? Что бы понять какие карты с картинками совпадают.

Следующие вопросы задаю в случае если успею сделать вышеперечисленное, тогда можно будет добавить пару функций

  1. Пользовательский уровень сложности предполагает что можно настроить кол-во пар карт (минимум 8, максимум 15-20), время за которое нужно управится. Вопрос, как к этому лучше подходить?
  2. Выбор карт. Возможность выбора своих картинок для карт (они скорее всего будут копироваться в папку к остальными и нумероваться согласно тому каким по счёту были добавлены), а так же собственно выбор предпочитаемых карт для использования (то есть только выбранные карты будут использоваться в игре) количество выбранных карт должно соответствовать количеству пар карт в выбранном уровне сложности.

На этом пожалуй всё. Я буду благодарен вашей помощи и советам.

  • Вот пример, разберите, как работает, учите MVVM, XAML и привязки данных. Еще пример и еще пример. – aepot Jun 22 '21 at 22:37
  • Что написано на кнопке, которую вы жмете для создания вопроса? "вопрос" или "вопросы"? Первое. Так почему в одном вопросе куча других? SO не форум для поболтушек, хотите этого - идите в чат, а здесь принято задавать один, четко сформулированный вопрос, на который можно дать объективный ответ. Не забывайте, что SO собирает ценную информацию, которая должна быть полезна не только Вам, но и будущим читателям! 2. Многие вопросы из списка возникли у вас из-за того, что вы попросту не стали пробовать сами (например, grid или может datagrid, таблица и сетка). Попробуйте, а уж потом задавайте.
  • – EvgeniyZ Jun 22 '21 at 22:39
  • Необходимо конкретизировать. Этот вопрос в данный момент включает несколько вопросов. Его следует переформулировать, чтобы он был сфокусирован только на одной проблеме. Задавайте вопросы по одному, один вопрос - одна тема. При этом некоторые вопросы на самом деле не вопросы, это ваш собственный выбор, например вопрос номер 4. У вас два варианта реализации? Реализуйте оба в прототипах, потом один какой-то выберите для окончательной версии игры: не стесняйтесь прототипировать! – A K Jun 22 '21 at 22:51
  • @EvgeniyZ Хотелось бы понять с какого вопроса начать. Потому как я впервые работаю с MVVM – Bred Wud Jun 23 '21 at 10:32
  • @BredWud MVVM, это набор рекомендаций и неких подходов, которые помогают сделать проект с минимальными связями компонентов друг с другом. Самое важное, это забыть про textBox1.Text = "Привет мир", забыть вообще про x:Name в XAML разметке, забыть про <Button Click = "..", понять что такое слои (M, V, VM). Просто начните делать, поймите базовые понятия, как все устроено, а дальше уже фантазируйте, делая свою игру такой, какой Вы хотите ее видеть. Вот пример простого MVVM, а вот более интересный вариант. – EvgeniyZ Jun 23 '21 at 10:48
  • @EvgeniyZ да, я читал и смотрел про этот паттерн. Смысл его в разделении визуала и логики, посредством добавления прослойки в виде VM - visualmodel. По одному уроку я написал приложение которое может менять view внутри себя по нажатии на соответствующую кнопку. Другое дело это сделать какие то взаимосвязи между основным окном и другими. К примеру изменил что то в одном и это повлияло на поведение второго. Сейчас это является основным вопросом. – Bred Wud Jun 23 '21 at 10:54
  • @BredWud Зачем вам окна? Делайте одно окно, которое внутри себя меняет контент, этого нынче достаточно для почти всех задач, да и более современно. Передавать данные - вы не умеете передавать данные из класса в класс? Будь у вас окно, или контент окна - все это VM слой, простой класс, со своими органами управления, передача данных там будет точно такая же, как если бы передавали данные из класса в класс. – EvgeniyZ Jun 23 '21 at 11:09
  • @EvgeniyZ в общем спасибо за помощь. Впредь постараюсь задавать более конкретные вопросы. – Bred Wud Jun 23 '21 at 15:02