ファイナルファンタジー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);
}
}
}