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

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

10.10.2019, 19:44. Показов 10577. Ответов 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,211
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
Ответ Создать тему
Новые блоги и статьи
ПЛИС
zxcha1ka_ 27.01.2026
AHDL Разработать программы для синтеза следующих устройств: 1. Параллельного регистра 4-х разрядного с синхронной загрузкой и асинхронным сбросом (обнулением); Пoмoгитe пoжaлyйстa
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru