ドラゴンクエスト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);
}
}
}