Вторник, 15 Октября 2019, 22:25

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Программирование » Программирование .NET » Как реализовать в С# такой функционал? (помогите разобраться)
Как реализовать в С# такой функционал?
KamiRoninДата: Суббота, 22 Июня 2013, 23:27 | Сообщение # 1
почти ветеран
Сейчас нет на сайте
Доброго времени суток всем!

Суть задачи:
1. Есть игра ai-challenge.com. Там пишется код ИИ к машине на поле - она ездит, стреляет, и собирает бонусы. Суть игры в написании этого самого ИИ на JavaScript (не спешите, я воспроизвожу сам движок на C#) с использованием некоего API.
2. Доступ для нашего скрипта (ИИ) дается только ВНУТРИ ОДНОЙ ФУНКЦИИ, которая использует АPI (т.е. я не могу выйти за пределы апи и функции - таковы условия игры).
2. Внутри API машины есть функционал - если нужно сохранить ЛЮБОЕ значение дольше чем один тик игры, используется конструкция:
Код

car.misc.someItem = "blablabla";

и даже так:
Код

car.misc.someItemIsArray = [];
car.misc.someItemIsArray.push("blablabla");

где misc - служебная переменная класса car, а someItem... - пишу я, добавляя тем самым новую пару ключ/значение в эту классовую переменную.

Вопрос: как этого добиться?! Как это реализовано?
при том что:
а. в коде JavaScript я сразу указываю ключ (которого ДО ТОГО нет в коллекции misc).
б. могу внести туда ЛЮБОЙ ТИП данных и даже массив.

возможно ли это сделать на C# и как??! (напомню, я пытаюсь ДЛЯ СЕБЯ - повторить класс car на C#)

если Dictionary<TKey, TValue> - то как задать TValue, чтобы принимал любое значение.
и как сделать, чтобы я мог обращаться к ключу до его прямого добавления к коллекции без образования ошибки?!


Мыслю - значит программирую...
Конструктивная критика - умных ведет к совершенству...
Великие умы обсуждают идеи, средние - обсуждают поступки, а малые - людей.
ArchidoДата: Воскресенье, 23 Июня 2013, 03:50 | Сообщение # 2
Сэнсэй
Сейчас нет на сайте
Цитата (KamiRonin)
если Dictionary<TKey, TValue> - то как задать TValue, чтобы принимал любое значение.

Если есть в наличии .NET 4-ой версии, то можно сделать так:
Код
Dictionary<TKey, dynamic>


Цитата (KamiRonin)
и как сделать, чтобы я мог обращаться к ключу до его прямого добавления к коллекции без образования ошибки?!

А почему бы просто не обработать эту ошибку?
Код

try
{
     dynamic D = Array["Key"];
}
catch (KeyNotFoundException)
{
     //access fail
}


Либо делать
Код

if (Array.TryGetValue("Key", out value))  
{
    ...
}


C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
KamiRoninДата: Воскресенье, 23 Июня 2013, 18:15 | Сообщение # 3
почти ветеран
Сейчас нет на сайте
Цитата (Archido)
dynamic

ага.. эт поможет. фэнкс. не полностью но на 80% точно (проверку типизации в рунтайме писать тоже не два пальца об асфальт)
Цитата (Archido)
А почему бы просто не обработать эту ошибку?
Код
try
{      dynamic D = Array["Key"]; }
catch (KeyNotFoundException)
{      //access fail }


да. и это тоже правильно полностью, вот только как быть если компилятор пишет "такого поля в этом классе нет" до входа в защищенный блок?!? или я просто не знаю чего то про защищенные блоки и перегрузку разименования полей (вроде это запрещено)
Archido фэнкс!

пока вышел из положения через ФУНКЦИЮ:
вместо
Код

car.misc.someItem = 1.7f;

пишу
Код

car.misc.Add("someItem", 1.7f);

где Add функция класса с проверкой наличия ключа (добавляется если нету) и все.
вот только КАК ТО ЖЕ ЧЕЛ РЕАЛИЗОВАЛ эту фичу.. может это действительно особенности javascript - подозреваю что класс написан на нем sad


Мыслю - значит программирую...
Конструктивная критика - умных ведет к совершенству...
Великие умы обсуждают идеи, средние - обсуждают поступки, а малые - людей.
ArchidoДата: Понедельник, 24 Июня 2013, 15:24 | Сообщение # 4
Сэнсэй
Сейчас нет на сайте
Цитата (KamiRonin)
вот только КАК ТО ЖЕ ЧЕЛ РЕАЛИЗОВАЛ эту фичу.. может это действительно особенности javascript - подозреваю что класс написан на нем

Да, в JavaScript'e объект - и есть по-сути ассоциативный массив, который содержит его поля.

Цитата (KamiRonin)
пока вышел из положения через ФУНКЦИЮ

Вполне годный вариант.


C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
Форум игроделов » Программирование » Программирование .NET » Как реализовать в С# такой функционал? (помогите разобраться)
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2019 Рейтинг