teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

コードの改良

2020/07/14 02:17

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -54,4 +54,80 @@
54
54
  }
55
55
  }
56
56
  }
57
+ ```
58
+ **追記**
59
+ ファイルを Main.java と Board.java に分割できるように
60
+ class Board を独立させました。
61
+ マウスボタンをクリックしたときの処理を追加してみました。
62
+ ```Java
63
+ import java.awt.Graphics;
64
+ import java.awt.Color;
65
+ import java.awt.event.MouseAdapter;
66
+ import java.awt.event.MouseEvent;
67
+ import javax.swing.JFrame;
68
+ import javax.swing.JPanel;
69
+
70
+ class Main extends JFrame {
71
+
72
+ public static void main(String[] args) { new Main(); }
73
+
74
+ Main() {
75
+ setSize(650, 680);
76
+ setTitle("Othello");
77
+ setLocationRelativeTo(null);
78
+ setResizable(false);
79
+ setDefaultCloseOperation(EXIT_ON_CLOSE); // [x]ボタンで終了
80
+ add(new Board()); // 描画領域の追加
81
+ setVisible(true);
82
+ }
83
+ }
84
+
85
+ class Board extends JPanel {
86
+ static final int blank = 0, black = 1, white = 2;
87
+ static final int width = 8, height = 8;
88
+ static final int gs = 80;
89
+
90
+ int[][] board = new int[height][width];
91
+ int turn = black;
92
+
93
+ Board() {
94
+ for (int i = 0; i < height; i++)
95
+ for (int j = 0; j < width; j++) board[i][j] = blank;
96
+ board[3][3] = board[4][4] = white;
97
+ board[3][4] = board[4][3] = black;
98
+
99
+ addMouseListener(new MouseAdapter() {
100
+ public void mousePressed(MouseEvent e) {
101
+ int x = e.getX() / gs, y = e.getY() / gs;
102
+ if (x < 8 && y < 8) {
103
+ board[x][y] = turn;
104
+ turn = black + white - turn;
105
+ repaint();
106
+ }
107
+ }
108
+ });
109
+ }
110
+
111
+ public void paintComponent(Graphics g) {
112
+ g.setColor(new Color(0, 128, 128)); // 色を指定
113
+ g.fillRect(0, 0, gs * width, gs * height); // 全体を塗りつぶす
114
+
115
+ g.setColor(Color.black);
116
+ for (int i = 0; i < height; i++)
117
+ g.drawLine(gs * i, 0, gs * i, gs * height); // 縦線を引く
118
+ for (int i = 0; i < width; i++)
119
+ g.drawLine(0, gs * i, gs * width, gs * i); // 横線を引く
120
+ g.drawRect(0, 0, gs * width, gs * height); // 外枠(矩形)を描画
121
+
122
+ for (int i = 0; i < height; i++) {
123
+ for (int j = 0; j < width; j++) {
124
+ int piece = board[i][j];
125
+ if (piece != blank) {
126
+ g.setColor(piece == black ? Color.black : Color.white);
127
+ g.fillOval(gs * i + 4, gs * j + 4, gs - 8, gs - 8);
128
+ }
129
+ }
130
+ }
131
+ }
132
+ }
57
133
  ```