Форум программистов, компьютерный форум, киберфорум
Unity, Unity3D
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/55: Рейтинг темы: голосов - 55, средняя оценка - 4.76
399 / 308 / 104
Регистрация: 07.05.2017
Сообщений: 2,225

Интерфейс C#, где может пригодиться в создании игр

10.10.2019, 19:44. Показов 10637. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ребята, всем привет !
как то мало инфы по использованию интерфейсов в программировании игр. не подскажите ,чем они полезны и в каких случаях стоит их писать ?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.10.2019, 19:44
Ответы с готовыми решениями:

Для чего может пригодиться язык C#?
Я новичек в программировании (знаю pascal, html, css). Интересуют несколько вопросов по языку C#, чтобы окончательно определиться с ним: ...

Сделал урок,кому то может пригодиться Pytnon 3.4, PyQt4, cx freeze, Windows
https://www.youtube.com/watch?v=oQLCj3CNwVg Видео урок тут: https://www.youtube.com/watch?v=oQLCj3CNwVg Инструкция: Я...

Где использовать интерфейс, а где абстрактный класс?
Начал знакомиться с Явой и не могу понять такую вещь: как понять, когда использовать интерфейс, а когда использовать абстрактный класс? ...

3
 Аватар для wmysterio
295 / 244 / 128
Регистрация: 24.12.2014
Сообщений: 708
10.10.2019, 20:17
Цитата Сообщение от Gammister Посмотреть сообщение
чем они полезны и в каких случаях стоит их писать ?
Я обычно использую при реализациях шаблонов проектирования.

Ещё часто надо связать разные иерархии классов, но так, чтобы у "кота не было количество окон, а у дома - количества ног". То есть, для упрощения иерархии классов. Для примера, у меня в игре урон может наносить заклинание и оружие. Я воздаю интерфейс IDamage, где есть свойства диапазона урона и дистанции. Тогда я реализую этот интерфейс в заклинаниях и оружии. Потом этот интерфейс можно использовать для других сущностей, которые могут наносить урон в определённом радиусе. И если мне нужно показывать информацию о уроне, в метод я принимаю интерфейс, тем самым позволяя передавать туда объекты с разных иерархий классов, а не штаповать перегрузки метода, где будет приниматься объекты каждой иерархии классов.

Вообще эта тема не поместится в один комментарий. Проще найти информацию в интернете. Её там полно. Тем более в программировании игр. Просто там вместо интерфейсов используется множественное наследование (C/C++). Собственно интерфейсы позволяет сделать множественное наследование, то есть множественную реализацию интерфейсов.
0
399 / 308 / 104
Регистрация: 07.05.2017
Сообщений: 2,225
10.10.2019, 22:25  [ТС]
очень интересно привел пример. а где эта инфа ? может у тебя есть статейки где почитать ?

Добавлено через 26 секунд
какие нибудь ссылочки... ты же откуда то узнал про это

Добавлено через 58 секунд
или хотя бы простенький пример кода в использовании

Добавлено через 11 минут
и влияет это на производительность игры ,или это исключительно для удобства проектирования ?
0
 Аватар для wmysterio
295 / 244 / 128
Регистрация: 24.12.2014
Сообщений: 708
10.10.2019, 23:17
Лучший ответ Сообщение было отмечено Gammister как решение

Решение

Цитата Сообщение от Gammister Посмотреть сообщение
какие нибудь ссылочки... ты же откуда то узнал про это
Там, откуда и все остальные. Вычитал всё, что мог и искал где он применяется. Далее искал себе задания и практиковался. Потом уже интуитивно можно предвидеть в каких случаях можно/надо заюзать интерфейс. Это уже приходит с опытом. Ну вот тебе ссылка. Интерфейс - это приблуда C#, а не Unity.

Цитата Сообщение от Gammister Посмотреть сообщение
или хотя бы простенький пример кода в использовании
Тяжело привести нормальный пример, чтобы было сразу понятно. Ну вот пример с теми же повреждениями (писал без студии, могут быть ошибки):
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
public interface IDamage {
 
    float MinDamage { get; }
    float MaxDamage { get; }
    float MinRange { get; }
    float MaxRange { get; }
 
}
 
public enum TypeOfWeapon {
    Sword,
    Axe,
    Hammer,
    Dagger
}
 
public abstract class Weapon : IDamage {
 
    protected minDamage = 0f;
    protected minRange = 1f;
    protected maxRange = 2f;
 
    public float MinDamage { get { return minDamage; } }
    public float MaxDamage { get { return minDamage * 100f; } }
    public float MinRange { get { return minRange; } }
    public float MaxRange { get { return maxRange; } }
 
    public TypeOfWeapon WeaponType { get; }
 
    public Weapon( TypeOfWeapon weaponType ) {
        WeaponType = weaponType;
    }
 
}
 
public abstract class Spell : IDamage { 
 
    protected minDamage = 0f;
    protected minRange = 1f;
    protected maxRange = 2f;
 
    public float MinDamage { get { return minDamage; } }
    public float MaxDamage { get { return minDamage * 100f; } }
    public float MinRange { get { return minRange; } }
    public float MaxRange { get { return maxRange; } }
 
    public Spell() {  }
 
}
 
/* *** *** *** */
 
public class Dagger : Weapon {
 
    public Dagger() : base( TypeOfWeapon.Dagger ) {
        minDamage = 25f;
        maxRange = 1.5f;
    }
 
}
 
public class Curse : Spell {
 
    public Curse() : base() {
        minDamage = 15f;
        maxRange = 30f; 
    }
 
}
 
/* *** *** *** */
 
public static class DebugPrint {
 
    public static void PrintAnyDamageSubject( IDamage anyIDamageSubject ) {
        Debug.Log( $"Min Damage: {anyIDamageSubject.MinDamage}\tMax Damage: {anyIDamageSubject.MaxDamage }\tMin Range: {anyIDamageSubject.MinRange }\tMax Range: {anyIDamageSubject.MaxRange }" );
    }
 
}
 
/* *** *** *** */
class Example : MonoBehavior {
 
    void Start() {
 
        var dagger = new Dagger();
        var curse = new Curse();
 
        DebugPrint.PrintAnyDamageSubject( dagger ); // dagger damage info
        DebugPrint.PrintAnyDamageSubject( curse ); // curse damage info
 
    }
 
}
Хоть "dagger" и "curse" и в разных иерархиях, но объединяющий их интерфейс "IDamage" позволяет передать в метод "DebugPrint.PrintAnyDamageSubject" оба объекта. Это одна из возможностей реализации.

Цитата Сообщение от Gammister Посмотреть сообщение
и влияет это на производительность игры ,или это исключительно для удобства проектирования ?
Я для удобства, но вряд ли он скажется на производительность игры сильнее, чем самый обычный класс.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.10.2019, 23:17
Помогаю со студенческими работами здесь

Графический интерфейс для игр
Здравствуйте форумчане, хочу потренироваться, в частности в написании игр, изучаю С++, думаю на чем делать графику. Посоветуйте пожалуйста:...

Использование массивов в создании некоторых игр
Помогите понять, как используются массивы для создания игр. Таких как змейка, три в ряд, морской бой, тетрис наконец). Я гуглил, но ничего...

Компетентность программиста в создании малых игр!
Господа,3 раза пытался опираясь на видео скопипастить игру пятнашки : https://www.youtube.com/watch?v=pSgq6QtcoDc ...

Графика при создании игр с нуля
Если создавать игры с нуля (на C++), то для работы с графикой подойдут OpenGL или SFML? И как они: в плане возможностей в плане...

Как используются массивы при создании игр?
а как используются массивы при созданий игр ? и вообще для чего они !?


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки 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 Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru