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

Switch - стоит ли?

19.03.2019, 15:16. Показов 1338. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Итак, суть в том, что я (пытаюсь) пишу игру текстовую. Мне нужен список монстров (он уже есть) и где-то, относительно выбранного имени, должны присваиватся характеристики. Сейчас я использую для этого switch от имени монстра. Но разумно ли это и главное будет ли такая структура грузить игру?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.03.2019, 15:16
Ответы с готовыми решениями:

Switch . Как присвоить переменной значение из Switch в default
Добрый день подскажите как реализуется данный код . Как взять значение switch если выпал default ? public int Parse() { int...

Как сделать чтобы Switch работал в другом Switch'e?
Как сделать что бы Switch работал в другом Switch'e? Вот допустим выбираем один пункт и в зависимости от выбранного нами пункта последующие...

Рефакторинг switch внутри switch в static классе
Добрый день. Подскажите, как корректно обойти конструкцию switch case внутри switch case в статическом классе. Наткнулся на stackoverflow...

11
880 / 559 / 291
Регистрация: 21.11.2012
Сообщений: 1,554
19.03.2019, 15:30
MrDreamer93,

можно вынести характеристики монстров в отдельные файлы xml или json. для каждого свой. т.о. можно будет извне настраивать каждого монстра
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
19.03.2019, 15:40
Цитата Сообщение от MrDreamer93 Посмотреть сообщение
Мне нужен список монстров
Я так понимаю, это List<T>
Цитата Сообщение от MrDreamer93 Посмотреть сообщение
относительно выбранного имени, должны присваиваться характеристики
Имени или типа монстра?
Цитата Сообщение от MrDreamer93 Посмотреть сообщение
и где-то
Создайте базовый класс (возможно абстрактный) - Monster.
От него наследуйте производные классы (типы) монстров.
В базовом объявите виртуальный (или даже абстрактный) метод Set, задающий начальные значения характеристик.
Метод перегрузите в каждом из производных классов.
Можно обойтись и без этого метода, а задавать характеристики в конструкторах производных классов.
Список создавайте по типу базового класса (List<Monster>).
0
0 / 0 / 0
Регистрация: 17.08.2017
Сообщений: 68
19.03.2019, 15:47  [ТС]
Цитата Сообщение от hamin Посмотреть сообщение
можно вынести характеристики монстров в отдельные файлы xml или json. для каждого свой. т.о. можно будет извне настраивать каждого монстра
Понятно, что можно их вынести. Но это не решает проблемы выбора нужного файла с нужным монстром

Добавлено через 2 минуты
Цитата Сообщение от Даценд Посмотреть сообщение
Я так понимаю, это List<T>
Да, это лист, содержащий имена монстров
Цитата Сообщение от Даценд Посмотреть сообщение
Создайте базовый класс (возможно абстрактный) - Monster.
Хм... Не думал делать производные классы каждого отдельного монстра... Но если желательно избавится от switch, то думаю так и сделаю
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
19.03.2019, 15:54
Цитата Сообщение от MrDreamer93 Посмотреть сообщение
Не думал делать производные классы каждого отдельного монстра...
Не для монстра, а для типа монстра.
Т.е. абстрактный класс Monster.
Производные Orc, Ogr, Troll.
Список
C#
1
List<Monster> monsters = new List<Monster>;
Сами монстры:
C#
1
2
3
Troll trollVasya = new Troll();
Troll trollIgor = new Troll();
Orc orcDusya = new Orc();
Заполняем список:
C#
1
2
3
monsters.Add(trollVasya);
monsters.Add(trollIgor);
monsters.Add(orcDusya);
0
0 / 0 / 0
Регистрация: 17.08.2017
Сообщений: 68
19.03.2019, 15:57  [ТС]
Цитата Сообщение от Даценд Посмотреть сообщение
Не для монстра, а для типа монстра.
Да, естественно для типа. Неверно выразился
0
 Аватар для aenye
304 / 186 / 45
Регистрация: 05.07.2018
Сообщений: 580
19.03.2019, 15:58
MrDreamer93, В качестве продолжения варианта от Даценд
Можете использовать словарь Dictionary<T, V> вместо списка.
В качестве ключа использовать имя монстра, а в качестве значения - ссылку на объект самого монстра с нужными характеристиками.
0
0 / 0 / 0
Регистрация: 17.08.2017
Сообщений: 68
19.03.2019, 16:10  [ТС]
Цитата Сообщение от Даценд Посмотреть сообщение
От него наследуйте производные классы (типы) монстров.
В этом случае (если я использую классы для типов монстров) у меня возникает другой вопрос. Каким образом можно случайно вызывать нужный тип? Раньше в switch у меня стоял простой Random из списка имен монстров. С классами такое не прокатит, насколько я знаю
0
880 / 559 / 291
Регистрация: 21.11.2012
Сообщений: 1,554
19.03.2019, 16:25
MrDreamer93,

из списка монстров так же случайно можно получить монстра
C#
1
2
var rnd = new Random();
var monster = monsters[rnd.Next(0, monsters.Length)];
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
19.03.2019, 16:59
Лучший ответ Сообщение было отмечено MrDreamer93 как решение

Решение

Цитата Сообщение от MrDreamer93 Посмотреть сообщение
Каким образом можно случайно вызывать нужный тип?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
using System;
 
class Monstrohood
{
 
    static void Main(string[] args)
    {
        Type[] types = { typeof(Orc), typeof(Ogr), typeof(Troll) };
        Random rnd = new Random();
        Monster monster;
        for (int i = 0; i < 10; i++)
        {
            int whoismonster = rnd.Next(types.Length);
            monster = (Monster)Activator.CreateInstance(types[whoismonster]);
            Console.WriteLine(monster.AboutMe());
        }
        Console.ReadKey();
    }
 
    abstract class Monster  { abstract public string AboutMe(); }
    class Orc : Monster { public override string AboutMe() { return "Я - орк!"; } }
    class Ogr : Monster { public override string AboutMe() { return "Я - огр!"; } }
    class Troll : Monster { public override string AboutMe() { return "Я - тролль!"; } }
}
1
 Аватар для Young Vu
133 / 103 / 43
Регистрация: 01.03.2018
Сообщений: 291
19.03.2019, 17:13
Добавлю свои пять копеек
прочитайте про паттерн фабрика, у вас как раз он самый
0
0 / 0 / 0
Регистрация: 17.08.2017
Сообщений: 68
19.03.2019, 17:21  [ТС]
О, вот оно как. Спасибо.
Пойду разбирать код и почитаю про фабрику
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.03.2019, 17:21
Помогаю со студенческими работами здесь

Power Switch и Reset Switch
Здравствуйте. Покажите мне пожалуйста на этой материнской плате где находится power switch пин и reset switch... Благодарю от всей души.

Подключить switch к другому switch
Ребята у меня такая просьба. У меня сеть на 10 компьютеров они все подключены через switch, но мне надо к этому switch подключить еще один...

Изменить cell.accessorytype тип на тип Switch (с кнопкой Switch)
Добрый день! 1) не могу понять как сделать кастомный тип ячейки в tableview что бы в нем был обычный switch (стандартный). Как сделано в...

Дайте совет стоит или не стоит пользоваться этим хостингом
Дайте совет стоит или не стоит пользоваться этим хостингом. Хостинг находится по адресу www.lipak.ru Предложение воспользоваться их...

Стоит ли ставить 10 винду заместо 7 домашней? Стоит ли обновлять с 7 на 10 в автоматическом режиме до июля?
У меня 7 лицензия. Но я не умею ставить винду=( Подскажите мне пожалуйста, стоит ли с виндовс 7 домашней переходить на 10?? Будет ли...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru