|
***************************** JavaでTetris ***************************** -- 01 Javaでテトリス -- ◆テトリスを通じて「Javaってどうなん?」を検証してみる、そんなページです。Javaというのはプログラム言語の一つで、Javaで作られたソフトは様々なマシン(パソコン、携帯電話など)の様々なOS(Windows、Macなど)で実行できるというナイスな特長があります。 ◆Javaでソフトを作ろう!となった時、GUIライブラリの選択肢としては主に3つあります。AWT、Swing、SWT の3種類です。(GUIライブラリって何なん?→ソフトの外観を作る材料…みたいなもの) ◆とりあえず手探りでテトリスを作ってみました。プログラム学習の手始めに作るものと言えばテトリス!と相場は決まっておるのです。 |
![]() <Swing版テトリス> |
|
◆3種類のGUIで作ったテトリスが以下のファイルです。かろうじて動く、という程度のものです。ソース同梱ですので、改変・配布等ご自由に。(※古いソースです。最新版は下のほうにあります) JavaTetris:AWT版(20KB) JavaTetris:Swing版(20KB) JavaTetris:SWT版(1MB) ◆Windows環境であれば、解凍後、Tetris.jarをダブルクリックするだけで起動するはずです。ただし、Java仮想マシンがインストールされていれば…の話ですが。昨今のパソコンでは標準でインストールされていると思います。なお、MacやLinuxでの起動方法は不勉強ゆえ知りませぬ。あと、MacOS9以前ではJavaアプリケーションは動作しない(Javaアプレットのみ)らしいです。 ◆SWT版はWindows用のモジュールが入っているので大きな容量となっています。Windows以外の環境で動かすには、環境に合わせて別途モジュールを入手する必要があります。(リンク先の[SWT Binary and Source]コーナーからダウンロード) ◆Tetris.jarをダブルクリックしても、初めにJava仮想マシンを起動するため、少し時間がかかると思います。また、tetris.iniファイルを書き換えることによって、ブロックのサイズや色などを変更することもできます。 |
![]() <広大すぎて緊張感ゼロ> |
◆操作方法は、矢印キーだけで操作できます。[↑]で回転します。また[Z][X]キーでも回転します。[Enter]または[Space]でポーズをかけることもできます。キーの割り当てをiniファイルで設定できないのが痛いところ。SWT版は、複数のキーを同時に押すと変な動きになります。SWTの仕様なのです。(回避策求ム) -- 02 れっつマルチスレッド。-- ◆マルチスレッドを習得するべく、テトリスのマルチスレッド化に挑戦。マルチスレッドというのは、簡単に言うと、複数の処理を同時並行的に動作させることです。不正確に言うなら、牛乳を飲みながら口笛を吹きながら風船をふくらます…みたいな。 ◆当初は描画処理をマルチスレッド化して、1秒間に60回の描画更新を自動で行わせることが第一目標だったのですが、そんなにあくせく画面更新しなくてもええやん、ということで、描画処理のマルチスレッド化は白紙撤回。 ◆結局、ブロックが一定時間ごとに落下するときの、その時間間隔の計測をマルチスレッド化するという地味な目標へ方針転換。あんまりマルチスレッドの勉強になっていない気も。 ◆あと、iniファイルでのキー設定を可能に。他、ソースコード全面的に叩き直し(見た目は変わらんけど)。また ver02 で、実行環境によってはスレッドの優先順位設定がうまく機能しないことが判明したので ver03 で修正。また ver03 ではキー操作の不具合(下を押しても稀にブロックが移動しない)があったので ver04 で修正。 JavaTetris:Swing版ver02(42KB)※スレッド不具合あり JavaTetris:Swing版ver03(42KB)※キー操作不具合あり JavaTetris:Swing版ver04(43KB) (AWT版、SWT版は割愛します) -- 03 れっつポリモフィズム。-- ◆ポリモフィズムって何なん?と言いますと、大雑把に言うなら「プログラムの一部分を交換可能にしよう」とするような仕組みのことです。 ◆このテトリスの場合で言うと、AWT、Swing、SWTというGUIの部分を簡単に切り替えられるようにしようというものです。 ◆具体的には、iniファイルでGUIを指定可能にしました。でもプレイヤーにしてみればGUIが変わったからといって、特に何も、わくわくするようなことは一つもありません。 JavaTetris:3GUI版(57KB) |