前提・実現したいこと
javaでマインスイーパーを作っています。
爆弾、数字の書いていないところをクリックすると爆弾の隣のところまで開くという動作をしたいのですがやり方がわかりません。説明が下手で申し訳ないですが、よろしくお願いします。
該当のソースコード
java
1import javax.swing.*; 2import java.awt.*; 3import java.util.Random; 4import java.awt.event.*; 5 6public class Mine extends JFrame implements ActionListener { 7 8 int easy[] = {8, 50, 10}; 9 int x = easy[0]; 10 int ex = x * x; 11 int b = easy[1]; 12 int boms = easy[2]; 13 int bom[] = new int[boms]; 14 int num[] = new int[ex]; 15 String numb; 16 String cmd; 17 JButton button[] = new JButton[ex]; 18 JPanel p = new JPanel(); 19 Random random = new Random(); 20 int i; 21 int btn; 22 int j; 23 int l; 24 25 public static void main(String args[]) { 26 27 Mine frame = new Mine("MineSweeper"); 28 frame.setVisible(true); 29 30 31 } 32 33 Mine(String title) { 34 35 setTitle(title); 36 setSize(x * b + 10, x * b + 30); 37 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 38 39 DrawButton(); 40 DrawBoms(); 41 setNumber(); 42 43 getContentPane().add(p,BorderLayout.CENTER); 44 45 } 46 47 void DrawButton() { 48 49 p.setLayout(null); 50 51 for(i = 0; i < x; i++) { 52 53 for(j = 0; j < x; j++) { 54 55 btn = i * x + j; 56 57 button[btn] = new JButton(); 58 button[btn].setBackground(Color.LIGHT_GRAY); 59 button[btn].setBounds(i * b, j * b, b, b); 60 button[btn].addActionListener(this); 61 button[btn].setActionCommand("a" + btn); 62 63 p.add(button[btn]); 64 65 } 66 67 } 68 69 } 70 71 void DrawBoms() { 72 73 for(i = 0; i < boms; i++) { 74 75 bom[i] = random.nextInt(ex); 76 77 } 78 79 for(i = 0; i < boms; i++); 80 } 81 void setNumber() { 82 83 out: for(i = 0; i < boms; i++) { 84 85 num[bom[i]] = 10; 86 87 if(bom[i] == 0) { 88 89 num[bom[i] + 1]++; 90 num[bom[i] + x]++; 91 num[bom[i] + x + 1]++; 92 93 } else if(bom[i] == x - 1) { 94 95 num[bom[i] - 1]++; 96 num[bom[i] + x]++; 97 num[bom[i] + x - 1]++; 98 99 } else if(bom[i] == ex - x) { 100 101 num[bom[i] - x]++; 102 num[bom[i] - x + 1]++; 103 num[bom[i] - 1]++; 104 105 } else if(bom[i] == ex - 1) { 106 107 num[bom[i] - x]++; 108 num[bom[i] - x - 1]++; 109 num[bom[i] - 1]++; 110 111 } else if(bom[i] < x) { 112 113 num[bom[i] - 1]++; 114 num[bom[i] + 1]++; 115 num[bom[i] + - 1]++; 116 num[bom[i] + x]++; 117 num[bom[i] + x + 1]++; 118 119 } else if(bom[i] < ex && bom[i] > ex - x) { 120 121 num[bom[i] - x - 1]++; 122 num[bom[i] - x]++; 123 num[bom[i] - x + 1]++; 124 num[bom[i] - 1]++; 125 num[bom[i] + 1]++; 126 127 } else { 128 129 for(j = 0; j < x; j++) { 130 131 l = j * x; 132 if(bom[i] == l) { 133 134 num[bom[i] - x]++; 135 num[bom[i] - x + 1]++; 136 num[bom[i] + 1]++; 137 num[bom[i] + x]++; 138 num[bom[i] + x + 1]++; 139 140 continue out; 141 142 } 143 144 } 145 146 for(j = 0; j < x; j++) { 147 148 l = j * x - 1; 149 150 if(bom[i] == l) { 151 152 num[bom[i] -x - 1]++; 153 num[bom[i] - x]++; 154 num[bom[i] - 1]++; 155 num[bom[i] + x - 1]++; 156 num[bom[i] + x]++; 157 158 continue out; 159 160 } 161 162 } 163 164 num[bom[i] - x - 1]++; 165 num[bom[i] - x]++; 166 num[bom[i] - x + 1]++; 167 num[bom[i] - 1]++; 168 num[bom[i] + 1]++; 169 num[bom[i] + x - 1]++; 170 num[bom[i] + x]++; 171 num[bom[i] + x + 1]++; 172 173 } 174 175 } 176 177 } 178 179 180 public void actionPerformed(ActionEvent e) { 181 182 cmd = e.getActionCommand(); 183 184 for(i = 0; i < ex; i++) { 185 186 if (cmd.equals("a" + i)) { 187 188 if(num[i] < 10) { 189 190 numb = "" + num[i]; 191 192 button[i].setEnabled(false); 193 button[i].setBackground(Color.GRAY); 194 if(num[i] != 0) { 195 button[i].setText(numb); 196 } 197 } 198 } 199 } 200 } 201} 202
回答1件
あなたの回答
tips
プレビュー