創作內容

1 GP

[聖痕]傷害計算機

作者:羽翼│聖痕幻想│2012-04-04 05:42:50│巴幣:2│人氣:717
照著老師上課教的內容,寫了一個簡單的工具
因為剛學,之前有人提到做成矩陣...但不懂那是什麼意思
不知道有沒有哪位好心的大大,願意講解一下 OTL)

http://0rz.tw/GSeQ0  私用可,請別隨意轉載(未完成品)

↓跑一輪就像是下圖,目前功能還只有1
我方兵種的1~3,分別是劍兵、長劍兵、禁衛劍兵 (其他依此類推)

這數值和自動戰鬥的損傷差不多(應該)
如果是手動的話,能瞬殺或射程外的話,就能將損傷降到0
最後又會回到要你選擇計算的類型,直到輸入0(中途可以隨時從右上離開)

[原始碼]
----------以下內容可能會造成不適-------------








#include <stdio.h>
#include <stdlib.h>

int main(void)
{unsigned short int menu_type;
float turn_atk;
float turn_def;

float lead_atk_atk;
float lead_atk_def;
float lead_def_atk;
float lead_def_def;
float lead_atk_lead;
float lead_def_lead;
float lead_rate;

float solider_amount_atk;
float solider_amount_def;
int solider_type_atk;
int solider_type_def;
float solider_atk;
float solider_hp;
float solider_type_rate;

float damage_atk;
float damage_hp;

menu_type=1;
printf("請輸入數字 :: ver1.1");
while (menu_type !=0)
    {
        printf("\n0.離開程式\n1.攻擊間的耗損\n2.最低秒敵兵力(暫無)\n3.能獲得多少EXP(暫無)\n請選擇要計算的類型:");
        scanf("%d",&menu_type);
        if (menu_type ==1)
        {
            printf("請分別輸入我方傭兵的攻擊力、防禦力、統帥值:");
            scanf("%f%f%f",&lead_atk_atk,&lead_atk_def,&lead_atk_lead);
            printf("我方兵力:");
            scanf("%f",&solider_amount_atk);
            printf("我方兵種(1~3劍,4~6槍,7~9騎,10~12弓,13~15法):");
            scanf("%d",&solider_type_atk);
            printf("敵方兵力:");
            scanf("%f",&solider_amount_def);
            printf("敵方兵種(1劍,2槍,3騎,4弓,5法):");
            scanf("%d",&solider_type_def);
            while (solider_type_atk<1 or solider_type_atk>15 or solider_type_def<1 or solider_type_def>5)
            {
                printf("*請重新輸入*\n");
                printf("我方兵種(1~3劍,4~6槍,7~9騎,10~12弓,13~15法):");
                scanf("%f",&solider_type_atk);
                printf("敵方兵種(1劍,2槍,3騎,4弓,5法):");
                scanf("%f",&solider_type_def);
            }    
            if(solider_type_atk>=1 && solider_type_atk<=3)  
            {
                if(solider_type_def==1)
                {solider_type_rate=100;}
                if(solider_type_def==2)
                {solider_type_rate=130;}
                if(solider_type_def==3)
                {solider_type_rate=70;}
                if(solider_type_def==4)
                {solider_type_rate=115;}
                if(solider_type_def==5)
                {solider_type_rate=85;}
            }
            if(solider_type_atk>=4 && solider_type_atk<=6)
            {
                if(solider_type_def==1)
                {solider_type_rate=70;}
                if(solider_type_def==2)
                {solider_type_rate=100;}
                if(solider_type_def==3)
                {solider_type_rate=130;}
                if(solider_type_def==4)
                {solider_type_rate=85;}
                if(solider_type_def==5)
                {solider_type_rate=115;}                    
            }
            if(solider_type_atk>=7 && solider_type_atk<=9)
            {
                if(solider_type_def==1)
                {solider_type_rate=130;}
                if(solider_type_def==2)
                {solider_type_rate=70;}
                if(solider_type_def==3)
                {solider_type_rate=100;}
                if(solider_type_def==4)
                {solider_type_rate=115;}
                if(solider_type_def==5)
                {solider_type_rate=85;}
            }
            if(solider_type_atk>=10 && solider_type_atk<=12)
            {
                if(solider_type_def==1)
                {solider_type_rate=85;}
                if(solider_type_def==2)
                {solider_type_rate=115;}
                if(solider_type_def==3)
                {solider_type_rate=85;}
                if(solider_type_def==4)
                {solider_type_rate=100;}
                if(solider_type_def==5)
            {solider_type_rate=115;}
            }
            if(solider_type_atk>=13 && solider_type_atk<=15)
            {
                if(solider_type_def==1)
                {solider_type_rate=115;}
                if(solider_type_def==2)
                {solider_type_rate=85;}
                if(solider_type_def==3)
                {solider_type_rate=115;}
                if(solider_type_def==4)
                {solider_type_rate=85;}
                if(solider_type_def==5)
                {solider_type_rate=100;}
            }    
            if(solider_type_atk==1 or solider_type_atk==10 or solider_type_atk==13)
                {solider_atk=18;}
            if(solider_type_atk==2 or solider_type_atk==11 or solider_type_atk==14)
                {solider_atk=26;}                
            if(solider_type_atk==3 or solider_type_atk==12 or solider_type_atk==15)
                {solider_atk=36;}    
            if(solider_type_atk==4 or solider_type_atk==7)
                {solider_atk=17;}    
            if(solider_type_atk==5 or solider_type_atk==8)
                {solider_atk=25;}    
            if(solider_type_atk==6 or solider_type_atk==9)
                {solider_atk=35;}    
            if(solider_type_def==1 or solider_type_def==2)
                {solider_hp=34;}                
            if(solider_type_def==3)        
                {solider_hp=32;}                
            if(solider_type_def==4 or solider_type_def==5)        
                {solider_hp=28;}    
     
            if(solider_amount_def>=660)
                {
                    if(solider_amount_def>=1710)
                    {
                        lead_def_atk=660;
                        lead_def_def=160;
                        lead_def_lead=70;
                    }
                    else
                    {
                        lead_def_atk=590;
                        lead_def_def=140;    
                        lead_def_lead=64;

                    }
                }
                else
                {
                    lead_def_atk=520;
                    lead_def_def=120;
                    lead_def_lead=58;
                }
                
                turn_atk = solider_amount_atk * solider_atk * (lead_atk_lead + 100) / 200 * (solider_type_rate / 100);
                damage_atk = turn_atk / solider_hp + (lead_atk_atk - lead_def_def) / solider_hp;
                printf("turn_atk=%.0f\n",turn_atk);
                printf("我方的殺敵數=%.0f\n",damage_atk);

            if(solider_type_def==1)  
            {
                if(solider_type_atk>=1 && solider_type_atk<=3)  
                {solider_type_rate=100;}
                if(solider_type_atk>=4 && solider_type_atk<=6)
                {solider_type_rate=130;}
                if(solider_type_atk>=7 && solider_type_atk<=9)
                {solider_type_rate=70;}
                if(solider_type_atk>=10 && solider_type_atk<=12)
                {solider_type_rate=115;}
                if(solider_type_atk>=13 && solider_type_atk<=15)
                {solider_type_rate=85;}
            }
            if(solider_type_def==2)
            {
                if(solider_type_atk>=1 && solider_type_atk<=3)  
                {solider_type_rate=70;}
                if(solider_type_atk>=4 && solider_type_atk<=6)
                {solider_type_rate=100;}
                if(solider_type_atk>=7 && solider_type_atk<=9)
                {solider_type_rate=130;}
                if(solider_type_atk>=10 && solider_type_atk<=12)
                {solider_type_rate=85;}
                if(solider_type_atk>=13 && solider_type_atk<=15)
                {solider_type_rate=115;}                    
            }
            if(solider_type_def==3)
            {
                if(solider_type_atk>=1 && solider_type_atk<=3)  
                {solider_type_rate=130;}
                if(solider_type_atk>=4 && solider_type_atk<=6)
                {solider_type_rate=70;}
                if(solider_type_atk>=7 && solider_type_atk<=9)
                {solider_type_rate=100;}
                if(solider_type_atk>=10 && solider_type_atk<=12)
                {solider_type_rate=115;}
                if(solider_type_atk>=13 && solider_type_atk<=15)
                {solider_type_rate=85;}
            }
            if(solider_type_def==4)
            {
                if(solider_type_atk>=1 && solider_type_atk<=3)  
                {solider_type_rate=85;}
                if(solider_type_atk>=4 && solider_type_atk<=6)
                {solider_type_rate=115;}
                if(solider_type_atk>=7 && solider_type_atk<=9)
                {solider_type_rate=85;}
                if(solider_type_atk>=10 && solider_type_atk<=12)
                {solider_type_rate=100;}
                if(solider_type_atk>=13 && solider_type_atk<=15)
                {solider_type_rate=115;}
            }
            if(solider_type_def==5)
            {
                if(solider_type_atk>=1 && solider_type_atk<=3)  
                {solider_type_rate=115;}
                if(solider_type_atk>=4 && solider_type_atk<=6)
                {solider_type_rate=85;}
                if(solider_type_atk>=7 && solider_type_atk<=9)
                {solider_type_rate=115;}
                if(solider_type_atk>=10 && solider_type_atk<=12)
                {solider_type_rate=85;}
                if(solider_type_atk>=13 && solider_type_atk<=15)
                {solider_type_rate=100;}
            }    
            

            if(solider_type_def==1 or solider_type_def==4 or solider_type_def==5)
                {solider_atk=18;}    
            if(solider_type_def==2 or solider_type_def==3)        
                {solider_atk=17;}
            if(solider_type_atk==1 or solider_type_atk==4)
                {solider_hp=34;}
            if(solider_type_atk==2 or solider_type_atk==5)
                {solider_hp=50;}                
            if(solider_type_atk==3 or solider_type_atk==6)
                {solider_hp=70;}    
            if(solider_type_atk==7)
                {solider_hp=32;}    
            if(solider_type_atk==8)
                {solider_hp=48;}    
            if(solider_type_atk==9)
                {solider_hp=68;}    
            if(solider_type_atk==10 or solider_type_atk==13)
                {solider_hp=28;}    
            if(solider_type_atk==11 or solider_type_atk==14)
                {solider_hp=44;}    
            if(solider_type_atk==12 or solider_type_atk==15)
                {solider_hp=64;}    

         
                             
                turn_atk = solider_amount_def * solider_atk * (lead_def_lead + 100) / 200 * (solider_type_rate / 100);
                damage_atk = turn_atk / solider_hp + (lead_def_atk - lead_atk_def) / solider_hp;
                printf("turn_atk=%.0f\n",turn_atk);
                printf("敵方的殺敵數=%.0f\n",damage_atk);
}
}
                return 0;}
                
//bug歷史
/*
v0.1 最初版本,容易崩潰
v0.2 改正兵種間倍率,程式依舊不穩
v1.0 傷害公式大改寫
v1.1將雙方的損傷一起計算
*/
-----------------------------
結論:用excel寫比方便+輕鬆 (眼神死
引用網址:https://home.gamer.com.tw/TrackBack.php?sn=1571247
All rights reserved. 版權所有,保留一切權利

相關創作

同標籤作品搜尋:聖痕幻想

留言共 7 篇留言

一顆雪人
喔我的頭...
看起來有點像C還是JAVA的東西最討厭了 = =

04-04 11:08

羽翼
就跟你說會不舒服了吼 XD~ 還看 (敲頭)04-04 13:18
笨蛋中二病
原來傷害公式是
攻擊方傷害值 = 攻擊方士兵數量 × 士兵攻擊力 × (傷害倍率 ÷ 100) × [(攻擊力方統率值 + 100) ÷ 200]
殺傷數 = [攻擊方傷害值 + (攻擊方傭兵攻擊力-防禦方傭兵防禦力) ] ÷ 防禦方士兵生命值
這條才對呀...
剛才用1300的騎兵打442的槍兵 結果用另外那條公式
就是統帥力倍率=100+攻撃側統率力-防御側統率力 那條
結果發現根本不對 白白的扣兵了T_T
來這裡看到大大的百科才發現大大的公式是對的 讚一個

04-10 02:12

羽翼
請問你用的該不會是日版wiki上或哈拉版上發的公式? 原本那條公式在某個值內計算會準,但設定個極端的情況就炸了,所以我才會寫新的公式04-10 10:14
笨蛋中二病
對 我就是用日版WIKI就是巴哈上發的那條公式
原本的公式會因應雙方統率差距而造成更多的傷害差距
而且統率傷害倍率在雙方統率所差無幾時是差不多100%的傷害輸出
結果今天用1300的騎打442的槍兵 雙方統率只差1點的情況居然沒法一擊必殺
按日版WIKI的公式 我的兵種就算被剋了70% 但兵力是敵人的3倍
還是有210%的傷害輸出 照計算是剛好能秒掉還多一點點 除非還有其它減成
來到這裡看了你的公式才發現原來傷害值要統率值到達100才有100%兵力傷害輸出
而且還跟敵人的統率沒有關係!!

04-10 15:01

影~飛雪
有點想要幫忙改寫一部份,中間那堆if的句子,如果改成用陣列來提取的話,可以乾淨明瞭很多,code也會縮短很多

04-14 14:37

羽翼
願意幫忙改的話大感謝 XD~ 陣列我們要到期中考後才會上。04-14 15:22
影~飛雪
改到一半有一些疑問,你的數據是從哪裡來的呢?關於敵人的HP跟攻擊力的方面。
因為我看到敵人的HP跟巴哈百科上面的不一樣。

04-17 02:59

影~飛雪
原則上按照你原本的數據改好了,改變的部分當中,新加入的我會用/////上下隔開,而刪掉(取代掉)的部分我會把他注解掉沒有真的刪除。不過...要怎麼丟上來呢?

04-17 03:10

羽翼
放你的小屋如何 XD?04-17 06:48
影~飛雪
我已經貼到小屋上了,可以去看看,不過還沒有實際測試過...

04-17 14:50

我要留言提醒:您尚未登入,請先登入再留言

1喜歡★rola1989 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:[Minecraft]雅... 後一篇:[聖痕]葬龍峽谷關卡資料...

追蹤私訊切換新版閱覽

作品資料夾

ilove487奇幻小說連載中
[達人專欄] 《克蘇魯的黎明》0685.絕對不許分開!看更多我要大聲說昨天17:51


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】