用Java绘制connect4板

用Java绘制connect4板,java,eclipse,windowbuilder,Java,Eclipse,Windowbuilder,我正在eclipse中使用WindowBuilder为我的connect 4游戏绘制一个棋盘。下面链接中的前两张图片是我目前拥有的 它可以工作,但它是长方形的。如何更改电路板的标签,使其成为圆形,使其看起来更像链接中的第三张图片。您可以使用字母组合 这是我几年前在网上找到的一些代码。只需单击一列即可开始动画: import java.awt.*; import java.awt.event.*; import java.awt.image.BufferedImage; import java

我正在eclipse中使用WindowBuilder为我的connect 4游戏绘制一个棋盘。下面链接中的前两张图片是我目前拥有的


它可以工作,但它是长方形的。如何更改电路板的标签,使其成为圆形,使其看起来更像链接中的第三张图片。

您可以使用
字母组合

这是我几年前在网上找到的一些代码。只需单击一列即可开始动画:

import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import javax.swing.*;

public class CompositeBoardTest extends JFrame {
    private static int size = 400;
    private static int offset = 10;
    private static int ovalSize = size/4 - offset*2;
    private static int pos = offset/2;
    private static int incr = size/4;

    public static void main( String[] args ) throws Exception {
        SwingUtilities.invokeLater( new Runnable() {
            public void run() { new CompositeBoardTest(); }
        } );
    }

    public CompositeBoardTest() {
        super( "CompositeBoardTest" );
        setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );

        Board board = new Board();
        getContentPane().add( board );
        setSize( size, size+34 );
        setVisible( true );
    }

    static class Board extends JPanel implements ActionListener {
        private int[][] pieces = new int[4][4];
        private Piece addingPiece = null;
        private Timer pieceDropped = null;

        public Board() {
            setPreferredSize( new Dimension( size, size ) );
            setBounds( 0, 0, size, size );
            pieceDropped = new Timer( 50, this );
            addMouseListener( new MouseAdapter() {
                public void mousePressed( MouseEvent e ) {
                    int column = ( e.getPoint().x-pos )/incr;
                    addPiece( column );
                }
            });
        }

        protected void paintComponent( Graphics g ) {
            super.paintComponent( g );

            Graphics2D g2d = (Graphics2D) g;
            Composite comp = g2d.getComposite();

            Dimension d = getSize();
            int w = d.width;
            int h = d.height;

            BufferedImage buffImg = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
            Graphics2D gbi = buffImg.createGraphics();

            // Clear area
            g2d.setColor( Color.WHITE );
            g2d.fillRect( 0, 0, w, h );

            // Draw screen
//          gbi.setColor( Color.YELLOW );
            gbi.setColor( Color.BLUE );
            gbi.fillRect( 0, 0, w, h );

            // Draw pieces or holes
            gbi.setColor( Color.RED );
            for ( int row = 0 ; row < 4 ; row++ ) {
                for ( int column = 0 ; column < 4 ; column++ ) {
                    if ( pieces[row][column] == 1 ) {
                        gbi.setComposite( AlphaComposite.getInstance( AlphaComposite.SRC_OVER, .1f ) );
                    } else {
                        gbi.setComposite( AlphaComposite.getInstance( AlphaComposite.CLEAR, 0.5f ) );
                    }
                    gbi.fillOval( incr*column+pos, incr*row+pos, ovalSize, ovalSize );
                }
            }

            // Draw adding piece if we have it
            if ( addingPiece != null ) {
                gbi.setComposite( AlphaComposite.getInstance( AlphaComposite.DST_OVER, 1.0f ) );
                gbi.fillOval( addingPiece.x, addingPiece.y, ovalSize, ovalSize );
            }

            // Draws the buffered image.
            g2d.drawImage(buffImg, null, 0, 0);

//          g2d.setComposite( comp );
        }

        public void addPiece( int column ) {
            if ( addingPiece == null ) {
                if ( pieces[0][column] == 0 ) {
                    addingPiece = new Piece();
                    addingPiece.row = 0;
                    addingPiece.column = column;
                    addingPiece.x = incr*column+pos;
                    addingPiece.y = 0;
                    pieceDropped.start();
                } else {
                    getToolkit().beep();
                }
            }
        }

        public void actionPerformed( ActionEvent e ) {
            if ( addingPiece != null ) {
                addingPiece.y += 5;
                int row = ( addingPiece.y - pos )/incr + 1;
                if ( row > 3 || pieces[row][addingPiece.column] == 1 ) {
                    pieces[row-1][addingPiece.column] = 1;
                    addingPiece = null;
                    pieceDropped.stop();
                }
            }
            repaint();
        }
    }
 
    private static class Piece {
        public int row, column, x, y;
    }
}
import java.awt.*;
导入java.awt.event.*;
导入java.awt.image.buffereImage;
导入javax.swing.*;
公共类CompositeBoardTest扩展了JFrame{
私有静态int size=400;
专用静态整数偏移=10;
专用静态整数椭圆形=大小/4-偏移量*2;
专用静态int pos=偏移量/2;
专用静态输入增量=大小/4;
公共静态void main(字符串[]args)引发异常{
SwingUtilities.invokeLater(新的Runnable(){
public void run(){new CompositeBoardTest();}
} );
}
公共复合卡片测试(){
超级(“复合板试验”);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
线路板=新线路板();
getContentPane().add(板);
设置尺寸(尺寸,尺寸+34);
setVisible(真);
}
静态类板扩展JPanel实现ActionListener{
私有整数[][]件=新整数[4][4];
私有工件addingPiece=null;
专用定时器=空;
公共委员会(){
setPreferredSize(新维度(大小、大小));
立根(0,0,大小,大小);
pieceDropped=新计时器(50,此);
addMouseListener(新的MouseAdapter(){
公共无效鼠标按下(MouseEvent e){
int列=(e.getPoint().x-pos)/incr;
addPiece(列);
}
});
}
受保护组件(图形g){
超级组件(g);
Graphics2D g2d=(Graphics2D)g;
Composite comp=g2d.getComposite();
维度d=getSize();
int w=d.宽度;
int h=d.高度;
BuffereImage buffImg=新的BuffereImage(w,h,BuffereImage.TYPE_INT_ARGB);
Graphics2D gbi=buffImg.createGraphics();
//净空面积
g2d.setColor(Color.WHITE);
g2d.fillRect(0,0,w,h);
//画屏
//gbi.setColor(Color.YELLOW);
gbi.setColor(Color.BLUE);
gbi.fillRect(0,0,w,h);
//画块或画孔
gbi.setColor(Color.RED);
用于(int行=0;行<4;行++){
for(int列=0;列<4;列++){
如果(条数[行][列]==1){
gbi.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER,.1f));
}否则{
gbi.setComposite(AlphaComposite.getInstance(AlphaComposite.CLEAR,0.5f));
}
gbi.Fill椭圆形(增量*列+位置,增量*行+位置,椭圆形,椭圆形);
}
}
//如果有的话,画一张
如果(添加件!=null){
gbi.setComposite(AlphaComposite.getInstance(AlphaComposite.DST_OVER,1.0f));
gbi.fillOval(附加件x、附加件y、卵形、卵形);
}
//绘制缓冲图像。
g2d.drawImage(buffImg,null,0,0);
//g2d.setComposite(comp);
}
公共void addPiece(int列){
if(addingPiece==null){
如果(件[0][列]==0){
添加件=新件();
addingPiece.row=0;
addingPiece.column=列;
添加件x=增量*列+位置;
加件y=0;
partiedrop.start();
}否则{
getToolkit().beep();
}
}
}
已执行的公共无效操作(操作事件e){
如果(添加件!=null){
加件y+=5;
int行=(addingPiece.y-pos)/incr+1;
如果(行>3 | |件[行][添加件.列]==1){
件[第1行][添加件.列]=1;
addingPiece=null;
停止();
}
}
重新油漆();
}
}
私有静态类块{
公共int行、列、x、y;
}
}
(对不起,我不记得最初的创造者)