[論文] 論純電法的極限傷害 (三)

看板DIABLO (暗黑破壞神 - D3,D2,D1)作者 (天使)時間18年前 (2007/10/22 17:06), 編輯推噓7(701)
留言8則, 8人參與, 最新討論串1/1
---------------------------- 四、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 程式修正傷害部份 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.66.37.44

10/22 17:10, , 1F
很想抓過去算...不過太久沒碰了 有點看不懂XD 先推
10/22 17:10, 1F

10/22 17:10, , 2F
我承認我看到一半就end了 XD 還是推一個
10/22 17:10, 2F

10/22 17:15, , 3F
ㄜ~~ 我還沒灌...
10/22 17:15, 3F

10/22 17:49, , 4F
天使~!! 請問我data structure可以找你De bug嗎@@?
10/22 17:49, 4F

10/22 18:06, , 5F
看到一半就End了= = 想起正在修的該死的資料結構...
10/22 18:06, 5F

10/22 19:00, , 6F
你真屌....
10/22 19:00, 6F
※ 編輯: DreamYeh 來自: 210.66.37.44 (10/22 19:28)

10/22 20:10, , 7F
看不懂了........不懂程式 (汔
10/22 20:10, 7F

10/22 23:41, , 8F
沒看完~不過推一個~XD
10/22 23:41, 8F
文章代碼(AID): #1776W7uy (DIABLO)
文章代碼(AID): #1776W7uy (DIABLO)