用Java绘制connect4板
我正在eclipse中使用WindowBuilder为我的connect 4游戏绘制一个棋盘。下面链接中的前两张图片是我目前拥有的用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
它可以工作,但它是长方形的。如何更改电路板的标签,使其成为圆形,使其看起来更像链接中的第三张图片。您可以使用
字母组合
这是我几年前在网上找到的一些代码。只需单击一列即可开始动画:
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;
}
}
(对不起,我不记得最初的创造者)