ドラゴンクエスト4 レベル−経験値対応について


以下のプログラムで、レベル−経験値対応を出力します。出力結果は、実測デ
ータと完全に一致しています。


// DQ4lvex.java
// ドラゴンクエスト4のレベル−経験値対応の数列を出力するプログラム
// 1998.07.31 by NAKAYAMA Takayuki

import java.io.*;

class DQ4lvex {
    public static void main(String args[]){
        int exp[][] = new int[8][100];         // 経験値
        int kaisa[][] = new int[8][100];       // 階差数列
        // 階差の公比が変わるポイント一覧(これは試行錯誤で発見)
        int change[][] = {  { 4, 4, 10, 14, 42},
                            { 3, 3, 11, 19, 41},
                            { 1, 3, 11, 16, 43},
                            { 1, 3, 11, 16, 43},
                            { 1, 3, 11, 16, 44},
                            { 3, 3, 11, 18, 43},
                            { 3, 3, 11, 16, 44},
                            { 3, 3, 11, 17, 42},};

        kaisa[0][0] = 19; // 初期値
        kaisa[1][0] = 12;
        kaisa[2][0] = 16;
        kaisa[3][0] = 18;
        kaisa[4][0] = 19;
        kaisa[5][0] = 10;
        kaisa[6][0] = 15;
        kaisa[7][0] = 20;

        FileWriter fw;
        try {
            fw = new FileWriter("DQ4lvex.txt");    // 書き込むファイルを指定
//          try {                                  // 将来の拡張に使う
                // 見出しの出力
                System.out.println("DRAGON QUEST 4 LV-EX FUNCTIONS");
                fw.write("DRAGON QUEST 4 LV-EX FUNCTIONS\r\n");
                System.out.println();                    fw.write("\r\n");
                System.out.print("Lv");                  fw.write("Lv");
                System.out.print("   Brave");            fw.write("   Brave");
                System.out.print("    Lyan");            fw.write("    Lyan");
                System.out.print("   Arena");            fw.write("   Arena");
                System.out.print("   Krift");            fw.write("   Krift");
                System.out.print("   Burai");            fw.write("   Burai");
                System.out.print(" Torneco");            fw.write(" Torneco");
                System.out.print("  Marnya");            fw.write("  Marnya");
                System.out.print("   Minea");            fw.write("   Minea");
                System.out.println();                    fw.write("\r\n");
                
                // 各数列の計算
                for (int i = 0; i < 8; i++) {
                    for (int j = 1; j < change[i][0]; j++) {   // 階差数列の計算
                        kaisa[i][j] = kaisa[i][j-1] * 2;
                    }
                    for (int j = change[i][0]; j < change[i][1]; j++) {
                        kaisa[i][j] = kaisa[i][j-1] * 15 / 8;
                    }
                    for (int j = change[i][1]; j < change[i][2]; j++) {
                        kaisa[i][j] = kaisa[i][j-1] * 3 / 2;
                    }
                    for (int j = change[i][2]; j < change[i][3]; j++) {
                        kaisa[i][j] = kaisa[i][j-1] * 5 / 4;
                    }
                    for (int j = change[i][3]; j < change[i][4]; j++) {
                        kaisa[i][j] = kaisa[i][j-1] * 9 / 8;
                    }
                    for (int j = change[i][4]; j < 100; j++) {
                        kaisa[i][j] = kaisa[i][j-1];
                    }
                    
                    for (int j = 2; j < 100; j++) {            // 経験値の計算
                        exp[i][j] = exp[i][j-1] + kaisa[i][j-2];
                    }
                }
                
                // 結果の出力
                for (int j = 1; j < 100; j++ ) {     // レベルの桁合わせ
                    if (j < 10) {
                        System.out.print(" ");
                        fw.write(" ");
                    }
                    System.out.print(j);
                    fw.write(j + "");                // j だけ出力→文字化け
                    for (int i = 0; i < 8; i++) {    // 経験値の桁合わせ
                        int k = 10000000;
                        while (k >= 10) {
                            if (exp[i][j] < k) {
                                System.out.print(" ");
                                fw.write(" ");
                                k /= 10;
                            } else {
                                break;               // 無限ループを防ぐ
                            }
                        }
                        System.out.print(exp[i][j]);
                        fw.write(exp[i][j] + "");    // exp[i][j] だけ出力→失敗
                    }
                    System.out.println();
                    fw.write("\r\n");
                }
/*          } catch (IOException e) {
                System.err.println("IO error");
                System.exit(1);
            } finally {*/
                fw.close();
//          }
        } catch(IOException e) {
            System.out.println("Opening/Closing error");
            System.exit(1);
        }
    }
}

トップページに戻る
DQページに戻る
DQ4データ集に戻る