前提・実現したいこと
3つのボタン(緑黄赤)をタイミングよくクリックすると得点が与えられるプログラムを作成しています。
得点を得ると押したボタンの色が白に変わります。
タイミングを間違えると得点を失って押したボタンの色が灰色に変わります。
発生している問題・エラーメッセージ
赤色のボタンにしかノーツが流れず、赤をクリックしても緑のボタンの色が変わってしまいます。
該当のソースコード
Java
1import java.awt.*; 2import java.awt.event.*; 3 4class YPanel extends XPanel { 5 Panel innerPanel3; 6 Panel innerPanel4; 7 8 public YPanel() { 9 // setLayout(null); 10 innerPanel3 = new Panel(); 11 add(innerPanel3); 12 innerPanel3.setBackground(Color.black); 13 14 innerPanel4 = new Panel(); 15 add(innerPanel4); 16 innerPanel4.setBackground(Color.black); 17 } 18 public void setBounds(int x, int y, int width, int height) { 19 super.setBounds(x,y,width,height); 20 innerPanel3.setBounds(4,height-8,width-8,8); 21 innerPanel4.setBounds(width-8,4,8,height-8); 22 } 23} 24 25class XPanel extends Panel { 26 Panel innerPanel1; 27 Panel innerPanel2; 28 29 public XPanel() { 30 setLayout(null); 31 innerPanel1 = new Panel(); 32 add(innerPanel1); 33 innerPanel1.setBackground(Color.white); 34 35 innerPanel2 = new Panel(); 36 add(innerPanel2); 37 innerPanel2.setBackground(Color.white); 38 } 39 public void setBounds(int x, int y, int width, int height) { 40 super.setBounds(x,y,width,height); 41 innerPanel1.setBounds(0,0,width-8,8); 42 innerPanel2.setBounds(0,0,8,height-8); 43 } 44} 45 46class dpp6_4 { 47 static Frame myframe; 48 static YPanel mypanel1; 49 static YPanel mypanel2; 50 static YPanel mypanel3; 51 static YPanel mypanelline1[]; 52 static YPanel mypanelline2[]; 53 static YPanel mypanelline3[]; 54 static int score = 0; 55 56 public static void main(String args[]) { 57 int i; 58 59 myframe = new Frame(); 60 mypanel1 = new YPanel(); 61 mypanel2 = new YPanel(); 62 mypanel3 = new YPanel(); 63 64 myframe.setLayout(null); // does not use layout manager 65 myframe.setSize(400,600); // window size : width = 400, height = 600 66 myframe.setVisible(true); // make the window visible 67 68 myframe.add(mypanel1); 69 mypanel1.setBounds(30,40,100,100); 70 mypanel1.setBackground(Color.green); 71 mypanelline1 = new YPanel[5]; 72 for( i = 0; i < 5; i++ ) { 73 mypanelline1[i] = new YPanel(); 74 myframe.add(mypanelline1[i]); 75 mypanelline1[i].setBounds(270+25,130+i*80,50,50); 76 mypanelline1[i].setBackground(Color.gray); 77 mypanelline1[i].setVisible(false); 78 } 79 80 myframe.add(mypanel2); 81 mypanel2.setBounds(150,40,100,100); 82 mypanel2.setBackground(Color.yellow); 83 mypanelline2 = new YPanel[5]; 84 for( i = 0; i < 5; i++ ) { 85 mypanelline2[i] = new YPanel(); 86 myframe.add(mypanelline2[i]); 87 mypanelline2[i].setBounds(270+25,130+i*80,50,50); 88 mypanelline2[i].setBackground(Color.gray); 89 mypanelline2[i].setVisible(false); 90 } 91 92 myframe.add(mypanel3); 93 mypanel3.setBounds(270,40,100,100); 94 mypanel3.setBackground(Color.red); 95 mypanelline3 = new YPanel[5]; 96 for( i = 0; i < 5; i++ ) { 97 mypanelline3[i] = new YPanel(); 98 myframe.add(mypanelline3[i]); 99 mypanelline3[i].setBounds(270+25,130+i*80,50,50); 100 mypanelline3[i].setBackground(Color.gray); 101 mypanelline3[i].setVisible(false); 102 } 103 104 // o ma ji na i ! 105 mypanel1.addMouseListener(new MouseAdapter() { 106 public void mouseReleased(MouseEvent e) { 107 mypanel1MouseReleased(e); 108 } 109 } ); 110 111 mypanel2.addMouseListener(new MouseAdapter() { 112 public void mouseReleased(MouseEvent e) { 113 mypanel2MouseReleased(e); 114 } 115 } ); 116 mypanel3.addMouseListener(new MouseAdapter() { 117 public void mouseReleased(MouseEvent e) { 118 mypanel3MouseReleased(e); 119 } 120 } ); 121 122 while(true) { 123 sleep(300); 124 if( mypanelline1[0].isVisible() ) { 125 score -= 10; 126 System.out.print("SCORE:" + score + "\n"); 127 mypanel1.setBackground(Color.gray); 128 } else if ( mypanelline2[0].isVisible() ) { 129 score -= 10; 130 System.out.print("SCORE:" + score + "\n"); 131 mypanel2.setBackground(Color.gray); 132 } else if ( mypanelline3[0].isVisible() ) { 133 score -= 10; 134 System.out.print("SCORE:" + score + "\n"); 135 mypanel3.setBackground(Color.gray); 136 } else { 137 mypanel1.setBackground(Color.green); 138 mypanel2.setBackground(Color.yellow); 139 mypanel3.setBackground(Color.red); 140 } 141 for( i = 0; i < 4; i++ ) { 142 boolean v = mypanelline1[i+1].isVisible(); 143 mypanelline1[i].setVisible(v); 144 boolean w = mypanelline2[i+1].isVisible(); 145 mypanelline2[i].setVisible(v); 146 boolean x = mypanelline3[i+1].isVisible(); 147 mypanelline3[i].setVisible(v); 148 } 149 mypanelline1[4].setVisible(Math.random() > 0.7); 150 mypanelline2[4].setVisible(Math.random() > 0.7); 151 mypanelline3[4].setVisible(Math.random() > 0.7); 152 } 153 154 } 155 public static void mypanel1MouseReleased(MouseEvent e) { 156 if( mypanelline1[0].isVisible() == true ) { 157 mypanel1.setBackground(Color.white); 158 mypanelline1[0].setVisible(false); 159 score += 30; 160 System.out.print("SCORE:" + score + "\n"); 161 } else { 162 mypanel1.setBackground(Color.gray); 163 score -= 5; 164 System.out.print("SCORE:" + score + "\n"); 165 } 166 167 } 168 public static void mypanel2MouseReleased(MouseEvent e) { 169 if( mypanelline2[0].isVisible() == true ) { 170 mypanel2.setBackground(Color.white); 171 mypanelline2[0].setVisible(false); 172 score += 30; 173 System.out.print("SCORE:" + score + "\n"); 174 } else { 175 mypanel2.setBackground(Color.gray); 176 score -= 5; 177 System.out.print("SCORE:" + score + "\n"); 178 } 179 180 } 181 public static void mypanel3MouseReleased(MouseEvent e) { 182 if( mypanelline3[0].isVisible() == true ) { 183 mypanel3.setBackground(Color.white); 184 mypanelline3[0].setVisible(false); 185 score += 30; 186 System.out.print("SCORE:" + score + "\n"); 187 } else { 188 mypanel3.setBackground(Color.gray); 189 score -= 5; 190 System.out.print("SCORE:" + score + "\n"); 191 } 192 193 } 194 static void sleep(long msec) { 195 try{ 196 Thread.sleep(msec); 197 }catch(InterruptedException ie) { 198 } 199 } 200} 201
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。