前回回答してくださった皆様、ありがとうございました。
現在、Javaで簡単なモグラ叩きゲームを作っており、リトライボタンを追加
しようと思っているのですが、なぜか上手くボタンが表示されません・・・何故で
しょうか?
また、マウスのクリック待ち時間(クリック制限時間)を作りたいのですが、どのようにすれば
よいでしょうか?
ソースは以下の通りです。(※字数制限に引っかかった、未使用のイベントなどは省略していますがご了承ください※)
import java.awt.*;
import java.awt.event.*;
import java.util.Random;
class mole_hit extends Frame implements MouseListener, ActionListener, MouseMotionListener
{
int mole_point;//土竜の出現データ
int fore_mole_point;//土竜の前の出現データ
int mole_x, mole_y;//土竜の出現座標
int mouse_x, mouse_y;//マウスの座標
int life = 10;
long t = 1000;
MyCanvas mc = new MyCanvas();
public static void main(String[] args)
{
new mole_hit();
}
mole_hit()
{
super("土竜叩きゲーム");//フレーム名
setSize(700, 700);//フレームサイズ
setLayout(null);
if (life <= 0)//ライフが0以下になったら、
{//リトライボタンを表示
Button b = new Button("RETRY");
b.addActionListener(this);
b.setSize(50, 25);
b.setLocation(620, 620);
add(b);
}
mc.setSize(600, 600);//キャンバスサイズ
mc.setLocation(0, 0);//キャンバス配置座標
mc.addMouseListener(this);
mc.addMouseMotionListener(this);
add(mc);
setVisible(true);
addWindowListener(new Close()); //ウィンドウクローズ
}
/*** ボタン等のイベント ***/
public void actionPerformed(ActionEvent e)
{
life = 10;
mc.repaint();
}
/*** マウスボタンが押されたとき ***/
public void mousePressed(MouseEvent e)
{
mouse_x = e.getX();
mouse_y = e.getY();
System.out.println("(" + mouse_x + "," + mouse_y + ")");//マウス座標確認用
mc.repaint();
}
/*** キャンバス ***/
public class MyCanvas extends Canvas
{
/*** 描画ステータス ***/
public void paint(Graphics g)
{
super.paint(g);
int line_x, line_y;//ライン描画用変数
int hall_x, hall_y;//ホール描画
int i, j;//ループ用変数
Dimension size = getSize();//ウインドウのサイズを取得
Sleep s = new Sleep();//スリープ用メソッド
Random rnd = new Random();
Color brown = new Color(160, 0, 0);//茶色
/*** ライフがあるとき ***/
if (life > 0)
{
/***** 背景色を青にする *****/
g.setColor(Color.blue);
g.fillRect(0, 0, size.width, size.height);
/*** ボックスの背景色を設定 ***/
g.setColor(Color.green);
g.fill3DRect(100, 100, 300, 300, true);
/***** 縦軸・横軸を描画*****/
line_x = 100;
line_y = 100;
g.setColor(Color.red);
/*** 縦軸を描画 ***/
for (i = 0; i < 4; i++)
{
g.drawLine(line_x, 100, line_x, 400);
line_x += 100;
}
for (i = 0; i < 4; i++)
{
g.drawLine(100, line_y, 400, line_y);
line_y += 100;
}
/*** 土竜の出現するボックスを描画 ***/
g.setColor(Color.black);
hall_y = 130;
for (i = 0; i < 3; i++)
{
hall_x = 115;
for (j = 0; j < 3; j++)
{
g.fillOval(hall_x, hall_y, 75, 40);
hall_x += 100;
}
hall_y += 100;
}
do
{
fore_mole_point = rnd.nextInt(9);
}
while(mole_point == fore_mole_point);
mole_point = fore_mole_point;
switch(mole_point)
{
case 0:
mole_x = 125;
mole_y = 135;
break;
case 1:
mole_x = 225;
mole_y = 135;
break;
case 2:
mole_x = 325;
mole_y = 135;
case 3:
mole_x = 125;
mole_y = 235;
break;
case 4:
mole_x = 225;
mole_y = 235;
break;
case 5:
mole_x = 325;
mole_y = 235;
break;
case 6:
mole_x = 125;
mole_y = 335;
break;
case 7:
mole_x = 225;
mole_y = 335;
break;
case 8:
mole_x = 325;
mole_y = 335;
break;
default:
break;
}
g.setColor(brown);
g.fillOval(mole_x, mole_y, 50, 25);
if (mole_x <= mouse_x && mole_y <= mouse_y && mole_x + 50 >= mouse_x && mole_y + 25 >= mouse_y)
{
/*** 成功時アクション ***/
g.setColor(Color.red);
g.fillOval(mole_x, mole_y, 50, 25);
}
s.Sleep(500);
life--;
}
/*** ライフが無いとき ***/
if (life <= 0)
{
g.setColor(Color.red);
g.fillRect(0, 0, size.width, size.height);
g.setColor(Color.blue);
g.drawString("GAME-OVER(´・ω・`)", 250, 300);
}
}
}
}
No.2ベストアンサー
- 回答日時:
んー・・・コードが汚い。
。。ただ、ボタンを直したいだけなら↓をすれば動きますが、綺麗に書き直したほうがいいです。
paintの中で土竜の場所を決めると、ウィンドウを最小化して戻したら違う場所に移るし。
if (life <= 0)//ライフが0以下になったら、
{//リトライボタンを表示
Button b = new Button("RETRY");
b.addActionListener(this);
b.setSize(50, 25);
b.setLocation(620, 620);
add(b);
}
の部分を
if 無しで。 (lifeは最初に10にしてるんだから、中のコードは実行されないし)
resetButton = new Button("RETRY");
resetButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
life = 10;
mc.repaint();
resetButton.setVisible(false);
}
});
resetButton.setSize(50, 25);
resetButton.setLocation(620, 620);
resetButton.setVisible(false);
add(resetButton);
にして (& private Button resetButton; をメンバー変数にして)
MyCanvasのpaintで
/*** ライフが無いとき ***/
if (life <= 0)
{
resetButton.setVisible(true); ←を足す。
上手く動作しました!
自分のコード汚いんですか・・・今まで指摘された事なかったから
知らなかった
ご指摘有難うございます。以降気をつけて書いてみます・・・。
No.1
- 回答日時:
なんでコンストラクタでボタンを作っているのかが理解できませんが....
「上手くボタンが表示されません」というところ, もっと具体的に「どうなるつもりで書いてどう『上手く表示されない』のか」を書けませんか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Androidで画像の中で指定した範...
-
C#のGraphicsクラスについてです。
-
VB.NETのSendMessageを教えてく...
-
JTableの特定セルの背景色を変更
-
iアプリでポップアップメニュー...
-
Android画面の作り方
-
Java、jPanelに描画する
-
「タイプ初期化子が例外をスロ...
-
エクセルVBAで、条件に一致する...
-
VBA 同じ名前のオブジェクトを...
-
オブジェクト参照がオブジェク...
-
エクセルVBA 画像を貼り付ける...
-
VB.netでメソッドからコントロ...
-
VB.NET getとsetの概念がわかり...
-
配列の重複する値とその個数を...
-
数学の計算問題。 3年間同じク...
-
インスタンス参照でアクセスで...
-
サーブレットコンテキストの意...
-
オートシェイプの位置がずれる...
-
private static という変数の修飾
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C# リストビューの特定のセルの...
-
VB.NETのSendMessageを教えてく...
-
C# DataGridView のCellPaintin...
-
PDF帳票を作成するためのフリー...
-
JAVAでの背景画像表示
-
VB.NET フォーム上に描いたグ...
-
SwingとEDT(イベントディスパッ...
-
アクセスで他アプリから復帰し...
-
Labelコントロールの背景をグラ...
-
Androidのフォントサイズ(SP)と...
-
画面のちらつきの原因が知りた...
-
Canvas等の図形を移動する時,直...
-
複数画像表示切り替え Visual c++
-
javaでクイズ
-
Androidで画像の中で指定した範...
-
C#のGraphicsクラスについてです。
-
C# テキストボックスについて
-
描画してもウィンドウをリサイ...
-
VS Treeview のデザイン変更
-
GDI+で描画した画像を消去する...
おすすめ情報