在此谨完成介绍中国象棋的代码编写

与五子棋类似,编写中国象棋代码时先构造两个类,并添加监听。

    public void ShowUI()
    {
        setTitle("中国象棋");
        setSize(1200,875);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setLayout(null);
        JButton btn1=new JButton("开启一局新的游戏");
        btn1.setBounds(1025,100,100,35);
        add(btn1);
        setVisible(true);
        addMouseListener(cheListener);
        btn1.addActionListener(cheListener);
        Graphics g=getGraphics();
        cheListener.g=g;
        cheListener.ui=this;
    }
    public static void main(String[] args)
    {
        Chess chessUI=new Chess();
        chessUI.ShowUI();
    }

在画布中绘画棋盘与初始棋子。根据在数列中定义的数字判定该位置的棋子类型。将图片存入固定位置便于调用。

    public void paint(Graphics g)
    {
        Color color=new Color(175, 129, 36);
        g.setColor(color);
        g.fillRect(0,0,getWidth(),getHeight());
        int X=50,Y=75,SIZE=50;
        g.setColor(Color.BLACK);
        for (int i=0;i<10;i++)
        {
            g.drawLine(X,Y+i*SIZE,X+8*SIZE,Y+i*SIZE);
            if (i==0||i==8)
            {
                g.drawLine(X+i*SIZE,Y,X+i*SIZE,Y+9*SIZE);
            }
            if (i>=1&&i<=7)
            {
                g.drawLine(X+i*SIZE,Y,X+i*SIZE,Y+4*SIZE);
                g.drawLine(X+i*SIZE,Y+5*SIZE,X+i*SIZE,Y+9*SIZE);
            }
        }
        g.drawLine(X+3*SIZE,Y,X+5*SIZE,Y+2*SIZE);
        g.drawLine(X+3*SIZE,Y+2*SIZE,X+5*SIZE,Y);
        g.drawLine(X+3*SIZE,Y+7*SIZE,X+5*SIZE,Y+9*SIZE);
        g.drawLine(X+3*SIZE,Y+9*SIZE,X+5*SIZE,Y+7*SIZE);

        for (int i=0;i<=8;i++)
        {
            for (int j=0;j<=9;j++)
            {
                //红兵1,黑卒2,红炮3,黑砲4,红車5,黑車6,红馬7,黑馬8,红相9,黑象10,红仕11,黑士12,红帅13,黑将14.
                //g.drawString填字
                int sc = cheListener.Chessarr[i][j];
                g.setColor(Color.red);

                if (sc == 1) {
                    BufferedImage image1= readImage ("D:\\CodeProgram\\IdeaProjects\\Pro23-07\\src\\com\\ly0805\\photo\\红兵.jpg");
                    g.drawImage (image1, X-20 + i * SIZE, Y-20 + j * SIZE, 40,40,null);
                }
                if (sc == 3) {
                    BufferedImage image1= readImage ("D:\\CodeProgram\\IdeaProjects\\Pro23-07\\src\\com\\ly0805\\photo\\红炮.jpg");
                    g.drawImage (image1, X-20 + i * SIZE, Y-20 + j * SIZE, 40,40,null);
                }
                if (sc == 5) {
                    BufferedImage image1= readImage ("D:\\CodeProgram\\IdeaProjects\\Pro23-07\\src\\com\\ly0805\\photo\\红车.jpg");
                    g.drawImage (image1, X-20 + i * SIZE, Y-20 + j * SIZE, 40,40,null);
                }
                if (sc == 7) {
                    BufferedImage image1= readImage ("D:\\CodeProgram\\IdeaProjects\\Pro23-07\\src\\com\\ly0805\\photo\\红马.jpg");
                    g.drawImage (image1, X-20 + i * SIZE, Y-20 + j * SIZE, 40,40,null);
                }
                if (sc == 9) {
                    BufferedImage image1= readImage ("D:\\CodeProgram\\IdeaProjects\\Pro23-07\\src\\com\\ly0805\\photo\\红象.jpg");
                    g.drawImage (image1, X-20 + i * SIZE, Y-20 + j * SIZE, 40,40,null);
                }
                if (sc == 11) {
                    BufferedImage image1= readImage ("D:\\CodeProgram\\IdeaProjects\\Pro23-07\\src\\com\\ly0805\\photo\\红仕.jpg");
                    g.drawImage (image1, X-20 + i * SIZE, Y-20 + j * SIZE, 40,40,null);
                }
                if (sc == 13) {
                    BufferedImage image1= readImage ("D:\\CodeProgram\\IdeaProjects\\Pro23-07\\src\\com\\ly0805\\photo\\红帅.jpg");
                    g.drawImage (image1, X-20 + i * SIZE, Y-20 + j * SIZE, 40,40,null);
                }
                g.setColor(Color.black);
                if (sc == 2) {
                    BufferedImage image1= readImage ("D:\\CodeProgram\\IdeaProjects\\Pro23-07\\src\\com\\ly0805\\photo\\黑卒.jpg");
                    g.drawImage (image1, X-20 + i * SIZE, Y-20 + j * SIZE, 40,40,null);
                }
                if (sc == 4) {
                    BufferedImage image1= readImage ("D:\\CodeProgram\\IdeaProjects\\Pro23-07\\src\\com\\ly0805\\photo\\黑炮.jpg");
                    g.drawImage (image1, X-20 + i * SIZE, Y-20 + j * SIZE, 40,40,null);
                }
                if (sc == 6) {
                    BufferedImage image1= readImage ("D:\\CodeProgram\\IdeaProjects\\Pro23-07\\src\\com\\ly0805\\photo\\黑车.jpg");
                    g.drawImage (image1, X-20 + i * SIZE, Y-20 + j * SIZE, 40,40,null);
                }
                if (sc == 8) {
                    BufferedImage image1= readImage ("D:\\CodeProgram\\IdeaProjects\\Pro23-07\\src\\com\\ly0805\\photo\\黑马.jpg");
                    g.drawImage (image1, X-20 + i * SIZE, Y-20 + j * SIZE, 40,40,null);
                }
                if (sc == 10) {
                    BufferedImage image1= readImage ("D:\\CodeProgram\\IdeaProjects\\Pro23-07\\src\\com\\ly0805\\photo\\黑象.jpg");
                    g.drawImage (image1, X-20 + i * SIZE, Y-20 + j * SIZE, 40,40,null);
                }
                if (sc == 12) {
                    BufferedImage image1= readImage ("D:\\CodeProgram\\IdeaProjects\\Pro23-07\\src\\com\\ly0805\\photo\\黑士.jpg");
                    g.drawImage (image1, X-20 + i * SIZE, Y-20 + j * SIZE, 40,40,null);
                }
                if (sc == 14) {
                    BufferedImage image1= readImage ("D:\\CodeProgram\\IdeaProjects\\Pro23-07\\src\\com\\ly0805\\photo\\黑将.jpg");
                    g.drawImage (image1, X-20 + i * SIZE, Y-20 + j * SIZE, 40,40,null);
                }
            }
        }
    }

在监听类中构造数列,定义初始数字,读取按钮文字编写代码。

    public Chess ui;
    Graphics g;
    int[][]Chessarr =new int [9][10];
    @Override
    public void actionPerformed(ActionEvent e)
    {
        System.out.println("按钮被点击");
        String btnStr=e.getActionCommand();
        JButton btn=(JButton) e.getSource();
        int X=50,Y=75,r=20;
        if (btnStr.equals("开启一局新的游戏"))
        {
            btn.setText("结束对局");
            for (int a=0;a<=8;a++)
            {
                if (a%2==0)
                {
                    Chessarr[a][6]=1;
                    Chessarr[a][3]=2;
                }
            }
            Chessarr[1][7]=3;   Chessarr[7][7]=3;
            Chessarr[1][2]=4;   Chessarr[7][2]=4;
            Chessarr[0][9]=5;   Chessarr[8][9]=5;
            Chessarr[0][0]=6;   Chessarr[8][0]=6;
            Chessarr[1][9]=7;   Chessarr[7][9]=7;
            Chessarr[1][0]=8;   Chessarr[7][0]=8;
            Chessarr[2][9]=9;   Chessarr[6][9]=9;
            Chessarr[2][0]=10;  Chessarr[6][0]=10;
            Chessarr[3][9]=11;  Chessarr[5][9]=11;
            Chessarr[3][0]=12;  Chessarr[5][0]=12;
            Chessarr[4][9]=13;  Chessarr[4][0]=14;
        }
        if (btnStr.equals("结束对局"))
        {
            btn.setText("开启一局新的游戏");
            for (int i=0;i<=8;i++)
            {
                for (int j=0;j<=9;j++)
                {
                    Chessarr[i][j]=0;
                }
            }
        }

定义相关数字判断当前状态使得棋子顺利移动。

    int index=1;
    int temp;
    int ord=1;
    public void mouseClicked(MouseEvent e)
    {
        int x=e.getX();
        int y=e.getY();
        System.out.println("x="+x+"y="+y);
        int c=(x-50+25)/50;
        int r=(y-75+25)/50;
        System.out.println("c="+c+"r="+r);


            if (index==1) {
                if (ord == 1) {
                    if (Chessarr[c][r] % 2 == 0 && Chessarr[c][r] > 0) {
                        System.out.println("当前为红方先手");
                        JOptionPane.showMessageDialog(null, "当前为红方先手");
                    } else {
                        temp = Chessarr[c][r];
                        Chessarr[c][r] = 0;
                    }
                    ord = 2;
                } else {
                    if (Chessarr[c][r] % 2 == 1) {
                        System.out.println("当前为黑棋先手");
                        JOptionPane.showMessageDialog(null, "当前为黑方先手");
                    } else {
                        temp = Chessarr[c][r];
                        Chessarr[c][r] = 0;
                    }
                    ord = 1;
                }
            }
            else
            {
                Chessarr[c][r]=temp;
            }
            index=index%2+1;

            ui.repaint();
    }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值