忍者ブログ


[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。



[ 2018/09/25 09:53 | ]
テトリ◯?の基盤プログラムを作ってみた
どうしても

これを移植したかったのでやった。後悔はしていない。

ちなみに人生初のオープンソース



これは「スペースパニック」というキーチェーンゲームです。(アーケードゲームのアレではない。)
これ、簡素に見えますが、実はゲーム内容がとてもしっかりと出来ているんです。
なにより操作性が良すぎる。

ただ、見た目のイメージ通り「すぐ壊れる」。
ボタンが効かなくなったり、消していた音が急に出たり、液晶が突然消えてリセットがかかったりと、ひどい有様。

「だったら携帯アプリにでも移植してやんよ」ということで作り始めたわけです。


ソースは以下の通りです。(C++)
太字がディレクトリ階層、リンクがソース本体です。

とりあえず G++ と ncurses が使える環境の上でコンパイル、実行できるはずです。
(make -> ./Tetris)
あまりテストをしていないので、バグを見つけたらコメントをください。。。

/
 Makefile
 main.cpp

/TetrisBase/
 TetrisBase.hpp
  --> CurrentTetro.cpp
  --> TetrisField.cpp
 TetrisDefines.hpp
 DrawTetris.hpp
  --> DrawTetris.cpp
 TetrisMain.hpp
  --> TetrisMain.cpp

/TetrisBase/ConsoleBase/
 ConsoleBase.hpp
  --> ConsoleDraw.cpp



操作方法 : 基本的に右手ホームポジション。
 J / L : 左/右 移動
 K : 落下
 I : 右回転
 スペースキー : ドロップ(高速落下 + 設置)

*** 解説というか。 ***
今回は、テトリスの「基盤」を重視して作ったため、描画を担当する DrawTetris.* や、テトリスを動作させる TetrisMain.* のソースは、とーーっても汚いです。
かなりスクリプト化しています。。。
また、これらは完全やっつけ仕事だったので、操作性やゲーム性がめちゃめちゃ悪いです。
それ以外の部分でちょっと挽回しているので、ご容赦くださいw

基本的なテトリスの枠組みは TetrisBase.hpp(クラス定義) , TetrisField.cpp(フィールド) , CurrentTetro.cpp(操作しているテトリミノ) の3つのファイルで出来ています。

機能ごとにクラスを分けたため、例えば「ホールド」を実現したければ、CurrentTetroクラスをホールド用に確保しておいて、ホールド動作時にそちらにコピーするという使い方ができると思います。

また、テトリスに必要なデータの定義は TetrisDefines.hpp にて定義されており、
このファイルの内容を変更することで、フィールドのサイズを変更したり、ブロックのパターンを増やしたりできます。
参考程度に、フィールドのサイズを変更したスクリーンショットを以下に載せておきます。


通常モード。


フルHDテトリスも夢じゃない。(フルHDテトリスは既に存在します。)



*** 今後。 ***
これからiアプリ用に実装していくつもりです。
開発言語を変更することになってしまいますが、「面倒」以外はとくに問題もないので。

また、先に説明した「点滅ブロック」も実装しなければいけないです。
この処理は、今回ので言うと TetrisMain.* に実装すべきだと思います。

拍手[0回]

PR



[ 2010/05/22 09:47 | Comments(0) | TrackBack(0) | プログラム ]

トラックバック

トラックバックURL:

コメントを投稿する






<< ぐーぐるぱくまん  |  ホーム  |  ルービックキューブ >>