ファイナルファンタジー7 レベル−経験値対応について

★エアリスの新数列(レベル82)移行に伴いプログラムをバージョンアップしました!★

★プログラムの出力結果の説明★

以下のプログラムで、「基本数列」を12個出力します。この「基本数列」を、同じレベ
ルで経験値の小さい順に数列A、数列B、……、数列Lとします。しかし実際には、F
F7のキャラのレベル−経験値対応はここで出力した数列の間を何回か移り歩くのです。

例えばクラウドの場合、

レベル7〜レベル11……数列B
レベル12〜レベル21……数列E
レベル22〜レベル31……数列G
レベル32〜レベル61……数列H
レベル62〜レベル81……数列I
レベル82〜レベル99……数列K

となります。下の表は、他のキャラも合わせた一覧表です。

 レベル   1〜 12〜 22〜 32〜 42〜 52〜 62〜 72〜 82〜 92〜
クラウド   B  E  G  H  H  H  I  I  K  K
バレット   D  G  I  J  K  K  K  K  K  K
ティファ   B  E  G  H  I  I  I  I  J  J
エアリス   A  D  F  H  H  I  J  J  L  L
レッド13   B  E  H  I  I  I  J  J  J  J
ユフィ    ?  F  H  I  I  J  J  J  J  J
ヴィンセント C  F  I  I  I  J  J  J  J  J
ケット・シー ?  F  I  J  J  J  J  J  J  J
シド     ?  F  I  I  J  J  K  K  K  K

この仮説は、クラウドのレベル2の経験値(カームの回想イベントによれば128)を除
いて実測データと完全に一致しています。

★更新履歴★

Version    作成/更新日付    内容
1.00       1998. 7. 3        新規作成
1.01       1998. 7.18        計算結果をファイルにも出力するように変更
                             ホームページにソースを公開
1.10       1998.10. 8        エアリスのレベル82以降の新数列に対応
1.11       1998.10. 9        レベルの桁合わせの部分のコーディングを簡略化
                             初期値入力のコーディング行数を削減

★プログラム★

// FF7lvex.java
// ファイナルファンタジー7のレベル−経験値対応の基本数列を出力するプログラム
// Version 1.11
// 1998.10.9 by NAKAYAMA Takayuki

import java.io.*;

class FF7lvex {
    public static void main(String args[]){
        int exp[][] = new int[12][100];        // 経験値
        int kaisa1[][] = new int[12][100];     // 第1階差
        int kaisa2[][] = new int[12][100];     // 第2階差
        int kaisa3[][] = new int[12][100];     // 第3階差

        // 第3階差のパターン(これは試行錯誤で発見)
        int kaisax[][] = {  {14, 14, 13, 13, 14, 13, 13, 14, 14, 14},
                            {15, 13, 13, 15, 12, 15, 13, 13, 15, 14},
                            {15, 14, 13, 14, 14, 14, 13, 14, 15, 14},
                            {14, 14, 14, 14, 14, 14, 14, 14, 14, 14},
                            {14, 14, 15, 14, 14, 14, 15, 14, 14, 14},
                            {14, 15, 15, 14, 14, 14, 15, 15, 14, 14},
                            {15, 14, 15, 15, 14, 15, 15, 14, 15, 14},
                            {15, 15, 15, 15, 14, 15, 15, 15, 15, 14},
                            {16, 14, 16, 14, 16, 14, 16, 14, 16, 14},
                            {16, 15, 15, 16, 14, 16, 15, 15, 16, 14},
                            {16, 16, 15, 15, 16, 15, 15, 16, 16, 14},
                            {17, 15, 15, 17, 14, 17, 15, 15, 17, 14}};
        // 初期値
        for (int i = 0; i < 12; i++) {
            if (i < 3 ) {
                 kaisa2[i][0] = 6;
            } else {
                 kaisa2[i][0] = 7;
            }
        }

        FileWriter fw;
        try {
            fw = new FileWriter("FF7lvex.txt");    // 書き込むファイルを指定
//          try {                                  // 将来の拡張に使う

                // 見出しの出力
                System.out.println("FINAL FANTASY 7 LV-EX FUNCTIONS");
                System.out.println();
                System.out.print("Lv");
                fw.write("FINAL FANTASY 7 LV-EX FUNCTIONS\r\n");
                fw.write("\r\n");
                fw.write("Lv");
                for (int i = 1; i < 10; i++) {
                    System.out.print("     Ex" + i);
                    fw.write("     Ex" + i);
                }
                System.out.println("    Ex10    Ex11    Ex12");
                fw.write("    Ex10    Ex11    Ex12\r\n");
                
                // 各数列の計算
                for (int i = 0; i < 12; i++) {
                    for (int k = 0; k < 10; k++) {   // 第3階差の計算
                        for (int j = 0; j < 10; j++) {
                            kaisa3[i][10*k + j] = kaisax[i][j];
                        }
                    }
                    for (int j = 1; j < 100; j++) {  // 第2階差の計算
                        kaisa2[i][j] = kaisa2[i][j-1] + kaisa3[i][j-1];
                    }
                    for (int j = 1; j < 100; j++) {  // 第1階差の計算
                        kaisa1[i][j] = kaisa1[i][j-1] + kaisa2[i][j-1];
                    }
                    for (int j = 1; j < 100; j++) {  // 経験値の計算
                        exp[i][j] = exp[i][j-1] + kaisa1[i][j-1];
                    }
                }
                
                // 結果の出力
                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 < 12; i++) {   // 経験値の桁合わせ
                        for (int k = 8; k > Integer.toString(exp[i][j]).length(); k--) {
                            System.out.print(" ");
                            fw.write(" ");
                        }
                        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);
        }
    }
}

トップページに戻る
FFページに戻る
FF7データ集に戻る