ここから本文です

java言語で学習の一環としてGUIを用いたテトリスのプログラムを制作していて、GUI...

atfamicさん

2017/4/322:01:58

java言語で学習の一環としてGUIを用いたテトリスのプログラムを制作していて、GUIとしてswingを用い、GridBagLayoutでブロックを表現しようとしています。

JFrameにJPanelを設置し、そのJPanel内に表の形式で別のJPanelを敷き詰め、敷き詰めたJPanelのフィールドを操作することでブロックの存在を表したり、そのパネルの色を変更し、テトリスを実現しようとしました。

各ブロックをオブジェクトとして生み出して処理するのですが、いざ製作してみると結局ブロックを生み出す際、そのオブジェクトのコンストラクタを呼び出しているだけのプログラムになってしまい、手続き型の言語と大差ないようなプログラムになってしまいました。(そのコンストラクタは具体的には指定した座標の位置にあるパネルを基準に先ほど述べたフィールドを操作してブロックを表現するものです。)

オブジェクト指向という特徴がうまく活かしきれなかった気がしてしまうのですが、この場合どのようにプログラムを構成すればjavaのオブジェクト指向という特徴を活かしたプログラムが構成出来るのでしょうか??

長文ごめんなさい!

閲覧数:
91
回答数:
1
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

mzg********さん

2017/4/400:15:48

オブジェクト型言語といえども、各メソッド内部の処理順は、上から下へなので、全部mainメソッド内部に作り込んだら手続き型言語と同じになります。手続き型言語やってからjavaを始めると私もそうでしたが、だいたい初回はそういう作りになってしまうようですよ。
オブジェクト指向の醍醐味は、「ブロック」自体をクラスとして独立させて、ブロック側で位置や向きを制御(ブロックのコンストラクターは最初の位置と形状をきめるだけとし、移動や回転はメソッドを持たせて、クリックなどに応じてメソッドを呼ぶ。)、そしてmainの流れからその制御機構を隠してしまうことにあると思っています。
また、このブロックオブジェクトは落下ごとに生成し直すと多数必要になりますが、画面で落下中のものは1個なので、着地したら着地用オブジェクトに情報渡すなどしていくと、落下用ブロックは1インスタンスで使い回しできると思います。使い回し用にinitメソッドを作って、コンストラクタからもinitメソッドを呼ぶ形式にすると同じ事をなんども書かなくてよいし。
つまり、落下ブロック、着地ブロック、全体画面とクラスをわけて機能分担させると、作り込みの精度が上がっていくようになると思います。

質問した人からのコメント

2017/4/4 12:16:52

回答ありがとうございます!
ブロックを移動中ブロックと着地後のブロックと分けて考えると確かに上手く作れそうです!!
私はC言語から覚えはじめ、実際にCを使ってテトリスを制作した際とプログラムが酷似しておりjavaのオブジェクト指向が上手くいかせなかったのですが、mzg_hrm様の言う通りにプログラムを組めばそのメリットが活かせると確信しております!
ありがとうございました!

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる