★エアリスの新数列(レベル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); } } }