ついにテトリス完成!
ここ最近作ったりさぼったりを繰り返していましたがようやくテトリス完成しました!
プログラミングはなんかノッてるときは結構頑張れるんですがいったん間が空くと改めてコードの内容を把握しないといけないから面倒になってくるんですよね
最初はJavaScriptでやってみようかと思ったけどなんかタイマーで画面動かすのがうまくいかなくてめんどうだったのでやっぱりJavaにしました。
とりあえずゲーム画面のマスはGridLayoutとJLabelで表現してます。
最初は画像で表示しようかなと思ったのですが画像を一個一個表示させようとするとなんだか凄いスキマが開いてしまったので
アルゴリズムの練習が優先だしとりあえずプレイできればいいかとJLabelで一行ずつ表示させることにしました。
画面のレイアウトはちょっとまだうまくできない
完成品もゲーム画面がやたら端っこに行ってしまった
本当はもうちょい中央に寄せたいんだけどねえ
まずは画面にブロック情報を反映させるのに手間取りました。
あとはきちんと期待通りの動きをさせるところかな~
他のブロックと被らないようにしないといけないし
操作で回転させるところとかも結構大変でした
まず最初は回転させたときのちゃんとした動きがいまいち分からなかったから調べたりして
あとは個々のブロックの変化を個別に打ち込んでいきました。
それにしてもブロック回転の規則性とか7種類ごとに落ちてくるってシステムとか今回初めて知りました
回転の規則性があるのは当たりまえなんですけどね
落下の動きが加わるから普通にプレイしながら規則を見つけるのは結構大変だよなあー
一定時間ごとに処理するのは簡単でした
Javaもなんだかんだでまだまだ使われているだけあってちゃんと機能は揃ってます
ちなみにテトリスのブロックは◆で落ちてきて下まで来ると■に変化します
落ちるブロックも最初■だったのですがこれだと落下時の判定で途中でとまっちゃったりして、そのままで対処するのがだるかったのでとりあえず最初は◆にしました。
あとは揃った行がなかなか消えなくて大変でしたね
ArrayListで揃った行をremoveしてその分新しい行を挿入していけばいいかと思ったんですが全然消えなくて
結局ふつうの配列で一行ずつずらしていく形になりました
それはそれで一行消すごとに配列にずれが生じてくるのでそこも調整しなければいけなかったり
その処理自体は別に大変なことではないのですけどおかしいところに気付くまでが結構苦労するんですよね
そんな感じでとりあえずですがなんとか形にはなりました
不具合はまあ探せばあるかもしれないけど見た感じはないかな・・・
ただこれ書いてる途中で動かしてる間に一時停止中にもボタンで操作できる不具合とあとなんかたまにタイマーストップしてても時間が動いてしまう不具合が気になりました
一時停止中のボタン操作はちょっと判定用のboolean変数を追加したら直りましたがタイマーストップ時に時間がたって勝手に動き始めてたりするのはよくわからないです
なんか問題あるのか仕様なのか?自分のPCでの別の操作が影響しているのだろうか?いまいちそこらへんが分かりません
まあ仕様ってことで・・・
そんなわけでとりあえず完成したのでこれのソースも公開してもいいんですが、テトリスは登録商標がどうとかで結構めんどうそうなんでやめとくかなあ・・・
なにはともあれこれで〇×ゲーム、オセロ、テトリスともなんとか完成しました
それなりに勉強にもなったのでやってよかったかな
次はまた勉強して今度はandroidアプリに挑戦しようかな~と考えてるところ
コメント
アプリ開発は順調でしょうか?
ここ最近、私はPLCをいじりながらラダー言語の学習をしています。
他言語と同様、ラダー言語にも癖があり、
この言語の勉強は将棋の手筋を覚えるようで大変です。
ラダー言語ですか?
電気系の奴ですかあ・・・
仕事に関係してるんですかね?
頑張ってください