HSPからJavaでの再開発

実は前々からネットゲームが作りたかったです。
というのも、自分がやっていたネトゲはことごとく潰れるというジンクスがありまして。
ROBROBのMMO!!から始まり、じゃが島の軍団、ボンバーマン、全部遊べなくなってしまいました。
(TWは、遊べるから大丈夫だけど、それでも結構なくなっていく確率が高い感じがする。)

そして、じゃが島軍団の一度目の閉鎖で、決心したのです。
いつか作ろうと!

でもそのころはHSPしか言語ができなく、さらにまだまだ未熟な初心者でした。
HSPでランチャー兼ダウンローダを作ったり、d3moduleでなんとか形にしようと頑張った時期もありました。
そして2年前にCを去年にJavaを勉強して、ついに今度こそと、2月あたりからチャレンジすることに決めました。

じゃが島には色々な思い出があり、軍団みたいで楽しいのを目指そうと、
3DのFPSMMO?みたいなのを目標にすることに決めました。

Javaで3DというとJava3DとJOGLがあります。
Java3DはJavaの別モジュールみたいな感じで別インストールが必要。(jarで配布する方法もあります。)
JOGLはOpenGLです。こっちのほうがやるとしたら楽しそう。Java Web Startで配布できるらしい。
後で知ったのですが、どちらも、Java Web Startで配布できるらしいですね。

JOGLはアプレットでもいけるみたいです。

追記
インストール無しで利用できるJava3Dのアプレットの設置方法は
mebius.tokaichiba.jpさんの「org.jdesktop.applet.util.JNLPAppletLauncher」を使った手法
Java3Dのアプレットを公開する方法」が参考になります。
JOGLのアプレットの設置も同じく「JNLPAppletLauncher」を利用すれば設置できます。

ソフトウェアレンダラの開発

3D描写は自作と決めました。

理由は、3Dの勉強をかねる。
まあよくある理由ですが、やる気が大事なんです。

もし、3Dを作るが目的ではなく、
3Dを表示が目的なら、上のJOGLの方がもちろんいいです。

ところで自作3Dといっても、実は2種類あります。
・GraphicsのdrawPolygon
・1ピクセルずつ全描写する

上記のdrawPolygonを使うほうが、速度が早くそして簡単にできるのですが、
全てJAVA OSに任せてしまうため、頂点カラーやスムーズシェーディング、Zバッファが出来ないのです。
というわけで、画像をピクセルで、必要とあればGraphicsを使用できて、
ピクセルはBufferedImageに直結しているというようなクラス作成から始めました。

次に、描写関係です。
最初は、「2点を結ぶ線分」からはじめました。
実はこれが、一番の基本となるのです。

簡単そうに見えて、意外に難しい問題です。
ウィンドウの外の部分を描写するのは時間がもったいないわけですし、
実数を使うのも、どうかと。まあ頑張って実装しました。
これが出来れば、あとはすらすらいけました。「2点を結ぶ線分」
→「下の辺2点が水平な三角形」→「上の辺2点が水平な三角形」→「2つ上下をくっつけて任意の形の三角形」
→「任意の形の3角形を、2つくっつけて、任意の形の四角形」
こんな感じdrawPolygonを実装できます。

「2点を結ぶ線分」というのは、始点と終点に、それぞれ色を設定して、
始点から、終点までなめらかに色が変化する、
というものも実装することが大事です。

サーバーとクライアントの開発

サーバーとクライアントを作成しました。
参考にしたページは、mmo!!でおなじみのロブロブさん開発日記MMOの作り方です。
ここで恥ずかしながら、初めてArrayListやHashMapの使い方を勉強しました。
だって今までツール作りしかやってなかったんで。
いや、ツール作りでも使う人は使うか^^;

HSPにはこんなのなかったし、初めての概念だったというわけです。
通信の勉強は、TECHSCOREのTCPIPネットワークプログラミングを見て、
サンプルから拡張していきました。

一応動くものができた

そんなこんなで、ゲームとしてはまだまだですが、
動くものが完成しました。

開発したツール群

オブジェクト作成

(画像は懐かしいあの看板

マップ作成ツールと、プレビュー

オブジェクト配置

ネットワーク通信