Модераторы: Rickert

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вычисление боевых единиц 
:(
    Опции темы
knut
Дата 28.10.2006, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 7.2.2006

Репутация: нет
Всего: нет



Доброго времени суток.
Пишу стартегию пока все просто есть 2 обекта танк и солдат.и метод в котором сражаются эти обекты.(метот в базовом классе)
В методе сраженя надо вычислить все свойство этиx обектов т.е мощность,скорость...... и т.д.
и возвротить резултат какой из обектов победил.
Вопрос.
По каим принцыпам делается это?
P.S в какой книге можно прочитать про это?



--------------------
Цитата

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
PM MAIL   Вверх
DarlkElfTen
  Дата 28.10.2006, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 153
Регистрация: 16.3.2006

Репутация: 1
Всего: 1



кхм..
итак мой совет..как самого закоренело седока в этой теме(и я кстати тиже потом нечто такое придумаю)

у нас есть два объекта со сходными характеристиками и своствами
напрмер атака броня и жизни
как вариант можно придумать формулу вычиляющую мощность(условно) объекта - "M"
тогда изходя из этих трех параметров наша переменная будет равна
M=Unit.Atack +Unit.Health*k1+(Unit.Armor-Unit.Attack*k1)*k3
ult kn -коеффицент умножения

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

Это сообщение отредактировал(а) DarlkElfTen - 28.10.2006, 17:29
--------------------
"Две башни"
PM MAIL ICQ   Вверх
knut
Дата 28.10.2006, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 7.2.2006

Репутация: нет
Всего: нет



DarlkElfTen, 
скин если не трундно доки по темеsmile

Добавлено @ 20:56 
DarlkElfTen, 
Цитата

еще написать?

напиши если врея есть будет интересно


--------------------
Цитата

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
PM MAIL   Вверх
DarlkElfTen
Дата 28.10.2006, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 153
Регистрация: 16.3.2006

Репутация: 1
Всего: 1



дык тут же вся идея...
доков у меня нет..мой моск-моя прелесть..а алгоритм примерный расписал..тот что я тее написал подробно не очень(но ты сам просил его описать)))
а вот со вторым про урон - сам ниасилишь??
если нет, то тоггда могу завтра подумать, сеня-уже спать...) smile 
--------------------
"Две башни"
PM MAIL ICQ   Вверх
knut
Дата 28.10.2006, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 7.2.2006

Репутация: нет
Всего: нет



DarlkElfTen, 
буду рад новым идеям smile 


--------------------
Цитата

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
PM MAIL   Вверх
DarlkElfTen
Дата 28.10.2006, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 153
Регистрация: 16.3.2006

Репутация: 1
Всего: 1



*скромнеько*репу бы дал smile 

а по теме:
у меня для мой игры была пара формул расчета урона в зависимости от несолкьих характеристик(только урона а не конечного нанносимого)
т.е. шанс на критический итд

там простая формула...далее мы вычитаем процент брони с умножением на коеффициент K
где K=
100%:тип брони относительно такого то равен <1>
...
итд

понимаешь примрено мои сумбурные речи?)
--------------------
"Две башни"
PM MAIL ICQ   Вверх
dereyly
Дата 29.10.2006, 01:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 217
Регистрация: 16.6.2006

Репутация: 2
Всего: 4



-Чем отличается бездарность от гения
-Бездарность копируют чужие идеи, а гений ворует (с) 
smile
к примеру.... 
http://www.dota.org.ua/articles/dota_mathematics.html
PM MAIL   Вверх
dereyly
Дата 29.10.2006, 01:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 217
Регистрация: 16.6.2006

Репутация: 2
Всего: 4



Или вы хотели что то такое невнятное увидеть

RedUnit[1].type=tank;
BlueUnit[1].type=camikadze;

%цикл скорее всего от времени
BlueUnit[1].hp=BlueUnit[1].hp - RedUnit[1].atack/(BlueUnit[1].ArmorReiting-ReUnit[1].ArmorPierсing(BlueUnit[1].type) )

RedUnit[1].hp=//тоже самое

if (BlueUnit[1].hp<=0)
BlueUnit[1].destroy;

if (RedUnit[1].hp<=0)
RedUnit[1].destroy;

Это сообщение отредактировал(а) dereyly - 29.10.2006, 01:39
PM MAIL   Вверх
DarlkElfTen
Дата 29.10.2006, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 153
Регистрация: 16.3.2006

Репутация: 1
Всего: 1



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


Цитата

BlueUnit[1].hp=BlueUnit[1].hp - RedUnit[1].atack/(BlueUnit[1].ArmorReiting-ReUnit[1].ArmorPierсing(BlueUnit[1].type) )

типично...и не очень грамотно т.к. так придется писать ля аждого объекта..кароче более гибкая формула подошло бы))

зы: в варе хорошая система урона там и спеллыы и простая защита и защита от заклинаний)) smile 
--------------------
"Две башни"
PM MAIL ICQ   Вверх
dereyly
Дата 29.10.2006, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 217
Регистрация: 16.6.2006

Репутация: 2
Всего: 4



Цитата(DarlkElfTen @ 29.10.2006,  12:23)
типично...и не очень грамотно т.к. так придется писать ля аждого объекта..кароче более гибкая формула подошло бы))

да вообще я не претендовал на хорошее качество, влом думать вообщем было, но подумал может для примера стоит написать что нибудь латинецей smile

Код

BlueUnit[1].hp=BlueUnit[1].hp - RedUnit[1].atack/(BlueUnit[1].ArmorReiting-ReUnit[1].ArmorPierсing(BlueUnit[1].type) )


Из жизней танка вычитаются повреждения которые наносятся за один такт допучстим юнит атакует раз в секунду...
эффективные повреждения: повреждения наносимые пехотой делятся(домножаются) на некий коэффициент эффективной брони
коэффициент эффективной брони (BlueUnit[1].ArmorReiting-ReUnit[1].ArmorPierсing(BlueUnit[1].type) ) -- это броня минус функция зависящая от типа брони... т.е если у танка броня 10 а коэффициент пробивания брони у автоматов 0, у гранат допустим 7 (можно в процентах 70% или комбинировано  4 и 50% -- (10-4)*0.5)....
 ну всё это грубо как было замечено

я про то что есть два подхода 
1) делать громоздкие форомулы по расчету повреждения в зависимости от брони и оружий которые пробивают эту броню
2) или нормализовать (как в приведенной ссылке) эфф_жизни=жизни*(1+0.06*броня)


Это сообщение отредактировал(а) dereyly - 29.10.2006, 14:35
PM MAIL   Вверх
DarlkElfTen
Дата 29.10.2006, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 153
Регистрация: 16.3.2006

Репутация: 1
Всего: 1



ну в псчем там тоже неплохо)))
хотя я бы выбрал первый вариант..кстати
там не так уж и громздко..
если мы когданиьт игру доделаем,то там вы увидите..урон зависит от брони участа попадания(если на нем нету брони))))
 smile руки вфферх
--------------------
"Две башни"
PM MAIL ICQ   Вверх
knut
Дата 30.10.2006, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 7.2.2006

Репутация: нет
Всего: нет



Есть 2 юнита танк и армия.Вычисление боевых единиц я зделал так.
Изначально get методами получаем начальные значения боевых единиц .

Просьба дать оценку или можно даже поправки  внести smile 
            
Код

                     //метот в котором сражаются два юнита . е и возврошает победиталя.
                   ///Calculate Accoursy 
       m_Distance = ptT->GetDistance();
       if((m_Distance < 100) && (m_Distance > 0))
           return ptT->GetAccuracy();
           else
        m_accoursy = ptT->GetAccuracy();
        return m_accoursy / m_Distance;
    --------------------------------------------------------------------------      
                            /// Calculate FireRate
                             if((m_Distance < 100) && (m_Distance > 0))
                return ptT->GetFireRate();
           else
           m_FireRate = ptT->GetFireRate();
         return m_FireRate/m_Distance;
            
      --------------------------------------------------------------------------    
                                   ///Calculate Armor 
            m_Armor = ptT->GetArmor();
            m_Powre = ptA->GetPowre();

       if((m_Distance < 100)&& (m_Distance > 0))
        return m_Power - (m_Power * m_Armor);
       else
           return (m_Power/m_Distance) - (m_Power * m_Armor);

               --------------------------------------------------------------------------    
       /// Calculate Life and retuen Result
        if(m_Armor < 0)
            b_Life = false;
            return b_Life;
        else
            b_Life = true
            return m_Life;

       return b_Life;    
    


--------------------
Цитата

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
PM MAIL   Вверх
dereyly
Дата 30.10.2006, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 217
Регистрация: 16.6.2006

Репутация: 2
Всего: 4



Несовсем понятны некоторые вещи
1) Если мы вычисляем Accuracy,  то неплохобы разыграть попал или не попал при выстреле... 
2) m_Armor одновременно и защита в процентах снимающаю повреждения   return m_Power - (m_Power * m_Armor);
и жизни  if(m_Armor < 0)... если броня пробита то это незначит что танк взорван... тогда лучше как в Орионе ввести понятие Structure 
PM MAIL   Вверх
DarlkElfTen
Дата 30.10.2006, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 153
Регистрация: 16.3.2006

Репутация: 1
Всего: 1



а про стракчюр подробнее плиз)
я в орион не играл)

Добавлено @ 15:09 
Цитата

 return m_Power - (m_Power * m_Armor);

не понял что это дает...
мы возратим ноль если M_Armor в процентах = 100
а смысл?

судя по тому , что я понял m_Power - жизни
а m_Armor  -процент брони??

в обчсем я что-то не допер..можешь разъясниить значения всех этих параметров..мой маленький мохг долго  доходит
--------------------
"Две башни"
PM MAIL ICQ   Вверх
knut
Дата 30.10.2006, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 7.2.2006

Репутация: нет
Всего: нет



dereyly,
 
Цитата

 если броня пробита то это незначит что танк взорван

если броня пробиата то она 0 а если менше 0  а то юнит гроxнут.не так?


--------------------
Цитата

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
PM MAIL   Вверх
DarlkElfTen
Дата 30.10.2006, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 153
Регистрация: 16.3.2006

Репутация: 1
Всего: 1



а у пехоты?? smile 
--------------------
"Две башни"
PM MAIL ICQ   Вверх
knut
Дата 31.10.2006, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 7.2.2006

Репутация: нет
Всего: нет



Добрый день
Вот переделанный вариант вычисление боевых единиц 
Цитата

                //Calculate Accoursy 
    u_Distance = ptT->GetDistance();
    if((u_Distance < 100) && (u_Distance > 0))
    {
  int n  = rand()%10;
  if(n%2 == 0)
  {
    b_Hit = true;
    return ptT->GetAccuracy();
  }
  else
  {
     b_Hit = false;
    ptT->m_accuracy = 0;
    return ptT->m_accuracy;
  }
    }
    else
    {
  b_Hit = false;
  ptT->m_accuracy = 0;
  return ptT->m_accuracy;
    }

                   /// Calculate FireRate
           
                    if((u_Distance < 100) && (u_Distance > 0))
          return ptT->GetFireRate();
     else
         u_FireRate = ptT->GetFireRate()/u_Distance;
     return u_FireRate;
        
                            ///Calculate Armor 
    if(b_Hit)
    {
    if((u_Distance < 100) && (u_Distance > 0))    
      return ptA->m_Power - (ptA->m_Power * ptT->m_Armor);
    else
    return (ptA->m_Power/u_FireRate) - (ptA->m_Power * ptT->m_Armor);
    }
    else
    return ptA->m_Armor;

   
                               /// Calculate Life and retuen Result

    // = ptA->GetLife();
    u_Life = ptA->m_Armor + ptA->m_Life;
    if(u_Life < 0)
    b_Life = false;
    else
    {
     b_Life = true;
     return u_Life;
    } 

какие будут замечания?



--------------------
Цитата

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
PM MAIL   Вверх
DarlkElfTen
Дата 31.10.2006, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 153
Регистрация: 16.3.2006

Репутация: 1
Всего: 1



кхм...я не привык к коду на cи...но как тока вникну сразу напишу что не таг)
зы: если "этот нетаг" есть)
--------------------
"Две башни"
PM MAIL ICQ   Вверх
dereyly
Дата 2.11.2006, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 217
Регистрация: 16.6.2006

Репутация: 2
Всего: 4



Код

  int n  = rand()%10;
  if(n%2 == 0)
  {
    b_Hit = true;
    return ptT->GetAccuracy();
  }

Под розыгрышем я имелл несколько другое... вот мы берем к примепру шанс попасть танком в пехоту... ну потом смотрим попал не попал
 
Код

   ac=ptT->GetAccuracy(); // число от 0 до 1
  n=((double)(rand()+1)/(RAND_MAX+2)); //рандом от 0 до 1, т.е разыгрываем шанс попадение
if (ac>n)
   b_Hit=true

Можно шкалу попал не попал разбить на несколько частей попал круто попал или задело взрывной волной... или ввести нечеткие правила попадения с графиком /\

PM MAIL   Вверх
knut
Дата 2.11.2006, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 7.2.2006

Репутация: нет
Всего: нет



dereyly, ну я и розыгрываю . беру число рандом в диапазоне0-10 если оно четное то попал если нет то прамазал.что не так?


--------------------
Цитата

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
PM MAIL   Вверх
dereyly
Дата 2.11.2006, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 217
Регистрация: 16.6.2006

Репутация: 2
Всего: 4



Цитата(knut @ 2.11.2006,  16:59)
dereyly, ну я и розыгрываю . беру число рандом в диапазоне0-10 если оно четное то попал если нет то прамазал.что не так?

Я так и понял что ты так делаешь, но это неправильно
ты разыгрываешь вероятность встречи с динозавром, либо встречу либо нет...
Но точность попадания это функция от дистанции, техники которая стреляет и т.д. мы вычислили эту функцию.. она должна вернуть некое число от 0 до 1 что соответствует шансу попасть.... а затем мы смотрим попал или не попоал в зависимости от этого шанса (не 50% а ac%)... при этом разыгрываем мы число n и просто сравниваем 
if (ac>n)
   b_Hit=true


Это сообщение отредактировал(а) dereyly - 2.11.2006, 18:02
PM MAIL   Вверх
Shurr
Дата 3.11.2006, 01:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 24.10.2006

Репутация: нет
Всего: 7



knut
Извиняюсь что вмешиваюсь в уже развитую дискуссию, но хотелось бы высказать некоторые мысли. Глядя на обсуждение сразу в глаза бросается один факт - разработка ведется "от кода" а не "от идеи". Как мне кажется, правильнее было бы для начала определиться с боевой системой, а уже затем воплощать ее в коде.

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

Для примера, попробую описать примитивные системы взаимодействия.

Для начала надо определиться, что подразумевается под боем. Навскидку можно предложить два разных варианта:
1. Каждое воздействие (выстрел, удар) происходит отдельно, его результаты отображаются пользователю.
2. Рассматривается комплексное взаимодействие, т.е. при встрече юнитов происходит последовательность отдельных воздействий до тех пор, пока один из юнитов не погибнет. Пользователь видит лишь конечный результат.

Для первой ситуации будет характерна система с более развитым количеством характерстик юнита, т.к. пользователь видит результаты каждого воздействия, видит, кто кому какой урон наносит, может сравнить. Во второй ситуации пользователь видит лишь результат: кто погиб, и сколько очков жизни осталоь у противника, поэтому развитая система характеристик ИМХО будет не столь интересна.

Теперь немного по характеристикам.

Начнем с элементарного. Допустим, у юнита имеется два параметра, влияющих на исход боя:
- очки жизни (L)
- наносимый урон (Z)

При атаке из очков жизни атакуемого вычитается наносимый урон атакующего. Тогда воздействие одного юнита (u1) на второго можно оценить так:
L(u2) = L(u2) - Z(u1)
Если L(u2) достигает отметки 0 - юнит погибает.

Теперь попробуем немного усложнить систему. Введем еще два параметра:
- точность попадания (A)
- увертливость (D)

Точность попадания - коэффициент (в процентах), который характеризует шанс юнита попасть в противника. 
Увертливость - коэффициент (в процентах), который характеризует шанс юнита уклониться от попадания.
Т.о. коэффициент попадания (M) составляет
M(u1) = A(u1) - D(u2),
т.е. попадание состоится с вероятностью M%. Если попадание состоялось - тогда, соответственно:
L(u2) = L(u2) - Z(u1)
если не состоялось - что ж, на нет и суда нет.

Что можно привести в качестве примера? Тот же танк. Он большой и неповоротливый, и его увертливость очень мала. Точность попадания - чуть выше средней. Пехота. Увертливость высокая. Если кто играл в С&C и пробовал стрелять из танка по пехоте - поймет пример гораздо легче. Пехота может нанести много выстрелов по танку (но с небольшим уроном), пока он наконец-то не попадет в них (что обычно смертельно). (Гораздо легче было давить их гусеницами, но это уже другой разговор).

Введем такой параметр как броня (B). 
Что делает броня? Она поглощает часть урона во время атаки. Т.о. если попадание состоялось, то его влияние на очки жизни с учетом брони будет составлять:
L(u2) = L(u2) - Z(u1) + B(u2) при условии что Z(u1) - B(u2) > 0
Если же Z(u1) - B(u2) <= 0 - тогда L(u2) остается неизменным.

Пример? Попадание в пехотинца в бронежилете причиняет ему гораздо меньший урон, нежели попадание в пехотинца без бронежилета. Яркий пример? Разработчики Civilization наконец-то додумались до того, что индеец с копьем чисто физически не может нанести повреждение танку, даже если он его будет бить долго и нудно (наносимый урон индейца меньше уровня брони танка, т.е. при каждом ударе броня полностью поглощает урон).

Теперь можно подумать о внешних параметрах, влияющих на исход атаки. Самый простой и понятный – расстояние (S). У юнита есть максимальная дальность атаки ( R). Если дальность атаки больше расстояния между юнитами – атака невозможна. Если меньше или равна – атака возможна, но расстояние влияет на исход. Каким образом? Допустим так:
Если расстояние между юнитами составляет больше чем половину максимальной дальности атаки – на точность попадания накладывается штраф (P). Штраф вычисляется как расстояние между точкой, которая является серединой максимальной дальности атаки (т.е. крайней точкой, на которой не накладывается штраф) и атакуемым, выраженное в процентах от максимальной дальности атаки атакующего юнита (во загнул). Т.е.:
P(u1) = (S – R(u1)/2)/( R(u1)/100) = 
(S - R(u1)/2)*100/R(u1) = 
100*S/R(u1) – 50, при условии что S - R(u1)/2 > 0, т.е. расстояние между юнитами больше половины максимальной дальности атаки атакующего юнита. 
Данная величина колебнется в пределах [0;50], т.е. на максимальной дальности S = R(u1) атаки процент попадания дополнительно уменьшается на 50%.
Т.о. коэффициент попадания составляет:
M(u1) = A(u1) - D(u2), при условии что S - R(u1)/2 <= 0 и
M(u1) = A(u1) - D(u2)– P(u1) = 
A(u1) - D(u2) – (100*S/R(u1) – 50) = 
A(u1) - D(u2) – 100*S/R(u1) + 50, при условии что S - R(u1)/2 > 0
И с этой вероятностью произойдет попадание, которое по-прежнему составит 
L(u2) = L(u2) - Z(u1) + B(u2) при условии что Z(u1) - B(u2) > 0

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

И еще много-много чего… Главное – чтобы все это было формализовано, тогда код будет писаться легко, а внесение изменений и добавлений в него будет прозрачным.

PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование игр, графики и искуственного интеллекта"
Rickert

НА ЗЛОБУ ДНЯ: Дорогие посетители, прошу обратить внимание что новые темы касающиеся новых вопросов создаются кнопкой "Новая тема" а не "Ответить"! Любые оффтопиковые вопросы, заданные в текущих тематических темах будут удалены а их авторы, при рецедиве, забанены.

  • Литературу, связанную с программированием графики, обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы связанные с программированием графики и мультимедии на языках С++ и Delphi
  • Вопросы по реализации алгоритмов рассматриваются здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование игр, графики и искусственного интеллекта | Следующая тема »


 




[ Время генерации скрипта: 0.0631 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.