論純電法的極限傷害 (三) - 暗黑
By Olive
at 2007-10-22T17:06
at 2007-10-22T17:06
Table of Contents
----------------------------
四、Program
開啟Borland C++ Builder,拉一個Button和一個ListView
,修改ListView顯示方式和排序,接著開按鈕,輸入以下程式碼
。
或許你可以改用.Net去寫,但關於ListView細節部份需要有
所修改。
在演算法部分,或許有人會覺得使用多層迴圈是浪費的,所
幸每個裝備選擇性不大。且一定能在多項式時間內運算完成。
程式用到一個類別: class item,僅內建各種屬性和一個
初始化建構子。這裡是為了使程式可以充分擴充,像是加入閃電
奧馬斯等例外裝備時候,我們可以使用繼承來簡單擴充。
我曾思考另外訂一個腳色類別,裡面定義兩個 Method:穿裝
備、脫裝備,這樣程式可以更靈活,這個方向可以提供有志研究
本論文者一個研究方向。
以下附程式碼,未有程式基礎可直接按End ,等待下篇的實
驗數據分析。
Code:
class item
{
public:
AnsiString NameC;
int Skill;//All Lightning Spell Page Skill
int Light_Skill; //only light skill
double Dmg;
double Res;
int Sockets;
int FCR;
item();
};
item::item()
{
Skill=0; Light_Skill=0;
Dmg=0.0; Res=0.0; Sockets=0; FCR=0;
}
#define ResFunction (1.45+res+0.05*socket) //對抗一般敵人
//#define ResFunction (0.09+res+0.05*socket) //對抗電系免疫
#define MaxDmg()
5.8*(36*(skill+LightSkill+1)+732)*(0.12*(skill+1)+5.7+dmg+0.05*socket)
#define SumDmg()
5.8*(((36*(skill+LightSkill+1)+732)+1)/2)*(0.12*(skill+1)+5.7+dmg+0.05*socket)
void __fastcall TForm1::Button1Click(TObject *Sender)
{
class item Weapon2Hand[4];
class item Weapon[4];
class item Shield[3];
class item Helm[2];
class item Ammy[2];
class item Ring[3];
class item Armor[4];
Weapon2Hand[0].NameC="Mage"; Weapon2Hand[0].Skill=5;
Weapon2Hand[0].Res=0.15; Weapon2Hand[0].Sockets=1; Weapon2Hand[0].FCR=30;
//Mage's Song
Weapon2Hand[1].NameC="infinite"; Weapon2Hand[1].Res=0.55;
//自拿無限
Weapon2Hand[2].NameC="6soc"; Weapon2Hand[2].Skill=3;
Weapon2Hand[2].Sockets=6;
//+3閃電+3支電雙手杖打六洞全鑲電彩 (S=3 J=6)
Weapon2Hand[3].NameC="Memory"; Weapon2Hand[3].Skill=6;
Weapon2Hand[3].FCR=33;
//+3閃電+3支電雙手杖打四洞做成記憶 (Memory) (S=6)
Weapon[0].NameC="Moon"; Weapon[0].Res=0.35;
//新月劍 (Res=0.35)
Weapon[1].NameC="Esch"; Weapon[1].Skill=3; Weapon[1].Dmg=0.2;
Weapon[1].Sockets=1; Weapon[1].FCR=40;
//艾利屈塔鑲電彩(S=3 Dmg=0.2 J=1)
Weapon[2].NameC="6socSword"; Weapon[2].Sockets=6;
//六洞水晶劍全鑲電彩 (J=6)
Weapon[3].NameC="Powered Magus Orbs"; Weapon[3].Skill=6;
Weapon[3].Sockets=2; Weapon[3].FCR=20;
//+3電系+3閃電+3支電2洞 神奇藍色單手杖XD (S=6 J=2)
Shield[0].NameC="Spirt";Shield[0].Skill=2;Shield[0].FCR=35;
//精神(S=2)
Shield[1].NameC="Wall";Shield[1].Skill=1;
Shield[1].Sockets=1;Shield[1].FCR=20;
//警牆+電彩(S=1 J=1)
Shield[2].NameC="4soc";Shield[2].Sockets=4;
//四洞統盾四電彩(J=4)
Helm[0].NameC="Griffon"; Helm[0].Skill=1; Helm[0].Res=0.2;
Helm[0].Dmg=0.15; Helm[0].Sockets=1; Helm[0].FCR=25;
//Grifon(S=1 Res=0.2 Dmg=0.15 J=1)
Helm[1].NameC="Powered Magus"; Helm[1].Skill=3; Helm[1].Sockets=2;
Helm[1].FCR=20;
//+3閃電頁 2洞(S=3 J=2)
Ammy[0].NameC="+3L 10FCR"; Ammy[0].Skill=3; Ammy[0].FCR=10;
//+3閃電頁 10fcr
Ammy[1].NameC="+2 20FCR"; Ammy[1].Skill=2; Ammy[1].FCR=20;
//+2 20fcr 手工 (S=2)
Ring[0].NameC="2SOJ"; Ring[0].Skill=2;
Ring[1].NameC="SOJ+10fcr"; Ring[1].Skill=1; Ring[1].FCR=10;
Ring[2].NameC="2 10fcr"; Ring[2].FCR=20;
Armor[0].NameC="Arkaine's";Armor[0].Skill=2; Armor[0].Sockets=1;
//+2阿凱尼 1電彩 (S=2 J=1)
Armor[1].NameC="Skin of the Vipermagi";Armor[1].Skill=1;
Armor[1].Sockets=1; Armor[1].FCR=30;
//+1蛇皮 1電彩 (S=1 J=1 35RES 30FCR)
Armor[2].NameC="COH";Armor[2].Skill=2;
//+2 COH or Enigma(S=2)
Armor[3].NameC="Ormus'"; Armor[3].Light_Skill=3; Armor[3].Dmg=0.15;
Armor[3].FCR=20; Armor[3].Sockets=1;
//閃電澳馬斯
int skill=0,LightSkill=0,socket=0,Num=0,FCR;
double dmg=0,res=0,Res=0.0,SumDmg; //Res is real res max limited
on 200%
ListView1->Clear();
TListItem *Data_List;
//two hand
for(int i1=0;i1<2;i1++)
{
Num++;
skill = Helm[i1].Skill;
LightSkill=0;
socket = Helm[i1].Sockets;
dmg = Helm[i1].Dmg; res = Helm[i1].Res;
FCR = Helm[i1].FCR+40;
for(int i2=0;i2<2;i2++)
{
skill += Ammy[i2].Skill; socket += Ammy[i2].Sockets;
dmg += Ammy[i2].Dmg; res += Ammy[i2].Res;
FCR += Ammy[i2].FCR;
for(int i3=0;i3<3;i3++)
{
skill += Ring[i3].Skill; socket += Ring[i3].Sockets;
dmg += Ring[i3].Dmg; res += Ring[i3].Res;
FCR += Ring[i3].FCR;
for(int i4=0;i4<4;i4++)
{
skill += Armor[i4].Skill;
LightSkill+= Armor[i4].Light_Skill;
socket += Armor[i4].Sockets;
dmg += Armor[i4].Dmg; res += Armor[i4].Res;
FCR += Armor[i4].FCR;
//two
hand-------------------------------------------------------------
for(int i5=0;i5<4;i5++)
{
skill += Weapon2Hand[i5].Skill; socket +=
Weapon2Hand[i5].Sockets;
dmg += Weapon2Hand[i5].Dmg; res +=
Weapon2Hand[i5].Res;
FCR += Weapon2Hand[i5].FCR;
Res = ResFunction;
if(Res>2.0) Res=2.0;
//printf
code=================================================
if(CheckBox1->Checked) if(FCR<117) goto NLOOP;
SumDmg = SumDmg()*Res;
Data_List=ListView1->Items->Add();
Data_List->Caption=Num;
Data_List->SubItems->Add(Weapon2Hand[i5].NameC);
Data_List->SubItems->Add("");//no shield
Data_List->SubItems->Add(Helm[i1].NameC);
Data_List->SubItems->Add(Ammy[i2].NameC);
Data_List->SubItems->Add(Ring[i3].NameC);
Data_List->SubItems->Add(Armor[i4].NameC);
Data_List->SubItems->Add(Res);
Data_List->SubItems->Add(FCR);
Data_List->SubItems->Add((int)SumDmg);
Data_List->SubItems->Add(AnsiString((int)(MaxDmg())));
NLOOP:
//============================================================
skill -= Weapon2Hand[i5].Skill; socket -=
Weapon2Hand[i5].Sockets;
dmg -= Weapon2Hand[i5].Dmg; res -=
Weapon2Hand[i5].Res;
FCR -= Weapon2Hand[i5].FCR;
}
//One
hand-------------------------------------------------------------
for(int i5=0;i5<4;i5++)
{
skill += Weapon[i5].Skill; socket +=
Weapon[i5].Sockets;
dmg += Weapon[i5].Dmg; res += Weapon[i5].Res;
FCR += Weapon[i5].FCR;
for(int i6=0;i6<3;i6++)
{
skill += Shield[i6].Skill; socket +=
Shield[i6].Sockets;
dmg += Shield[i6].Dmg; res += Shield[i6].Res;
FCR += Shield[i6].FCR;
Res = ResFunction;
if(Res>2.0) Res=2.0;
//printf
code=================================================
if(CheckBox1->Checked) if(FCR<117) goto NLOOP2;
SumDmg = SumDmg()*Res;
Data_List=ListView1->Items->Add();
Data_List->Caption=Num;
Data_List->SubItems->Add(Weapon[i5].NameC);
Data_List->SubItems->Add(Shield[i6].NameC);
Data_List->SubItems->Add(Helm[i1].NameC);
Data_List->SubItems->Add(Ammy[i2].NameC);
Data_List->SubItems->Add(Ring[i3].NameC);
Data_List->SubItems->Add(Armor[i4].NameC);
Data_List->SubItems->Add(Res);
Data_List->SubItems->Add(FCR);
Data_List->SubItems->Add((int)SumDmg);
Data_List->SubItems->Add(AnsiString((int)(MaxDmg())));
NLOOP2:
//============================================================
skill -= Shield[i6].Skill; socket -=
Shield[i6].Sockets;
dmg -= Shield[i6].Dmg; res -= Shield[i6].Res;
FCR -= Shield[i6].FCR;
}
skill -= Weapon[i5].Skill; socket -=
Weapon[i5].Sockets;
dmg -= Weapon[i5].Dmg; res -= Weapon[i5].Res;
FCR -= Weapon[i5].FCR;
}
skill -= Armor[i4].Skill;
LightSkill-= Armor[i4].Light_Skill;
socket -= Armor[i4].Sockets;
dmg -= Armor[i4].Dmg; res -= Armor[i4].Res;
FCR -= Armor[i4].FCR;
}
skill -= Ring[i3].Skill; socket -= Ring[i3].Sockets;
dmg -= Ring[i3].Dmg; res -= Ring[i3].Res;
FCR -= Ring[i3].FCR;
}
skill -= Ammy[i2].Skill; socket -= Ammy[i2].Sockets;
dmg -= Ammy[i2].Dmg; res -= Ammy[i2].Res;
FCR -= Ammy[i2].FCR;
}
}
}
//---------------------------------------------------------------------------
--
10.22 19:38 程式修正傷害部份
--
四、Program
開啟Borland C++ Builder,拉一個Button和一個ListView
,修改ListView顯示方式和排序,接著開按鈕,輸入以下程式碼
。
或許你可以改用.Net去寫,但關於ListView細節部份需要有
所修改。
在演算法部分,或許有人會覺得使用多層迴圈是浪費的,所
幸每個裝備選擇性不大。且一定能在多項式時間內運算完成。
程式用到一個類別: class item,僅內建各種屬性和一個
初始化建構子。這裡是為了使程式可以充分擴充,像是加入閃電
奧馬斯等例外裝備時候,我們可以使用繼承來簡單擴充。
我曾思考另外訂一個腳色類別,裡面定義兩個 Method:穿裝
備、脫裝備,這樣程式可以更靈活,這個方向可以提供有志研究
本論文者一個研究方向。
以下附程式碼,未有程式基礎可直接按End ,等待下篇的實
驗數據分析。
Code:
class item
{
public:
AnsiString NameC;
int Skill;//All Lightning Spell Page Skill
int Light_Skill; //only light skill
double Dmg;
double Res;
int Sockets;
int FCR;
item();
};
item::item()
{
Skill=0; Light_Skill=0;
Dmg=0.0; Res=0.0; Sockets=0; FCR=0;
}
#define ResFunction (1.45+res+0.05*socket) //對抗一般敵人
//#define ResFunction (0.09+res+0.05*socket) //對抗電系免疫
#define MaxDmg()
5.8*(36*(skill+LightSkill+1)+732)*(0.12*(skill+1)+5.7+dmg+0.05*socket)
#define SumDmg()
5.8*(((36*(skill+LightSkill+1)+732)+1)/2)*(0.12*(skill+1)+5.7+dmg+0.05*socket)
void __fastcall TForm1::Button1Click(TObject *Sender)
{
class item Weapon2Hand[4];
class item Weapon[4];
class item Shield[3];
class item Helm[2];
class item Ammy[2];
class item Ring[3];
class item Armor[4];
Weapon2Hand[0].NameC="Mage"; Weapon2Hand[0].Skill=5;
Weapon2Hand[0].Res=0.15; Weapon2Hand[0].Sockets=1; Weapon2Hand[0].FCR=30;
//Mage's Song
Weapon2Hand[1].NameC="infinite"; Weapon2Hand[1].Res=0.55;
//自拿無限
Weapon2Hand[2].NameC="6soc"; Weapon2Hand[2].Skill=3;
Weapon2Hand[2].Sockets=6;
//+3閃電+3支電雙手杖打六洞全鑲電彩 (S=3 J=6)
Weapon2Hand[3].NameC="Memory"; Weapon2Hand[3].Skill=6;
Weapon2Hand[3].FCR=33;
//+3閃電+3支電雙手杖打四洞做成記憶 (Memory) (S=6)
Weapon[0].NameC="Moon"; Weapon[0].Res=0.35;
//新月劍 (Res=0.35)
Weapon[1].NameC="Esch"; Weapon[1].Skill=3; Weapon[1].Dmg=0.2;
Weapon[1].Sockets=1; Weapon[1].FCR=40;
//艾利屈塔鑲電彩(S=3 Dmg=0.2 J=1)
Weapon[2].NameC="6socSword"; Weapon[2].Sockets=6;
//六洞水晶劍全鑲電彩 (J=6)
Weapon[3].NameC="Powered Magus Orbs"; Weapon[3].Skill=6;
Weapon[3].Sockets=2; Weapon[3].FCR=20;
//+3電系+3閃電+3支電2洞 神奇藍色單手杖XD (S=6 J=2)
Shield[0].NameC="Spirt";Shield[0].Skill=2;Shield[0].FCR=35;
//精神(S=2)
Shield[1].NameC="Wall";Shield[1].Skill=1;
Shield[1].Sockets=1;Shield[1].FCR=20;
//警牆+電彩(S=1 J=1)
Shield[2].NameC="4soc";Shield[2].Sockets=4;
//四洞統盾四電彩(J=4)
Helm[0].NameC="Griffon"; Helm[0].Skill=1; Helm[0].Res=0.2;
Helm[0].Dmg=0.15; Helm[0].Sockets=1; Helm[0].FCR=25;
//Grifon(S=1 Res=0.2 Dmg=0.15 J=1)
Helm[1].NameC="Powered Magus"; Helm[1].Skill=3; Helm[1].Sockets=2;
Helm[1].FCR=20;
//+3閃電頁 2洞(S=3 J=2)
Ammy[0].NameC="+3L 10FCR"; Ammy[0].Skill=3; Ammy[0].FCR=10;
//+3閃電頁 10fcr
Ammy[1].NameC="+2 20FCR"; Ammy[1].Skill=2; Ammy[1].FCR=20;
//+2 20fcr 手工 (S=2)
Ring[0].NameC="2SOJ"; Ring[0].Skill=2;
Ring[1].NameC="SOJ+10fcr"; Ring[1].Skill=1; Ring[1].FCR=10;
Ring[2].NameC="2 10fcr"; Ring[2].FCR=20;
Armor[0].NameC="Arkaine's";Armor[0].Skill=2; Armor[0].Sockets=1;
//+2阿凱尼 1電彩 (S=2 J=1)
Armor[1].NameC="Skin of the Vipermagi";Armor[1].Skill=1;
Armor[1].Sockets=1; Armor[1].FCR=30;
//+1蛇皮 1電彩 (S=1 J=1 35RES 30FCR)
Armor[2].NameC="COH";Armor[2].Skill=2;
//+2 COH or Enigma(S=2)
Armor[3].NameC="Ormus'"; Armor[3].Light_Skill=3; Armor[3].Dmg=0.15;
Armor[3].FCR=20; Armor[3].Sockets=1;
//閃電澳馬斯
int skill=0,LightSkill=0,socket=0,Num=0,FCR;
double dmg=0,res=0,Res=0.0,SumDmg; //Res is real res max limited
on 200%
ListView1->Clear();
TListItem *Data_List;
//two hand
for(int i1=0;i1<2;i1++)
{
Num++;
skill = Helm[i1].Skill;
LightSkill=0;
socket = Helm[i1].Sockets;
dmg = Helm[i1].Dmg; res = Helm[i1].Res;
FCR = Helm[i1].FCR+40;
for(int i2=0;i2<2;i2++)
{
skill += Ammy[i2].Skill; socket += Ammy[i2].Sockets;
dmg += Ammy[i2].Dmg; res += Ammy[i2].Res;
FCR += Ammy[i2].FCR;
for(int i3=0;i3<3;i3++)
{
skill += Ring[i3].Skill; socket += Ring[i3].Sockets;
dmg += Ring[i3].Dmg; res += Ring[i3].Res;
FCR += Ring[i3].FCR;
for(int i4=0;i4<4;i4++)
{
skill += Armor[i4].Skill;
LightSkill+= Armor[i4].Light_Skill;
socket += Armor[i4].Sockets;
dmg += Armor[i4].Dmg; res += Armor[i4].Res;
FCR += Armor[i4].FCR;
//two
hand-------------------------------------------------------------
for(int i5=0;i5<4;i5++)
{
skill += Weapon2Hand[i5].Skill; socket +=
Weapon2Hand[i5].Sockets;
dmg += Weapon2Hand[i5].Dmg; res +=
Weapon2Hand[i5].Res;
FCR += Weapon2Hand[i5].FCR;
Res = ResFunction;
if(Res>2.0) Res=2.0;
//printf
code=================================================
if(CheckBox1->Checked) if(FCR<117) goto NLOOP;
SumDmg = SumDmg()*Res;
Data_List=ListView1->Items->Add();
Data_List->Caption=Num;
Data_List->SubItems->Add(Weapon2Hand[i5].NameC);
Data_List->SubItems->Add("");//no shield
Data_List->SubItems->Add(Helm[i1].NameC);
Data_List->SubItems->Add(Ammy[i2].NameC);
Data_List->SubItems->Add(Ring[i3].NameC);
Data_List->SubItems->Add(Armor[i4].NameC);
Data_List->SubItems->Add(Res);
Data_List->SubItems->Add(FCR);
Data_List->SubItems->Add((int)SumDmg);
Data_List->SubItems->Add(AnsiString((int)(MaxDmg())));
NLOOP:
//============================================================
skill -= Weapon2Hand[i5].Skill; socket -=
Weapon2Hand[i5].Sockets;
dmg -= Weapon2Hand[i5].Dmg; res -=
Weapon2Hand[i5].Res;
FCR -= Weapon2Hand[i5].FCR;
}
//One
hand-------------------------------------------------------------
for(int i5=0;i5<4;i5++)
{
skill += Weapon[i5].Skill; socket +=
Weapon[i5].Sockets;
dmg += Weapon[i5].Dmg; res += Weapon[i5].Res;
FCR += Weapon[i5].FCR;
for(int i6=0;i6<3;i6++)
{
skill += Shield[i6].Skill; socket +=
Shield[i6].Sockets;
dmg += Shield[i6].Dmg; res += Shield[i6].Res;
FCR += Shield[i6].FCR;
Res = ResFunction;
if(Res>2.0) Res=2.0;
//printf
code=================================================
if(CheckBox1->Checked) if(FCR<117) goto NLOOP2;
SumDmg = SumDmg()*Res;
Data_List=ListView1->Items->Add();
Data_List->Caption=Num;
Data_List->SubItems->Add(Weapon[i5].NameC);
Data_List->SubItems->Add(Shield[i6].NameC);
Data_List->SubItems->Add(Helm[i1].NameC);
Data_List->SubItems->Add(Ammy[i2].NameC);
Data_List->SubItems->Add(Ring[i3].NameC);
Data_List->SubItems->Add(Armor[i4].NameC);
Data_List->SubItems->Add(Res);
Data_List->SubItems->Add(FCR);
Data_List->SubItems->Add((int)SumDmg);
Data_List->SubItems->Add(AnsiString((int)(MaxDmg())));
NLOOP2:
//============================================================
skill -= Shield[i6].Skill; socket -=
Shield[i6].Sockets;
dmg -= Shield[i6].Dmg; res -= Shield[i6].Res;
FCR -= Shield[i6].FCR;
}
skill -= Weapon[i5].Skill; socket -=
Weapon[i5].Sockets;
dmg -= Weapon[i5].Dmg; res -= Weapon[i5].Res;
FCR -= Weapon[i5].FCR;
}
skill -= Armor[i4].Skill;
LightSkill-= Armor[i4].Light_Skill;
socket -= Armor[i4].Sockets;
dmg -= Armor[i4].Dmg; res -= Armor[i4].Res;
FCR -= Armor[i4].FCR;
}
skill -= Ring[i3].Skill; socket -= Ring[i3].Sockets;
dmg -= Ring[i3].Dmg; res -= Ring[i3].Res;
FCR -= Ring[i3].FCR;
}
skill -= Ammy[i2].Skill; socket -= Ammy[i2].Sockets;
dmg -= Ammy[i2].Dmg; res -= Ammy[i2].Res;
FCR -= Ammy[i2].FCR;
}
}
}
//---------------------------------------------------------------------------
--
10.22 19:38 程式修正傷害部份
--
Tags:
暗黑
All Comments
By Olive
at 2007-10-24T00:53
at 2007-10-24T00:53
By Linda
at 2007-10-26T03:04
at 2007-10-26T03:04
By Daph Bay
at 2007-10-26T20:35
at 2007-10-26T20:35
By Kama
at 2007-10-31T17:43
at 2007-10-31T17:43
By Joe
at 2007-11-03T21:39
at 2007-11-03T21:39
By Liam
at 2007-11-07T05:05
at 2007-11-07T05:05
By Ida
at 2007-11-09T20:24
at 2007-11-09T20:24
By Carol
at 2007-11-11T15:25
at 2007-11-11T15:25
Related Posts
論純電法的極限傷害 (一)
By John
at 2007-10-22T11:23
at 2007-10-22T11:23
附加跨職技能裝備簡表
By Necoo
at 2007-10-22T10:01
at 2007-10-22T10:01
好孩子的精華區導讀手冊
By Lily
at 2007-10-18T19:00
at 2007-10-18T19:00
黃金左腳!死神鳳凰刺!
By Olga
at 2007-10-16T06:36
at 2007-10-16T06:36
關於迷團法師和主流法師比較
By Ida
at 2007-10-11T21:27
at 2007-10-11T21:27