Javaで将棋を作ろう#1 将棋盤の作成(クラス)
今回は、将棋の盤面を作成したいと思います。クラスを使うと後々楽なのでそれを用います。
描画方法について
import java.awt.*;
import javax.swing.*;
public class Shogi extends JPanel{
public static void main(String[] args) {
JFrame app = new JFrame();
app.add(new Shogi());
app.setSize(600, 600);
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
app.setVisible(true);
}
}
このプログラムでは、JPanelを用います。このコードを用いることで描画をすることができます。おまじないだと思ってもらっても大丈夫です。これをコピーして実行してみると、次の写真のようになるはずです。
これで、何も描画されていないウィンドウを表示することができます。これから、このウィンドウに描画していきましょう。ちなみに、 app.setSize(600, 600);の数値を変えるとウィンドウの大きさを変更できます。(今は600×600)
将棋盤の作成
長方形クラスを作る
色、x座標、y座標、縦の長さ、横の長さを代入してその情報をもとに長方形を描画するクラスを作ります。先にプログラムをお見せします。
interface Figure {
public void draw(Graphics g);
}
static class Rect implements Figure {
Color col;
int xpos, ypos, width, height;
public Rect(Color c, int x, int y, int w, int h) {
col = c;
xpos = x;
ypos = y;
width = w;
height = h;
}
public void draw(Graphics g) {
g.setColor(col);
g.fillRect(xpos, ypos, width, height);
g.setColor(Color.BLACK);
g.drawRect(xpos, ypos, width, height);
}
}
今回は、図形にまつわるものはFigureインターフェイスで管理します。この部分はまだわからなくでも大丈夫です。上記のプログラムでは、長方形を描画するクラスRectを宣言しています。色を表す、Color型のcol,図形のx座標、それぞれ図形のy座標、図形の長さ、図形の高さを表す、int型のxpos, ypos, weight, heightを宣言しています。public Rectは、このクラスのコンストラクタで、宣言した数値を外部から受け取り、代入します。drawメソッドでは、fillRect(x座標, y座標, 長さ, 高さ),drawRect(x座標, y座標, 長さ, 高さ)を用いて、長方形の塗りつぶし、長方形の枠の描画を行っています。前の行のsetColorは、描画の色を設定しています。ここでは、塗りつぶしの色はcol、枠の色は黒にしました。
実際に長方形を描画する
今回は、描画をするのにpaintComponentというメソッドを使用します。先ほど作ったクラスRectを用いて長方形を描画してみましょう。
public void paintComponent(Graphics g) {
Rect rect = new Rect(Color.WHITE, 30, 30, 30, 30);
rect.draw(g);
}
paintComponentを描画するには、上記のように記述します。1行目で、数値を設定し、それをrectと名付けて宣言します。2行目でrectを描画をしています。今回は、(色、x座標、y座標、長さ、高さ)をそれぞれ白色、30、30、30、30に設定しました。つまり、(x,y)=(30, 30)の位置に30×30の長方形が描画されます。入力できる型はそれぞれ(Color, int, int, int, int)で、これはクラスRectのコンストラクタと連動しています。
このクラスの呼び出し方法はよく使うので、流れを覚えてしまってもいいかもしれません。
forループで盤作る
for分を用いて9×9の正方形を並べて将棋盤を作ります。
int blockSize = 40;
public void paintComponent(Graphics g) {
for( int y = 0; y < 9; y++ ){
for( int x = 0; x < 9; x++){
Rect rect = new Rect(Color.YELLOW, x*blockSize+30, y*blockSize+30, blockSize, blockSize);
rect.draw(g);
}
}
}
正方形の長さは、blockSizeを宣言して、まとめてしまいましょう。ここでは40にしてます。for文を二回使って9×9を表現します。長方形の座標を変化させて実装します。for文については、慣れないうちは難しいですが、慣れると使いこなせるようになるので積極的に練習しましょう。
これを実行すると次の画像のように描画されます。
上の画像のようになっていれば成功です!
ここまでのプログラム
import java.awt.*;
import javax.swing.*;
public class Shogi extends JPanel{
int blockSize = 40;
public void paintComponent(Graphics g) {
for( int y = 0; y < 9; y++ ){
for( int x = 0; x < 9; x++){
Rect rect = new Rect(Color.YELLOW, x*blockSize+30, y*blockSize+30, blockSize, blockSize);
rect.draw(g);
}
}
}
public static void main(String[] args) {
JFrame app = new JFrame();
app.add(new Shogi());
app.setSize(600, 600);
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
app.setVisible(true);
}
interface Figure {
public void draw(Graphics g);
}
static class Rect implements Figure {
Color col;
int xpos, ypos, width, height;
public Rect(Color c, int x, int y, int w, int h) {
col = c;
xpos = x;
ypos = y;
width = w;
height = h;
}
public void draw(Graphics g) {
g.setColor(col);
g.fillRect(xpos, ypos, width, height);
g.setColor(Color.BLACK);
g.drawRect(xpos, ypos, width, height);
}
}
}
まとめ
今回は描画から将棋盤の作成まで行いました。次回は駒の作成や、当たり判定などについて記事にしたいと思います。お楽しみに!
この記事が気に入ったらサポートをしてみませんか?