脱ツクール。自作ゲームとは、自分でソースコードをガリガリ書いて作ったゲームのことを言う。
昔は、私もRPGツクールとかダンジョンクリエイターとか使ってましたが。もちろん、そういったソフトを使った方がはるかに見栄えのするゲームは作れるんですが、自分の創作意欲とかプライドが完全自作への道へ向かわせている。といった感じ。
さて、ドラクエみたいなゲームを作りたいと思っているところで、
老舗のゲーム制作サイトである「Javaでゲームを作りますが何か」で作り方をざっくりと説明しているので参考にしながらドラクエ的ゲームを自作していこうと思います。
目標
RPGを自作する
今年の夏までに完成版のリリース
スペック
ドラクエ1
女神転生1
ポケモン緑・赤まず、ドラクエ。
そして、メガテン、それからポケモンといった感じでいろいろ挑戦していきまっする。
RPGの制作は、まず引っかかるのが、キャラクターをどう動かすか。
でも、これは、ゲーム作りの基本なんで、ゲームを作れなければ勉強するしかないのです。
キーを押したら動くとか、壁にぶつかったら止まるとか。
「すらすれ」みたいなオープンソースのゲームを見て勝手に勉強してくださいとしかいえない。
http://www.katch.ne.jp/~mh524-1997/java/sample/arpg2/arpg.html
↑↑ゲームを自作したいと思う人はこのページにあるソースは非常に参考になると思う。
その前にJavaの基本は勉強しないといけないが。
ゲームのソースコードは長いので、プログラミングに慣れてないと
おげぇとなります。
・・・・・・・・
次にモンスターの登場(エンカウント)
これは、マップチップと同時にモンスターの2次元マップを書かないといけない。
0=草原 1=砂漠だとすると、
000000
011110
011110
011100
011100
011000
000000
という風にフィールドを描画したとして、
別のファイル、もしくはソースに、
0=スライム 1=毒サソリみたいな敵登場マップを書かないといけない。
例えばこんな感じ
000000
011110
011110
011100
011100
011000
000000
もちろん、アルファベットでも良い、
aがスライムで、bが毒サソリとなります。
aaaaaa
abbbba
abbbba
abbbaa
abbbaa
abbaaa
aaaaaa
前もってエンカウント率を決めておくとか、0だったら何%の確率でスライムが出るとか。いろいろ。
・・・・・・・・
それから、銭湯シーンの描画とか難しいと感じるかもしれないが、コマンド表示や戦闘シーンの描画はJavaの機能であるレクタングル描画で完結するような気がするのだが。
「Javaでゲームを作りますが何か?」から以下引用します。
// ウィンドウ
private MessageWindow messageWindow;
// ウィンドウを表示する領域
private static Rectangle WND_RECT =
new Rectangle(62, 324, 356, 140);
public MainPanel() {
・・・
// ウィンドウを追加
messageWindow = new MessageWindow(WND_RECT);
}
引用、終わりです。
いたって簡単です。
MainPanelはメインメソッドです。
でもこれだけだと、ただの四角形なので演出的につまらないですが。
またまた引用
if (spaceKey.isPressed()) { // スペース
// 移動中は表示できない
if (hero.isMoving()) return;
if (!messageWindow.isVisible()) { // メッセージウィンドウを表示
messageWindow.show();
}
}
ここまで引用
isMoving()は移動中かどうかのboolean変数だと思います。
キー入力中だったらtrueを返すんでしょう。多分。
if (!messageWindow.isVisible()) {
// 勇者の移動処理
heroMove();
// キャラクターの移動処理
charaMove();
}
public MessageWindow(Rectangle rect) {
this.rect = rect;
innerRect = new Rectangle(
rect.x + EDGE_WIDTH,
rect.y + EDGE_WIDTH,
rect.width - EDGE_WIDTH * 2,
rect.height - EDGE_WIDTH * 2);
}
public void draw(Graphics g) {
if (isVisible == false) return;
// 枠を描く
g.setColor(Color.WHITE);
g.fillRect(rect.x, rect.y, rect.width, rect.height);
// 内側の枠を描く
g.setColor(Color.BLACK);
g.fillRect(innerRect.x, innerRect.y,
innerRect.width, innerRect.height);
}
あ、ちゃんと、白い枠も書いてましたね。失敬。
またまた引用です。
今度はソースじゃなくて本文の引用。
フィールド移動中とコマンド画面ではモードの切り替えを行わないといけません。
そのアルゴリズムです。
引用
キー入力の横取り
メッセージウィンドウが表示中は別のキー処理をする必要があります。フィールド画面でスペースキーを押すとメッセージウィンドウが表示されますがメッセージウィンドウが表示された状態では次のメッセージへいったり、ウィンドウを閉じたりする必要があります。どのウィンドウが表示されているかで異なるキー処理をする必要があります。これをどうやるかすごく悩んだのですが次のようにしました。
public void run() {
while (true) {
// キー入力をチェックする
if (messageWindow.isVisible()) { // メッセージウィンドウ表示中
messageWindowCheckInput();
} else { // メイン画面
mainWindowCheckInput();
}
・・・
}
}
run()はゲームループです。ゲームループ内でキー入力を調べますが、メッセージウィンドウが表示されている(isVisible()がtrue を返す)間はmessageWindowCheckInput()、表示されていない間はmainWindowCheckInput()を呼び出しています。mainWindowCheckInput()は前回までのcheckInput()と同じメソッドです。ウィンドウが表示されているかいないかで異なるメソッドを呼び出すのがミソです。メッセージウィンドウが表示されているときのキー処理を行うmessageWindowCheckInput()です。
/**
* メッセージウィンドウでのキー入力をチェックする
*/
private void messageWindowCheckInput() {
if (spaceKey.isPressed()) {
messageWindow.hide();
}
}
スペースキーが押されたらメッセージウィンドウを閉じています。この方法はコマンドウィンドウなどたくさんウィンドウが出てくると管理がややこしくなりそうです。どのウィンドウが一番上にあるかを管理するスタック(後入れ後出しのデータ構造)を用意しておく方式がよいかもしれません。
以上引用終わり
上記のサイトの方はこのように書いてますが、コマンド画面だけで関数化していく方向になりそうですね。
・・・・・・・・・・・・
・・・・・・・・・・・・
・・・・・・・・・・・・
・・・・・・・・・・・・
RPGを作っていくうえで面倒なのが2次元配列マップの作成
・地形マップ
・敵配置マップ
・ワープ元、ワープ先マップ(移動マップ)
・イベント情報マップ
などです。
これらが、齟齬なく、噛み合って配置されてないといけないわけです。
ワープ元、ワープ先マップはキャラクターを実際に動かしてみて挙動を確かめながら書かないといけません。
ドアに触れたら城の中に入れるのに、城の壁にいきなり食い込んだ!なんて、ことになると困るわけです。
・・・・・・・・・・・・
・・・・・・・・・・・・
イベントの作成やキャラクターのセリフなんかも面倒ですね。
モンスターの描画もそれなりに時間がかかります。
・・・・・・・・・・・・
まあ、面倒、面倒といってしまってはきりが無いのですが、
面倒でも、作るのは創造へのモチベーションでしょうね。
・・・・・・・・・・・・
・・・・・・・・・・・・
自作ドラクエ
この夏を目標に、
作るぞ!
さらに、女神転生。
そして、ポケモン緑・赤。・・・・・・・・・・・・
・・・・・・・・・・・・

マイブームの佐村河内守関係の記事
以下引用
昨年6月、アエラは佐村河内(さむらごうち)守氏(50)に対し3時間に及ぶロングインタビューをした。心を動かされた部分は確かにある。だが、どこか腑に落ちなかった。そして、違和感の数々――。掲載は見送った。取材当時のことを振り返る。
インタビューは手話通訳者を介して行われた。それは、実に自然であった。会話にもっと苦労するだろうという先入観は、すぐに消えていた。
取材が始まると、佐村河内氏は実に饒舌だった。「HIROSHIMA」に込めた思い、この曲で全国ツアーが間もなく始まること、音楽の道を目指そうとした幼少期の話などが、よどみなく流れるように出てきた。全聾で耳鳴りも激しく、そうした中でどう作曲をするのか。素朴な疑問をぶつけると、やはり明解な回答が返ってくる。
「瞑想的作曲法と言っていますが、座って、いま目指している曲に集中していると、音が降りてくる。でも、ノイズの壁に阻まれる。大きな宇宙船の中にノイズの壁があって、その隙間から音が降りてくるんです。それはこちらから迎えに行くと、やっと受け取れる大事な音なんです。そうやって内側から生まれてきた音は、聞こえなくなったからこそ出てきた真実の音。その音が集まって曲になるんです」
実際に作曲し、譜面に記譜しているところを取材できないかと交渉すると、
「神様が降りてくる神聖な瞬間なので、見せることはできない」
それまで威厳のある語り口であったが、このときだけは薄ら笑いを浮かべるように話したことが、印象深く、鮮明な記憶として残っている。
こんな逸話も披露してくれた。
2001年頃のことだ。オーストリアのウィーンにあるベートーヴェンの墓に参ったという。墓前で彼はこう言った。
「ベートーヴェン先生、僕は障害も職業も、先生と一緒です」
すると、天空からベートーヴェンの声が降りてきた。
「違う。俺とお前は違う」
「何が違うんですか」
「作品のレベルと格が違う。障害と職業が一緒であろうが、俺とお前は違う。出直してこい」
ショックを受け愕然とし、けれどこれがバネとなり交響曲第1番を書き上げたという。事実は小説より奇なり、だ。もし偽りがないのなら、私たちにはわからない高い次元での話ということになる。
取材後、多角的な記事にしようと複数の関係者に当たってみると、思わぬ展開が待っていた。
「佐村河内氏の話のどこまでが本当なのか、甚だ疑問だ」
「クラシックでは時折、過去の作品をモチーフに作曲することがあるが、彼の作品はバッハやベートーヴェン、マーラーなどの影響が色濃く、オリジナリティーに疑問がある」
「お金にうるさい」
「本当は全聾ではなく、聞こえているのかもしれない」
こうした指摘を受け、本誌は記事の掲載を見送った。
※AERA 2014年2月17日号より抜粋
引用元:http://dot.asahi.com/ent/culture/2014021000056.html
何?あの手のギプス。
この前は片手だったのに、今回は両手。
そんなにピアノを弾かされたくないの??(苦笑)
「天空からベートーヴェンが降りてきた。」
はぁぁ???
「天空からベートーヴェンが降りてきた。」だって!?はぁぁぁぁぁ???!!!・・・・・・・・・・
日
ベートーヴェンが降りてきた
英
Beethoven has got down.
韓
Beethoven이 내려와 왔다
ベートーヴェニ ネリョワワッタ
中
贝多芬下了来
bei4 duo1 fen1 xia4 le lai2