Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Клуб программистов > Свободное общение
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.01.2012, 19:12   #1
13th
Форумчанин
 
Аватар для 13th
 
Регистрация: 31.12.2008
Сообщений: 634
По умолчанию Вероятность исхода боя в браузерной игре.

Это скорее не вопрос, а крик души разъяснить как происходит этот подсчет.

Желательно с примером, абстрактным . Скажем столкновение воина и лучника.

P.S. гугл уже прогуглен.
Возможно всё
Пишу обо всем
13th вне форума Ответить с цитированием
Старый 15.01.2012, 20:41   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Теория вероятности в помощь.. её используют чтобы получить % поподания в мишень, до того, как это случится.
Человек_Борща вне форума Ответить с цитированием
Старый 15.01.2012, 20:56   #3
Bustle
Interdicted
Участник клуба
 
Аватар для Bustle
 
Регистрация: 25.11.2010
Сообщений: 1,194
По умолчанию

Берутся в сочетания разные факторы.
Например, для атаки можно взять в расчеты:
силу + оружие + владения этим оружием в противовес пойдет оборона противника + обмундирования и т.д. Зависит собственно от факторов самой игры. Там добавить вероятность попадания/отклонения и т.д... Соответственно высчитывать вероятность попадания - оружия + навык + удача. и т.д
Так же сначала надо ответить на вопросы:
Это будет реалистическая симуляция ближнего боя или нет?
Кто будет играть игру? Яростные геймеры которым будет интересно изучать самим систему боя для лучшей игры, или для тех кто будет просто бегать и жать кнопочки на угад...
Будут ли бои игрок против игрока? и т.д...
Love writing code and I am really passionate about it

Последний раз редактировалось Bustle; 15.01.2012 в 21:03.
Bustle вне форума Ответить с цитированием
Старый 15.01.2012, 21:02   #4
13th
Форумчанин
 
Аватар для 13th
 
Регистрация: 31.12.2008
Сообщений: 634
По умолчанию

Это будет браузерная игра=)
А теперь подробнее.
Мы качаем персонажа (хар-ки - ловкость, сила , жизни). Потом он на карте может встретиться либо с силами системы, либо такого же противника. Вот допустим у одного сила -2 , ловкость -3 ,жизнь 4 . У противника сила -4 , ловкость -1 ,жизнь 2

Игрок обладает мечом (шанс удара скажем 80%) , а противник луком(шанс попадания 50%) .

И кто кого ? Суть в том , что происходит ход за ходом. Надо используя ту самую теорию вероятности (которую я уже начал читать) просчитать.

У игрока нет возможности управлять боем. Есть возможность сбежать (опять же рассчитать количество потерь при бегтсве) или сражаться , а исход боя определит система и выдаст в виде записи истории боя.
Возможно всё
Пишу обо всем
13th вне форума Ответить с цитированием
Старый 15.01.2012, 21:52   #5
13th
Форумчанин
 
Аватар для 13th
 
Регистрация: 31.12.2008
Сообщений: 634
По умолчанию

не,не . Такие вычисления не практичны. Вот сейчас как раз в первых главах говорится, что когда количество параметров не определено, а полезность произведенных иследований близка к нулю - нужна эта самая теория вероятностей.
Возможно всё
Пишу обо всем
13th вне форума Ответить с цитированием
Старый 15.01.2012, 22:02   #6
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,690
По умолчанию

Хех, то что я написал
Цитата:
А правильнее было сделать так.
бредовый и неустойчивый алгоритм!!! Щас что нибудь придумаю )))

Зная параметры воинов проводишь несколько экспериментов и на основе этих данных получаешь численные характеристики случайных величин.

Код:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
int main(int argc, char** argv)
{
    double P1 = 0.8, P2 = 0.5, D, m1, m2, Health1 = 100, Health2 = 120, Damage1 = 12, Damage2 = 16;
    int w1 = 0, w2 = 0;
    srand(time(0));
    for(int i = 0; i < 1000; i++){
        Health1 = 100; Health2 = 120;
        while(true){
            //удар первого
            if((rand()%100)/100.0<P1){
                Health2 -= Damage1;
                if(Health2<=0){
                    w1++;
                    break;
                }
            }
            //удар второго
            if((rand()%100)/100.0<P2){
                Health1 -= Damage2;
                if(Health1<=0){
                    w2++;
                    break;
                }
            }
        }
    }
    m1 = (-1*w2+w1)/1000.0; //момент первого порядка
    m2 = (w2+w1)/1000.0; //момент второго порядка
    D = m2 - m1*m1; //дисперсия
    printf("%lf\n",m1);
    return 0;
}
По этим данным можно сказать что первый воин победит с вероятностью P = w1/1000.0; грубо говоря

Последний раз редактировалось Kostia; 16.01.2012 в 00:26.
Kostia вне форума Ответить с цитированием
Старый 15.01.2012, 23:58   #7
13th
Форумчанин
 
Аватар для 13th
 
Регистрация: 31.12.2008
Сообщений: 634
По умолчанию

так, так, весьма интересно
проясни вот этот участок . Не совсем понятно какой знак между rand() и 100 , и что такое 100.0
Код:
 if((rand()%100)/100.0<P1){
Возможно всё
Пишу обо всем

Последний раз редактировалось 13th; 16.01.2012 в 00:01.
13th вне форума Ответить с цитированием
Старый 16.01.2012, 00:10   #8
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,690
По умолчанию

(rand()%100)/100.0 - случайное число от 0 до 0,99, % это остаток от деления(mod в паскале)

Как вариант это попробовать реализовать НС, с кучей входов, выходов и думаю одного скрытого слоя будет достаточно. На входы можно подавать данных о игроках(жизни, дамаг, наличие зелий и заклинаний, вероятности попаданий...), а на выходе получать состояние здоровья и маны игроков после боя. Обучать сеть можно простым алгоритмом обратного распространения ошибки и метода сопряженных градиентов, хотя можно попробовать и машину опорных векторов. Еще потребуется собрать достаточную выборку для обучения и тестирования сети. Тогда про теорию вероятностей можно забыть, если не вникать в статистическую природу процесса обучения и т.п.

Последний раз редактировалось Kostia; 16.01.2012 в 00:24.
Kostia вне форума Ответить с цитированием
Старый 16.01.2012, 00:13   #9
Bustle
Interdicted
Участник клуба
 
Аватар для Bustle
 
Регистрация: 25.11.2010
Сообщений: 1,194
По умолчанию

http://serenesforest.net/fe10/calc.html
Love writing code and I am really passionate about it
Bustle вне форума Ответить с цитированием
Старый 16.01.2012, 00:14   #10
13th
Форумчанин
 
Аватар для 13th
 
Регистрация: 31.12.2008
Сообщений: 634
По умолчанию

Тогда если переводить на значение,то получится


Код:

if((rand%100)/100.0<P1){
rand = 0.57
и далее начинается интересное . 
rand%100  всегда равно rand 
rand /100 = 0.0057
Или я не прав?
Возможно всё
Пишу обо всем
13th вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
у юзера вопрос по браузерной игре ИгорьЦЦЦ Gamedev - cоздание игр: Unity, OpenGL, DirectX 5 02.12.2011 15:12
подредактировать античит к игре игре Nhl 09 (античит написан на дельфи) Viper18 Фриланс 3 03.08.2011 17:37
Вероятность 60% Editor Общие вопросы Delphi 9 03.02.2010 19:04