|
|
|
Канал X-Tension/X-BTF: «Разработка новых алгоритмов» |
|
эта тема вам интересна ? |
да |
|
63% |
[ 7 ] |
нет |
|
0% |
[ 0 ] |
воздержался |
|
36% |
[ 4 ] |
|
Всего проголосовало : 11 |
|
|
|
xmagnat
280 EGP
   Рейтинг канала: 5(106) Репутация: 54 Сообщения: 1244 Откуда: Екатеринбург Зарегистрирован: 06.12.2003
 |
|
Алгоритм 1:
Oпределениe боевой мощи корабля (проект).
Назначение:
Подсчет ("в попугаях") боевой мощи атакуемого, затем атакующего, далее первое значение делится на второе. По полученному числу определяется вероятность захвата объекта в соответствии с таблицей значений.
Начало:
1) вычисление совокупной максимальной мощности всех щитов установленных на корабле в тек. момент времени.
1а) целочисленно делим полученное значение на 1 000
2) если щитов нет ( пример - дрон ), то записываем 0
3) ищем все установленные орудия на корабле, затем по приведенной ниже таблице начисляем "попугаи":
Код: |
Название орудия "попугаи"
AIRE 1
BIRE 2
GIRE 4
APAC 8
BPAC 16
GPAC 50
AHEPT 100
BHEPT 1000
GHEPT 10000
|
Пример: пусть на корабле установлено 2*APAC, тогда кол-во "попугаев" будет 2*8=16;
Пример 2: на корабле установлено 2*GIRE и 1*APAC, тогда кол-во "пернатых" будет 2*4+1*8=16;
3) если на корабле нет орудий ( пример TS ), то пишем 0
4) Оцениваем установленную на корабле ракетную установку по таблице:
Код: |
Тип ракеты "попугаи"
1) 1
2) 5
3) 20
4) 80
5) 320
6) 15
7) 1600
|
5) если ракетной установки нет, то пишем 0
6) складываем три полученных значения
7) если получится 0, то пишем 1 ( чтобы, впоследствии, небыло деления на 0 )
конец.
Далее, эта функция вызывается дважды: сначала для атакуемого, затем для атакующего,
затем делим второе значение на первое. Результат обозначим переменной Х:
Вероятность захвата определяем по таблице:
Код: |
Х
(инт. от а до в) вер.
более 10 0.00
(5, 10) 0.01
(2, 5) 0.05
(1, 2) 0.10
(0.5, 1) 0.13
(0.2, 0.5) 0.16
(0.04, 0.2) 0.20
(0.008, 0.04) 0.25
(0.0016, 0.008) 0.33
(0.00032, 0.0016) 0.50
(0, 0.00032) 1.00
|
Примеры: Приведу среднестатистические корабли каждого класса и их "боевую мощь" "в попугаях"
Код: |
M5: 1*3+1*2+1 =6 1
M4: 1*15+4*2+5 =28 4.66
M3: 1*50+16*2+20 =102 3.64 16.96
M6: 4*50+50*3+80 =430 4.21 71.40
M2: 1*1000+100*18+320 =3120 7.25 517.66
M1: 5*1000+1000*12+1600 =18600 5.96 3085.26
M0: 20*1000+10000*12+1600 =141600 7.61 23478.85
|
Из таблицы видно, что, если игрок имеет, скажем М2, то шанс захватить М5 равен 33%, шанс захватить М3 равен (1/(3.64*4.21)=0.065), т.е. 20%, а шанс захватить М1 равен 1% (надеюсь понятно, почему ?)
P.S.
Этот алгоритм будет встроен в игру.
P.P.S
Ваши комментарии...
_________________ Я вернулся ! |
|
|
Bozz
601 EGP
  Репутация: 163 Сообщения: 1079 Откуда: Россия Мурманск Зарегистрирован: 03.10.2005
 |
|
Это получается,что рандом сдачи теперь прогнозируемый?
_________________ Если я когда нибудь заявлю "Ув.Ф.! Я понял что ты хотел сказать!" Это будет означать, что Фалкон заболел или я сошел с ума. |
|
|
xmagnat
280 EGP
   Рейтинг канала: 5(106) Репутация: 54 Сообщения: 1244 Откуда: Екатеринбург Зарегистрирован: 06.12.2003
 |
|
Bozz : |
Это получается,что рандом сдачи теперь прогнозируемый?
|
Да.
_________________ Я вернулся ! |
|
|
w31
400 EGP
    Рейтинг канала: 3(42) Репутация: 72 Сообщения: 598 Откуда: СПб Зарегистрирован: 04.10.2005
 |
|
сам недавно над такой темой думал, только без учета ракет. да не знал как такой алгоритм проверить. вроде всё логично здесь.
а каковы шансы захвата TL и TS? и как (читать куда) изменённый алгоритм в игру встроить?
xmagnat : |
рандом сдачи теперь прогнозируемый
|
но немного случайности не повредит.
|
|
|
xmagnat
280 EGP
   Рейтинг канала: 5(106) Репутация: 54 Сообщения: 1244 Откуда: Екатеринбург Зарегистрирован: 06.12.2003
 |
|
Цитата: |
только без учета ракет
|
Без ракет нельзя - вот пример: один TS атакует другой, у первого есть ракеты, а у второго нет. Так кто же из них сильнее?
Цитата: |
а каковы шансы захвата TL и TS?
|
см. п.3 алгоритма.
Цитата: |
как (читать куда) изменённый алгоритм в игру встроить?
|
находишь незанятое место в OBJ. Пишешь туда свой код, затем соединяешь с процедурой захвата.
Цитата: |
но немного случайности не повредит.
|
Какой случайности ? Этот алгоритм вычисляет только первое число: второе выбирается случайно в диапазане (0,100), затем числа сравниваются. Если первое число больше второго - то захват успешен.
_________________ Я вернулся ! |
|
|
xmagnat
280 EGP
   Рейтинг канала: 5(106) Репутация: 54 Сообщения: 1244 Откуда: Екатеринбург Зарегистрирован: 06.12.2003
 |
|
Вот написал первую часть алгоритма ( исправленный вариант ): эта функция считает силу корабля в "попугаях"...
Код: |
1 .title GetMaxStrength
2 .ident XT
3 .radix 10d
4 .loadobj "001.obj"
5
6 .section code, con
7
8 .classdef TSHIP
9 .func GetMaxStrength
10 .endclass TSHIP
11
12 001B5C78: TSHIP.GetMaxStrength:
13 001B5C78: 0055 0008 setmem 8
14 001B5C7C: 0001 03E8 push 1000
15 001B5C80: 0009 push 0
16 001B5C82: 003C get_object
17 001B5C84: 0057 00001082 call GetMaxShield
18 001B5C8A: 0041 div SP[0],SP[1]
19 001B5C8C: 0009 push 0
20 001B5C8E: 0009 Push 0
21 001B5C90: 0005 0001 L1: push SP[0]
22 001B5C94: 0011 push 8
23 001B5C96: 004C if SP[0]<SP[1] then push 0 else push 1
24 001B5C98: 0033 000DAED2 if SP[0]=0 then jump L4
25 001B5C9E: 0005 0001 push SP[0]
26 001B5CA2: 0006 0007 read TShip.sh_Lasers
27 001B5CA6: 0008 get_from_array
28 001B5CA8: 000A push 1
29 001B5CAA: 004D if SP[0]>SP[1] then push 0 else push 1
30 001B5CAC: 0033 000DAEC8 if SP[0]=0 then jump L2
31 001B5CB2: 0005 0002 push SP[1]
32 001B5CB6: 0005 0002 push SP[1]
33 001B5CBA: 0006 0007 Read TShip.sh_Lasers
34 001B5CBE: 0008 get_from_array
35 001B5CC0: 0005 0003 push SP[2]
36 001B5CC4: 0009 push 0
37 001B5CC6: 004F if SP[0]<>SP[1] then push 0 else push 1
38 001B5CC8: 0033 000DAE67 if SP[0]=0 then jump LX0
39 001B5CCE: 000A push 1
40 001B5CD0: 0031 000DAEC3 jump L3
41 001B5CD6: 0005 0003 LX0: push SP[2]
42 001B5CDA: 000A push 1
43 001B5CDC: 004F if SP[0]<>SP[1] then push 0 else push 1
44 001B5CDE: 0033 000DAE72 if SP[0]=0 then jump LX1
45 001B5CE4: 000B push 2
46 001B5CE6: 0031 000DAEC3 jump L3
47 001B5CEC: 0005 0003 LX1: push SP[2]
48 001B5CF0: 000B push 2
49 001B5CF2: 004F if SP[0]<>SP[1] then push 0 else push 1
50 001B5CF4: 0033 000DAE7D if SP[0]=0 then jump LX2
51 001B5CFA: 000D push 4
52 001B5CFC: 0031 000DAEC3 jump L3
53 001B5D02: 0005 0003 LX2: push SP[2]
54 001B5D06: 000C push 3
55 001B5D08: 004F if SP[0]<>SP[1] then push 0 else push 1
56 001B5D0A: 0033 000DAE88 if SP[0]=0 then jump LX3
57 001B5D10: 0011 push 8
58 001B5D12: 0031 000DAEC3 jump L3
59 001B5D18: 0005 0003 LX3: push SP[2]
60 001B5D1C: 000D push 4
61 001B5D1E: 004F if SP[0]<>SP[1] then push 0 else push 1
62 001B5D20: 0033 000DAE93 if SP[0]=0 then jump LX4
63 001B5D26: 0019 push 16
64 001B5D28: 0031 000DAEC3 jump L3
65 001B5D2E: 0005 0003 LX4: push SP[2]
66 001B5D32: 000E push 5
67 001B5D34: 004F if SP[0]<>SP[1] then push 0 else push 1
68 001B5D36: 0033 000DAE9F if SP[0]=0 then jump LX5
69 001B5D3C: 0001 0032 push 50
70 001B5D40: 0031 000DAEC3 jump L3
71 001B5D46: 0005 0003 LX5: push SP[2]
72 001B5D4A: 000F push 6
73 001B5D4C: 004F if SP[0]<>SP[1] then push 0 else push 1
74 001B5D4E: 0033 000DAEAB if SP[0]=0 then jump LX6
75 001B5D54: 0001 0064 push 100
76 001B5D58: 0031 000DAEC3 jump L3
77 001B5D5E: 0005 0003 LX6: push SP[2]
78 001B5D62: 0010 push 7
79 001B5D64: 004F if SP[0]<>SP[1] then push 0 else push 1
80 001B5D66: 0033 000DAEB7 if SP[0]=0 then jump LX7
81 001B5D6C: 0001 03E8 push 1000
82 001B5D70: 0031 000DAEC3 jump L3
83 001B5D76: 0005 0003 LX7: push SP[2]
84 001B5D7A: 0011 push 8
85 001B5D7C: 004F if SP[0]<>SP[1] then push 0 else push 1
86 001B5D7E: 0033 000DAEC8 if SP[0]=0 then jump L2
87 001B5D84: 0001 2710 push 10000
88 001B5D88: 0031 000DAEC3 jump L3
89 001B5D8E: 0040 L3: mul SP[0],SP[1]
90 001B5D90: 003E add SP[0],SP[1]
91 001B5D92: 002A 0003 mov SP[2],SP[0]
92 001B5D96: 002C pop
93 001B5D98: 0005 0001 L2: push SP[0]
94 001B5D9C: 000A push 1
95 001B5D9E: 003E add SP[0],SP[1]
96 001B5DA0: 002A 0002 mov SP[1],SP[0]
97 001B5DA4: 002C pop
98 001B5DA6: 0031 000DAE44 jump L1
99 001B5DAC: 002C L4: pop
100 001B5DAE: 003E add SP[0],SP[1]
101 001B5DB0: 0009 push 0
102 001B5DB2: 000F push 6
103 001B5DB4: 0005 0001 L7: push SP[0]
104 001B5DB8: 0009 push 0
105 001B5DBA: 004D if SP[0]>SP[1] then push 0 else push 1
106 001B5DBC: 0033 000DAF5C if SP[0]=0 then jump L13
107 001B5DC2: 0005 0001 push SP[0]
108 001B5DC6: 0006 002A read TShip.sh_NumRocketSlots
109 001B5DCA: 0008 get_from_array
110 001B5DCC: 000A push 1
111 001B5DCE: 004D if SP[0]>SP[1] then push 0 else push 1
112 001B5DD0: 0033 000DAF3E if SP[0]=0 then jump L10
113 001B5DD6: 0005 0002 push SP[1]
114 001B5DDA: 0005 0002 push SP[1]
115 001B5DDE: 0006 002A read TShip.sh_NumRocketSlots
116 001B5DE2: 0008 get_from_array
117 001B5DE4: 0005 0003 push SP[2]
118 001B5DE8: 000F push 6
119 001B5DEA: 004F if SP[0]<>SP[1] then push 0 else push 1
120 001B5DEC: 0033 000DAEFA if SP[0]=0 then jump LR5
121 001B5DF2: 0001 0640 push 1600
122 001B5DF6: 0031 000DAF48 jump L11
123 001B5DFC: 0005 0003 LR5: push SP[2]
124 001B5E00: 000E push 5
125 001B5E02: 004F if SP[0]<>SP[1] then push 0 else push 1
126 001B5E04: 0033 000DAF05 if SP[0]=0 then jump LR4
127 001B5E0A: 0018 push 15
128 001B5E0C: 0031 000DAF48 jump L11
129 001B5E12: 0005 0003 LR4: push SP[2]
130 001B5E16: 000D push 4
131 001B5E18: 004F if SP[0]<>SP[1] then push 0 else push 1
132 001B5E1A: 0033 000DAF11 if SP[0]=0 then jump LR3
133 001B5E20: 0001 0140 push 320
134 001B5E24: 0031 000DAF48 jump L11
135 001B5E2A: 0005 0003 LR3: push SP[2]
136 001B5E2E: 000C push 3
137 001B5E30: 004F if SP[0]<>SP[1] then push 0 else push 1
138 001B5E32: 0033 000DAF1D if SP[0]=0 then jump LR2
139 001B5E38: 0001 0050 push 80
140 001B5E3C: 0031 000DAF48 jump L11
141 001B5E42: 0005 0003 LR2: push SP[2]
142 001B5E46: 000B push 2
143 001B5E48: 004F if SP[0]<>SP[1] then push 0 else push 1
144 001B5E4A: 0033 000DAF28 if SP[0]=0 then jump LR1
145 001B5E50: 001D push 20
146 001B5E52: 0031 000DAF48 jump L11
147 001B5E58: 0005 0003 LR1: push SP[2]
148 001B5E5C: 000A push 1
149 001B5E5E: 004F if SP[0]<>SP[1] then push 0 else push 1
150 001B5E60: 0033 000DAF33 if SP[0]=0 then jump LR0
151 001B5E66: 000E push 5
152 001B5E68: 0031 000DAF48 jump L11
153 001B5E6E: 0005 0003 LR0: push SP[2]
154 001B5E72: 0009 push 0
155 001B5E74: 004F if SP[0]<>SP[1] then push 0 else push 1
156 001B5E76: 0033 000DAF48 if SP[0]=0 then jump L11
157 001B5E7C: 000A push 1
158 001B5E7E: 0031 000DAF48 jump L11
159 001B5E84: 000A L10: push 1
160 001B5E86: 0005 0002 push SP[1]
161 001B5E8A: 003F sub SP[0],SP[1]
162 001B5E8C: 002A 0002 mov SP[1],SP[0]
163 001B5E90: 002C pop
164 001B5E92: 0031 000DAED6 jump L7
165 001B5E98: 0005 0002 L11: push SP[1]
166 001B5E9C: 0013 push 10
167 001B5E9E: 004C if SP[0]<SP[1] then push 0 else push 1
168 001B5EA0: 0033 000DAF53 if SP[0]=0 then jump L9
169 001B5EA6: 0013 push 10
170 001B5EA8: 002A 0003 mov SP[2],SP[0]
171 001B5EAC: 002C pop
172 001B5EAE: 0040 L9: mul SP[0],SP[1]
173 001B5EB0: 0013 push 10
174 001B5EB2: 0005 0002 push SP[1]
175 001B5EB6: 0041 div SP[0],SP[1]
176 001B5EB8: 002A 0005 mov SP[4],SP[0]
177 001B5EBC: 002E 0003 popx 3
178 001B5EC0: 002C L13: pop
179 001B5EC2: 003E add SP[0],SP[1]
180 001B5EC4: 0005 0001 push SP[0]
181 001B5EC8: 0009 push 0
182 001B5ECA: 004F if SP[0]<>SP[1] then push 0 else push 1
183 001B5ECC: 0033 000DAF69 if SP[0]=0 then jump L14
184 001B5ED2: 000A push 1
185 001B5ED4: 002A 0002 mov sp[1],sp[0]
186 001B5ED8: 002C pop
187 001B5EDA: 0035 L14: ret |
_________________ Я вернулся ! |
|
|
Argonaut
260 EGP
   Рейтинг канала: 1(9) Репутация: 43 Сообщения: 185 Откуда: Челябинск Зарегистрирован: 27.04.2004
 |
|
А мощность щита совсем не будет теперь учитываться?
(Хотя, наверное, считать его нет смысла - если сумел щит выбить, то не имеет значения, большой он был с самого начала или нет.)
А вроде еще кто-то говорил, что вероятность захвата повышается от скорости "убивания" щита. Или это ни есть так?
_________________ Объявление
Отдам малыша Ксенона в хорошие руки. Денег не предлагать. |
|
|
xmagnat
280 EGP
   Рейтинг канала: 5(106) Репутация: 54 Сообщения: 1244 Откуда: Екатеринбург Зарегистрирован: 06.12.2003
 |
|
Цитата: |
А мощность щита совсем не будет теперь учитываться?
|
Так я же написал текст программы... Конечно учитывается!
Цитата: |
если сумел щит выбить
|
Вот именно - если сумел выбить, а если не сумел ?
Цитата: |
А вроде еще кто-то говорил, что вероятность захвата повышается от скорости "убивания" щита. Или это ни есть так?
|
Пока это так...
_________________ Я вернулся ! |
|
|
|
|
|
Канал X-Tension/X-BTF: «Разработка новых алгоритмов» |
|