精華區beta WOW 關於我們 聯絡資訊
只討論普攻 討論亂舞 王護甲是零,打王時間 一萬秒 在同為 主手宇宙之劍, 副手拉托的情況下 命中率 ap 爆擊率 dps 86% 1400 34.45% 416.3 87% 1400 33.45% 417.5 88% 1400 32.45% 405.3 89% 1400 31.45% 407.9 90% 1400 30.45% 405.3 91% 1400 29.45% 400.5 92% 1400 28.45% 398.9 ----------狂戰只要超過33%這臨界就是怪物 現在 命中 88% ap1400 爆擊 28.45% 主手宇宙(2.6) 副手拉拖(1.4) -> dps 392.8 主手宇宙 副手亞課最後王的匕(1.8)-> dps 395.6 兩手都宇宙 -> dps 396.2 ---------雙慢好像比較好 lol 付上 source code ,因在下對fortran比較熟 故以此寫作.. C太麻煩了 很多轉型態的問題 有礙於對問題的思考 凡請見諒 :) program ddwarrior implicit none integer i , imax ,j ,k c integer hp, hpmax real tmax, t ,ts parameter (ts = 0.001) real crit, hit integer ap real hite logical miss integer flurry ,atn , crn , misn common crit, hit , ap , miss ,totd , flurry ,atn,crn ,misn integer damage, totd tmax = 10000.0 crit = 29.45 ap = 1400 hite = 9 hit = 76 + 3 + hite imax = nint(tmax/ts) totd = 0 atn = 0 crn = 0 misn = 0 j = 0 k = 0 flurry = 0 do i = 1 , imax t = dfloat(i)*ts call mh(i,j,t,damage,ts) call sh(i,k,t,damage,ts) enddo write(*,299) 299 format(60('-')) write(*,300) 'damage per second =', dfloat(totd)/tmax 300 format(4x,a19,f8.2) write(*,301) 'hit rate = ',(1 - dfloat(misn)/dfloat(atn))*100.0 & , '%' 301 format(4x,a18,f6.2,a2) write(*,302) 'critical rate =',(dfloat(crn)/dfloat(atn -misn)) & *100,'%' 302 format(4x,a18,f6.2,a2) stop end subroutine mh(i,j,t,damage,ts) c main hand real t ,ts integer damage , j ,totd ,i logical at , miss ,cr integer ap ,atn ,crn ,misn integer ed ,flurry real mws, crit ,ms ,mss real ra1 ,ra2 common crit, hit , ap , miss ,totd ,flurry ,atn,crn,misn c edge of the cosmos : 130 -243 c speed 2.60 ws = 2.6 wss= nint(ws/ts) if(flurry.ge. 1) then wss = wss*100/125 c flurry = flurry - 1 c write(*,*) flurry c write(*,*) wss endif if ( mod(j, wss) .eq. 0 ) then if( flurry.ge.1 ) flurry = flurry - 1 c write(*,*) wss c write(*,*) wss c if(flurry.gt. 0 )write(*,*) 'good' j = 1 at = .true. atn = atn + 1 ra1 = rand(time()-i) ra2 = rand(time()+i) ed = nint(ra2*(113)) ra1 = ra1*100 damage = 130 + ed + nint(ws*(dfloat(ap)/14.0)) if(ra1 .gt. hit ) then c miss !! damage = 0 miss = .true. misn = misn + 1 cr = .false. elseif(ra1 .le. crit ) then c critical !! damage = 2*damage miss = .false. crn = crn + 1 flurry = flurry + 1 cr = .true. else miss = .false. cr = .false. endif else at = .false. cr = .false. damage = 0 j = j + 1 endif totd = damage + totd if(at .and.(.not.cr).and.(.not. miss) ) write(*,100)'main hand &',t , damage , totd ,flurry if(at .and. miss) write(*,200) 'main hand' , t ,' miss' & , totd ,flurry if(cr) write(*,300) 'main hand' , t ,damage & , totd ,flurry,'---critical' 100 format(4x,a13,f8.2,i6,i8,i3) 200 format(4x,a13,f8.2,a6,i8,i3) 300 format(4x,a13,f8.2,i6,i8,i3,a12) return end subroutine sh(i,k,t,damage,ts) c sub-hand real t,ts integer damage ,totd ,k ,i logical at , miss ,cr integer ap ,atn ,crn,misn integer ed ,flurry real ws, crit ,wss ,mws real ra3 ,ra4 common crit, hit , ap , miss , totd ,flurry ,atn,crn,misn c Latro's Shifting Sword : 70 -131 c speed 1.40 c Hungering Spineripper : 103 - 155 c speed 1.8 ws = 1.40 wss = nint(ws/ts) if(flurry.ge. 1) then wss = wss*100/125 c flurry = flurry - 1 c write(*,*) wss endif if ( mod(k, wss) .eq. 0 ) then c write(*,*) wss if(flurry .ge. 1 ) flurry = flurry -1 k = 1 c if(flurry .ge.1 ) write(*,*) 'right' at = .true. atn = atn + 1 ra3 = rand(time()-i+4) ra4 = rand(time()+i-4) ed = nint(ra4*(61)) ra3 = ra3*100 damage = 70 + ed + nint(ws*(dfloat(ap)/14.0)) c c subhand gets 75% .. damage = nint(0.75*dfloat(damage)) if(ra3 .gt. hit ) then c miss !! damage = 0 cr = .false. miss = .true. misn = misn + 1 elseif(ra3 .le. crit ) then c critical !! cr = .true. damage = 2*damage miss = .false. crn = crn + 1 flurry = flurry + 3 else cr = .false. miss = .false. endif else cr = .false. at = .false. damage = 0 k = k + 1 endif totd = totd + damage 101 format(4x,a13,f8.2,i6,i8,i3) 201 format(4x,a13,f8.2,a6,i8,i3) 301 format(4x,a13,f8.2,i6,i8,i3,a12) if(at .and.(.not.miss).and. (.not.cr)) write(*,101) & 'sub hand',t , damage ,totd ,flurry if(at .and. miss) write(*,201) 'sub hand', t ,' miss' , totd & ,flurry if(cr) write(*,301) 'sub hand' , t ,damage & , totd ,flurry,'---critical' return end -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.117.67.187
jwjw0513:太強惹! 快拜! 10/20 01:27
※ 編輯: LDAGGAXC 來自: 59.117.67.187 (10/20 01:33) ─────────────────────────────────────── 以下為被別人修改過的最新內容: (10/20 01:32) ─────────────────────────────────────── 作者: LDAGGAXC (自由電子氣) 看板: WOW 標題: [心得] 剛寫了一程式去模擬狂戰打木樁王.. 時間: Sat Oct 20 01:24:14 2007 只討論普攻 討論亂舞 王護甲是零,打王時間 一萬秒 在同為 主手宇宙之劍, 副手拉托的情況下 命中率 ap 爆擊率 dps 86% 1400 34.45% 416.3 87% 1400 33.45% 417.5 88% 1400 32.45% 405.3 89% 1400 31.45% 407.9 90% 1400 30.45% 405.3 91% 1400 29.45% 400.5 92% 1400 29.45% 398.9 ----------狂戰只要超過33%這臨界就是怪物 現在 命中 88% ap1400 爆擊 28.45% 主手宇宙 副手拉拖 -> dps 392.8 主手宇宙 副手亞課最後王的匕-> dps 395.6 兩手都宇宙 -> dps 396.2 ---------雙慢好像比較好 lol 付上 source code : program ddwarrior implicit none integer i , imax ,j ,k c integer hp, hpmax real tmax, t ,ts parameter (ts = 0.001) real crit, hit integer ap real hite logical miss integer flurry ,atn , crn , misn common crit, hit , ap , miss ,totd , flurry ,atn,crn ,misn integer damage, totd tmax = 10000.0 crit = 29.45 ap = 1400 hite = 9 hit = 76 + 3 + hite imax = nint(tmax/ts) totd = 0 atn = 0 crn = 0 misn = 0 j = 0 k = 0 flurry = 0 do i = 1 , imax t = dfloat(i)*ts call mh(i,j,t,damage,ts) call sh(i,k,t,damage,ts) enddo write(*,299) 299 format(60('-')) write(*,300) 'damage per second =', dfloat(totd)/tmax 300 format(4x,a19,f8.2) write(*,301) 'hit rate = ',(1 - dfloat(misn)/dfloat(atn))*100.0 & , '%' 301 format(4x,a18,f6.2,a2) write(*,302) 'critical rate =',(dfloat(crn)/dfloat(atn -misn)) & *100,'%' 302 format(4x,a18,f6.2,a2) stop end subroutine mh(i,j,t,damage,ts) c main hand real t ,ts integer damage , j ,totd ,i logical at , miss ,cr integer ap ,atn ,crn ,misn integer ed ,flurry real mws, crit ,ms ,mss real ra1 ,ra2 common crit, hit , ap , miss ,totd ,flurry ,atn,crn,misn c edge of the cosmos : 130 -243 c speed 2.60 ws = 2.6 wss= nint(ws/ts) if(flurry.ge. 1) then wss = wss*100/125 c flurry = flurry - 1 c write(*,*) flurry c write(*,*) wss endif if ( mod(j, wss) .eq. 0 ) then if( flurry.ge.1 ) flurry = flurry - 1 c write(*,*) wss c write(*,*) wss c if(flurry.gt. 0 )write(*,*) 'good' j = 1 at = .true. atn = atn + 1 ra1 = rand(time()-i) ra2 = rand(time()+i) ed = nint(ra2*(113)) ra1 = ra1*100 damage = 130 + ed + nint(ws*(dfloat(ap)/14.0)) if(ra1 .gt. hit ) then c miss !! damage = 0 miss = .true. misn = misn + 1 cr = .false. elseif(ra1 .le. crit ) then c critical !! damage = 2*damage miss = .false. crn = crn + 1 flurry = flurry + 1 cr = .true. else miss = .false. cr = .false. endif else at = .false. cr = .false. damage = 0 j = j + 1 endif totd = damage + totd if(at .and.(.not.cr).and.(.not. miss) ) write(*,100)'main hand &',t , damage , totd ,flurry if(at .and. miss) write(*,200) 'main hand' , t ,' miss' & , totd ,flurry if(cr) write(*,300) 'main hand' , t ,damage & , totd ,flurry,'---critical' 100 format(4x,a13,f8.2,i6,i8,i3) 200 format(4x,a13,f8.2,a6,i8,i3) 300 format(4x,a13,f8.2,i6,i8,i3,a12) return end subroutine sh(i,k,t,damage,ts) c sub-hand real t,ts integer damage ,totd ,k ,i logical at , miss ,cr integer ap ,atn ,crn,misn integer ed ,flurry real ws, crit ,wss ,mws real ra3 ,ra4 common crit, hit , ap , miss , totd ,flurry ,atn,crn,misn c Latro's Shifting Sword : 70 -131 c speed 1.40 c Hungering Spineripper : 103 - 155 c speed 1.8 ws = 1.40 wss = nint(ws/ts) if(flurry.ge. 1) then wss = wss*100/125 c flurry = flurry - 1 c write(*,*) wss endif if ( mod(k, wss) .eq. 0 ) then c write(*,*) wss if(flurry .ge. 1 ) flurry = flurry -1 k = 1 c if(flurry .ge.1 ) write(*,*) 'right' at = .true. atn = atn + 1 ra3 = rand(time()-i+4) ra4 = rand(time()+i-4) ed = nint(ra4*(61)) ra3 = ra3*100 damage = 70 + ed + nint(ws*(dfloat(ap)/14.0)) c c subhand gets 75% .. damage = nint(0.75*dfloat(damage)) if(ra3 .gt. hit ) then c miss !! damage = 0 cr = .false. miss = .true. misn = misn + 1 elseif(ra3 .le. crit ) then c critical !! cr = .true. damage = 2*damage miss = .false. crn = crn + 1 flurry = flurry + 3 else cr = .false. miss = .false. endif else cr = .false. at = .false. damage = 0 k = k + 1 endif totd = totd + damage 101 format(4x,a13,f8.2,i6,i8,i3) 201 format(4x,a13,f8.2,a6,i8,i3) 301 format(4x,a13,f8.2,i6,i8,i3,a12) if(at .and.(.not.miss).and. (.not.cr)) write(*,101) & 'sub hand',t , damage ,totd ,flurry if(at .and. miss) write(*,201) 'sub hand', t ,' miss' , totd & ,flurry if(cr) write(*,301) 'sub hand' , t ,damage & , totd ,flurry,'---critical' return end -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.117.67.187
jwjw0513:太強惹! 快拜! 10/20 01:27
slow1235:看不懂...ˊˋ...先推 10/20 01:32
※ 編輯: LDAGGAXC 來自: 59.117.67.187 (10/20 01:34) ※ 編輯: LDAGGAXC 來自: 59.117.67.187 (10/20 01:34)
laputaca:GOOD... 10/20 01:35
laputaca:最近老師在交C++整個難ˊˋ 10/20 01:35
newsnew:是模擬程式嗎? XD 10/20 01:39
kevin770616:強.. 10/20 01:40
REDMlDDLE:.......... 10/20 01:45
sifun:可以來個簡單的Excel 表單嗎...... 10/20 01:59
jimmy0521:很怪的說法 爆擊超過33% → DPS多10 → 怪物 10/20 01:59
jimmy0521:命中89% > 88% = 90% 這個結果也讓我覺得有點問題... 10/20 02:02
q0r0p:樓上的 你要看命中跟致命的變化,命中越高致命不夠 10/20 02:11
q0r0p:DPS不一定會比較高,反而會下降 10/20 02:12
jimmy0521:樓上回錯篇...不過原PO提供的數據&結論 就是撐致命 10/20 02:13
jimmy0521:所以我很好奇命中再低 DPS會變高嗎? 10/20 02:15
※ 編輯: LDAGGAXC 來自: 59.117.67.187 (10/20 02:26)
usoko:快拜 請問原PO是什麼系的 竟然會fortran...XD 10/20 02:27
lovelylion2:我同學(環工)的計概教授:fortran才是工程再用的!!! 10/20 02:38
putindoggod:模擬程式3000 10/20 02:42
moara:工科碩士以上沒人不會fortran吧 10/20 02:56
justeat:1爆本來就比1命中更有價值(ilv) 這樣比沒意思 10/20 09:44
duolon:其實去看美服各頂尖輸出的狂戰是怎麼配裝怎麼打的 比用一個 10/20 10:32
duolon:考慮條件太少的模擬器來的有意義 今天假如你用的是WOW的私 10/20 10:35
duolon:服器(這東西網路老早就有 不過我沒研究)私服身上絕對有辦法 10/20 10:35
duolon:調整自己的裝備 用這種實際可測試的東西絕對比較有可信度 10/20 10:36
firedman:只是算算這種小東西 c++很簡單吧..要漂亮點 就用c# 10/20 10:57
firedman:拉表單設計:P 10/20 10:57
firedman:這種東西難是難在要有正確的公式OTZ 10/20 10:59
whitefacex:實在很厲害,不過EXCEL拉函數不是省事許多嗎? 0.0 10/20 11:02
soniclin:樓上@@ 挑戰自己 也是很好的 10/20 16:55
chyan:1. 雙持打boss基礎命中率,現在是約72%,而非76% 10/20 18:44
chyan:2. 副手傷害,在天賦點滿後是 62.5% 而不是 75% 10/20 18:44
chyan:3. 爆擊後flurry的charge是恢復為3,而非+3,也非+1 10/20 18:46
chyan:4. 未擊中也會消耗 flurry 的 charge,你程式沒有 10/20 18:47
chyan:以上是看到的一些問題 10/20 18:49