Loading [MathJax]/jax/output/CommonHTML/config.js
社区首页 >问答首页 >用Java绘制connect 4电路板

用Java绘制connect 4电路板
EN

Stack Overflow用户
提问于 2017-06-03 18:38:10
回答 1查看 2.6K关注 0票数 1

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

它可以工作,但它是矩形的。我怎样才能改变板的标签,使他们成为圆形,使它看起来更像第三张图片在链接。

EN

回答 1

Stack Overflow用户

发布于 2017-06-03 18:54:30

您可以使用AlphaComposite

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

代码语言:javascript
代码运行次数:0
复制
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;
    }
}

(对不起,我不记得原创作者了)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44347340

复制
相关文章
connect A with B_anyconnect怎么用
不知道是不是翻墙导致的错误,昨天同事说服务器出现了这个错误,然后说服务器坏啦什么哒,因为是我重启啦,所以就感觉好像在一顿帅锅,哎!!! 然后我上去搞了一下一会搞定啦!无能者只剩下了愤怒!!!
全栈程序员站长
2022/10/04
3850
connect A with B_anyconnect怎么用
用python绘制圆(python用函数绘制椭圆)
# ==========================================
全栈程序员站长
2022/07/30
1.3K0
用python绘制圆(python用函数绘制椭圆)
Python散点图绘制(用seaborn绘制散点图)
在python中画散点图主要是用matplotlib模块中的scatter函数,先来看一下scatter函数的基本信息。
全栈程序员站长
2022/07/29
2.1K0
Python散点图绘制(用seaborn绘制散点图)
用CRT connect MongoDB 使用Backspace无效
使用./mongo 10.1.235.62:27017 连接上后 打错了无法删除!? 这是在逗我,那就修改CRT个设置,点击选项,会话选项,仿真,把终端改成Linux就行了~如图:
用户3003813
2018/09/06
5290
用CRT connect MongoDB 使用Backspace无效
用OpenGL绘制地球
本想用自动纹理坐标生成做的,可是红宝书上说得一点都不明白。网上有个人的课程设计是自己画的球,就是一个个四边形的拼个球,然后再给四边形贴图。这样太麻烦了!逛啊逛,让我找到了另一种方法,仅仅几行代码: // 画地球 void OpenGL::DrawEarth(void) ...{     GLUquadricObj *quadObj = gluNewQuadric();//创建一个二次曲面物体     gluQuadricTexture(quadObj,GL_TRUE);        //启用
逍遥剑客
2018/05/21
2.9K0
手撕Rtmp协议细节(4)——connect消息
我们继续来说rtmp协议哈。当rtmp客户端和rtmp服务端握手完成之后,客户端就会向服务端发送connect消息。connect消息的格式按照RTMP Header+RTMP Body的格式组织。其中RTMP Header的Type ID为0x14,表示以AMF0编码的command消息。
视界音你而不同
2020/05/20
2K0
Identity Server 4 预备知识 -- OpenID Connect 简介
我之前的文章简单的介绍了OAuth 2.0 (在这里: https://www.cnblogs.com/cgzl/p/9221488.html), 还不是很全. 这篇文章我要介绍一下 OpenID C
solenovex
2018/07/04
9920
Java绘制斜线
/** * Created by ${wuyupku} on 2019/3/14 16:47 */ import java.awt.Graphics; import javax.swing.JFrame; import javax.swing.JPanel; public class DrawLineFrame extends JFrame { DrawLinePanel linePanel = new DrawLinePanel(); // 创建面板类的实例 public stat
葆宁
2019/04/19
1.7K0
Java绘制斜线
用python绘制数学图像
在很多数学问题中人工计算其实非常的麻烦,我们可以多利用计算机的强大算力来给求解数学问题.
算法与编程之美
2023/08/22
1640
用python绘制数学图像
用python绘制有效前沿
投资中最关心的两个问题是预期收益与风险,当对多个资产进行投资时,如何测定组合的风险与收益,如何根据这两项指标进行资产权重配置? 马科维茨理论给出了解决这一问题的框架,被认为是现代金融学的开端。本文首先给出马科维茨均值方差模型的理论说明,随后用股票指数数据绘制组合的有效前沿,最后给出一种应用方法,获取代码和数据请在后台回复“代码”。
量化小白
2019/03/06
7.6K8
用python绘制有效前沿
用Canvas绘制抽奖游戏
这是之前无意中看到某位大神写的,蛮感兴趣想学习下,运行后发现有个问题,真机测试时,绘制的位置发生偏移,改了改,还是解决不了,希望哪位大神给与指导下。
honey缘木鱼
2018/09/26
1.2K0
用Canvas绘制抽奖游戏
Ubuntu 16.04使用电路板绘制Fritzing和单片机编程Arduino说明
Ubuntu下有很多非常赞的开源软件,将在后续持续介绍,这里简单介绍Fritzing和Arduino,都可以在官网免费下载。
zhangrelay
2019/01/23
1.2K0
pyecharts-4-绘制桑葚图
桑基图主要由边、流量和支点组成,其中边代表了流动的数据,流量代表了流动数据的具体数值,节点代表了不同分类。边的宽度与流量成比例地显示,边越宽,数值越大。
皮大大
2021/03/01
1.7K0
pyecharts-4-绘制桑葚图
PCB电路板参数
1、∑介电常数(DK值):通常表示某种材料储存电能能力的大小,∑值越小,储存电能能力越小,传输速度越快。
硬件开源小站
2023/04/13
1.3K1
用python绘制漂亮的图形
先看效果,没有用任何绘图工具,只是运行了一段python代码。 代码如下: _ = (
xindoo
2021/01/22
2K0
用python绘制漂亮的图形
用python绘制皮卡丘
科普:皮卡丘是日本任天堂公司开发的掌机游戏系列《口袋妖怪》中登场精灵中的一种,为口袋妖怪里代表性的角色。
阿黎逸阳
2020/09/08
1.5K0
Kafka Connect 如何安装 Connect 插件
Kafka Connect 设计为可扩展的,因此开发人员可以创建自定义 Connector、Transform 或者 Converter。Kafka Connect Plugin 是一组 Jar 文件,其中包含一个或多个 Connector、Transform 或者 Converter 的实现。Connect 将每个 Plugin 相互隔离,以便一个 Plugin 中的库不受任何其他 Plugin 中的库的影响。这在使用来自多个提供商的 Connector 时非常重要。
smartsi
2021/09/26
2.7K0
解决: java.net.ConnectException: Connection refused: connect
1)端口号被占用:杀死占用端口号(一般为8080)的进程,释放端口;彻底关闭 Tomcat 服务器,或者重新启动项目。
微风-- 轻许--
2022/04/13
14.8K0
用R语言绘制ROC曲线
1、roc曲线的意义 ROC曲线就是用来判断诊断的正确性,最理想的就是曲线下的面积为1,比较理想的状态就是曲线下的面积在0.8-0.9之间,0.5的话对实验结果没有什么影响。 如图:
全栈程序员站长
2022/08/30
1K0
用R语言绘制ROC曲线
用matlab绘制分段函数曲线
x=linspace(-5,5,100); y=[]; for x0=x; if x0>0 y=[y,1/2*log(x0+sqrt(1+x0.^2))]; else y=[y,(x0+sqrt(pi))/exp(2)]; end end plot(x,y) 结果:
全栈程序员站长
2022/09/05
9940
用matlab绘制分段函数曲线

相似问题

Eclipse中的Connect4 Java

11

Java Connect 4算法检查是否成功

23

用prolog表示connect 4的游戏板

22

用Java在ANTLR4中绘制解析树

22

如果AbsoluteLayout被弃用,如何绘制无限的2D电路板/地图?

212
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档