Где я использую делегатов? [закрытый]

Я рекомендую прогрессивную процентную систему, например Blizzard: http://www.shacknews.com/onearticle.x/57886

Как правило, вы запускаете RNG, затем сравниваете его к значению для определения успеха или нет. Это может выглядеть так:

if ( randNumber <= .2 ) {
   //Critical
} else {
   //Normal
}

Все, что вам нужно сделать, это добавить прогрессивное увеличение базового шанса ...

if (randNumber <= .2 + progressiveChance ) {
   progressiveChance = 0;
   //Critical
} else {
   progressiveChance += CHANCE_MODIFIER;
   //Normal hit
}

Если вам нужно, чтобы он был более причудливым его довольно легко добавить больше. Вы можете ограничить количество, которое progressiveChance может получить, чтобы избежать 100% -ной критической вероятности или сбросить его на определенные события. Вы также можете увеличить progressiveChance в меньших количествах с каждым повышением с помощью чего-то вроде progressiveChance + = (1 - progressiveChance) * SCALE, где SCALE & lt; 1.

106
задан slipsec 9 August 2013 в 13:34
поделиться

7 ответов

делегат А является именованным типом, который определяет конкретный вид метода. Так же, как определение класса размечает всех участников для данного вида объекта, который это определяет, делегат размечает сигнатуру метода для вида метода, который это определяет.

На основе этого оператора, делегат является указателем функции, и он определяет то, на что похожа та функция.

яркий пример А для приложения реального мира делегата Предикат . В примере из ссылки Вы заметите тот Массив. Найдите , берет массив для поиска и затем предикат для обработки критериев того, что найти. В этом случае это передает метод ProductGT10, который соответствует подписи Предиката.

33
ответ дан Dale Ragan 24 November 2019 в 03:49
поделиться

Одно общее использование делегатов к универсальным Спискам через делегатов Действия (или его анонимный эквивалент) для создания короткой foreach операции:

myList.Foreach( i => i.DoSomething());

я также нахожу делегата Предиката довольно полезным в поиске или сокращении Списка:

myList.FindAll( i => i.Name == "Bob");    
myList.RemoveAll( i => i.Name == "Bob");

я знаю, что Вы не сказали требуемого кода, но я нахожу легче выразить его полноценность через код.:)

17
ответ дан Jon Limjap 24 November 2019 в 03:49
поделиться

События привязки к Обработчикам событий обычно являются Вашим первым введением в делегатов... Вы даже не могли бы знать об использовании их, потому что делегат обернут в классе EventHandler.

13
ответ дан FlySwat 24 November 2019 в 03:49
поделиться

Если Вы интересуетесь наблюдением, как шаблон Делегата используется в реальном коде, посмотрите не далее, чем Какао на Mac OS X. Какао является предпочтительным инструментарием UI Apple для программирования в соответствии с Mac OS X и кодируется в Objective C. Это разработано так, чтобы каждый компонент UI был предназначен, чтобы быть расширенным через делегацию вместо разделения на подклассы или других средств.

Для получения дополнительной информации, я рекомендую проверить то, что Apple должна заявить о делегатах здесь .

5
ответ дан spate 24 November 2019 в 03:49
поделиться

У меня был проект, который использовал win32 Python.

из-за различных причин, некоторые модули использовали odbc.py для доступа к DB и другим модулям - pyodbc.py.

была проблема, когда функция должна была использоваться обоими видами модулей. Этому передали объект соединения ему как аргумент, но тогда это должно было знать, использовать ли dbi.dbiDate или дату и время для представления времен.

Это было то, потому что odbc.py ожидал, как значения в SQL-операторах, даты как dbi.dbiDate, тогда как pyodbc.py ожидал значения даты и времени.

Одна дальнейшая сложность была то, что объекты соединения, созданные odbc.py и pyodbc.py, не позволили устанавливать дополнительные поля.

Мое решение состояло в том, чтобы обернуть объекты соединения, возвращенные odbc.odbc (...) и pyodbc.pyodbc (...) классом делегата, который содержит желаемую функцию представления времени как значение дополнительного поля, и который делегирует все другие полевые запросы к объекту первоначального соединения.

5
ответ дан Omer Zak 24 November 2019 в 03:49
поделиться

Быстрый поиск Google придумал этот http://en.wikipedia.org/wiki/Delegation_pattern . В основном в любое время то, что Вы используете объект, что вперед это - вызовы к другому объекту тогда, Вы делегируете.

1
ответ дан martinatime 24 November 2019 в 03:49
поделиться

У меня был тот же вопрос, что и у вас, и я обратился к этому сайту за ответом.

Очевидно, я не понял его лучше, хотя и пролистал примеры в этой теме.

Теперь, когда я прочитал, я нашел отличное применение делегатам: http://www.c-sharpcorner.com/UploadFile/thiagu304/passdata05172006234318PM/passdata.aspx

Это может показаться более очевидным для новых пользователей, потому что Forms намного сложнее передавать значения, чем ASP.NET сайты с POST/GET (QueryString) ...

В основном вы определяете делегат, который принимает "TextBox text" в качестве параметров.

// Form1

// Class Property Definition
public delegate void delPassData(TextBox text);


// Click Handler
private void btnSend_Click(object sender, System.EventArgs e)
{
     Form2 frm= new Form2();
     delPassData del=new delPassData(frm.funData);
     del(this.textBox1);
     frm.Show();
}

// РЕЗЮМЕ: Определите делегат, инстанцируйте новый класс Form2, назначьте функцию funData() делегату, передайте делегату ваш textBox. Покажите форму.

// Form2

public void passData(TextBox txtForm1)
{

     label1.Text = txtForm1.Text;
}

// РЕЗЮМЕ: Просто возьмите TextBox txtForm1 в качестве параметров (как определено в делегате) и присвойте text метки textBox'у.

Надеюсь, это поможет вам в использовании делегатов :) ..

5
ответ дан 24 November 2019 в 03:49
поделиться