Java五子棋(awt)

import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;

public class test07 {
    private Frame frame = new Frame();

    private BufferedImage table;
    private BufferedImage black;
    private BufferedImage white;
    private BufferedImage selected;

    private int X_SET = 0;
    private int Y_SET = 0;
    private final int TABLE_WIDTH = 535;
    private final int TABLE_HEIGHT = 536;

    private final int BOARD_SIZE = 15;

    private final int RATE = TABLE_WIDTH / BOARD_SIZE;
    //x,y方向的偏移量
    private final int X_OFFSET = 3;
    private final int Y_OFFSET = 3;
    //游戏结束/重新开始的弹出框
    private Dialog dialog = new Dialog(frame, "游戏结束", true);
    //提示内容
    private Label label;
    int[][] board = new int[BOARD_SIZE + 2][BOARD_SIZE + 2];

    //红色选择框坐标
    int seleted_X = -1;
    int seleted_Y = -1;

    private class MyCanvas extends JPanel {
        @Override
        public void paint(Graphics g) {
            g.drawImage(table, 0, 0, null);
            if (seleted_X >= 0 && seleted_Y >= 0 && seleted_X < 15 && seleted_Y < 15) {
                g.drawImage(selected, seleted_X * RATE + X_OFFSET, seleted_Y * RATE + Y_OFFSET, null);
            }
            for (int i = 1; i < BOARD_SIZE + 1; i++) {
                for (int j = 1; j < BOARD_SIZE + 1; j++) {
                    if (board[i][j] == -1) {
                        g.drawImage(black, X_OFFSET + RATE * (i - 1), Y_OFFSET + RATE * (j - 1), null);
                    }
                    if (board[i][j] == 1) {
                        g.drawImage(white, X_OFFSET + RATE * (i - 1), Y_OFFSET + RATE * (j - 1), null);
                    }
                }
            }
        }
    }


    private MyCanvas drawArea = new MyCanvas();
    //申明变量,记录当前下棋颜色
    int board_type = -1;

    Panel p = new Panel();
    Panel p2 = new Panel();
    Button whiteBtn = new Button("白棋");
    Button blackBtn = new Button("黑棋");
    Button deleteBtn = new Button("悔棋");

    Button goonBtn = new Button("继续");
    Button overBtn = new Button("退出");

    public void refreshBtnColor(Color whiteBtnColor, Color blackBtnColor, Color deleteBtnColor) {
        whiteBtn.setBackground(whiteBtnColor);
        blackBtn.setBackground(blackBtnColor);
        deleteBtn.setBackground(deleteBtnColor);
    }


    public void init() throws IOException {
        dialog.setBounds(620, 270, 300, 200);
        deleteBtn.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                board[X_SET][Y_SET] = 0;
                refreshBtnColor(Color.RED, Color.RED, Color.GREEN);
                drawArea.repaint();
                board_type = -board_type;
            }
        });
        frame.add(p, BorderLayout.SOUTH);
        table = ImageIO.read(new File("E:\\Defender\\Desktop\\javase练习\\javaseAWT\\img\\board.jpg"));
        black = ImageIO.read(new File("E:\\Defender\\Desktop\\javase练习\\javaseAWT\\img\\black.gif"));
        white = ImageIO.read(new File("E:\\Defender\\Desktop\\javase练习\\javaseAWT\\img\\white.gif"));
        selected = ImageIO.read(new File("E:\\Defender\\Desktop\\javase练习\\javaseAWT\\img\\selected.gif"));
        drawArea.addMouseMotionListener(new MouseMotionAdapter() {
            @Override
            public void mouseMoved(MouseEvent e) {
                seleted_X = (e.getX() - X_OFFSET) / RATE;
                seleted_Y = (e.getY() - Y_OFFSET) / RATE;
                //System.out.println(seleted_X+" "+seleted_Y);
                drawArea.repaint();
            }
        });
        drawArea.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                int xPos = (e.getX() - X_OFFSET) / RATE + 1;
                int yPos = (e.getY() - Y_OFFSET) / RATE + 1;
                System.out.println(xPos + " " + yPos);
                //没有棋子才可以添加
                if (board[xPos][yPos] == 0) {
                    board[xPos][yPos] = board_type;
                    if (board_type == 1) {
                        refreshBtnColor(Color.RED, Color.GREEN, Color.GRAY);
                    } else if (board_type == -1) {
                        refreshBtnColor(Color.GREEN, Color.RED, Color.GRAY);
                    }
                    board_type = -board_type;
                    X_SET = xPos;
                    Y_SET = yPos;
                }
                drawArea.repaint();
                if (judge() == 1) {
                    label = new Label("白棋胜利");
                    label.setFont(new Font("宋体", Font.BOLD, 60));
                    label.setAlignment(Label.CENTER);
                    dialog.add(label);
                    dialog.setVisible(true);
                    System.out.println("白棋胜利");
                } else if (judge() == -1) {
                    label = new Label("黑棋胜利");
                    label.setFont(new Font("宋体", Font.BOLD, 60));
                    label.setAlignment(Label.CENTER);
                    dialog.add(label);
                    dialog.setVisible(true);
                    System.out.println("黑棋胜利");
                }
            }

            @Override
            public void mouseExited(MouseEvent e) {
                seleted_X = -1;
                seleted_Y = -1;
                drawArea.repaint();
            }
        });
        drawArea.setPreferredSize(new Dimension(TABLE_WIDTH, TABLE_HEIGHT));
        frame.add(drawArea);
        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                frame.dispose();
            }
        });
        dialog.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                dialog.dispose();
            }
        });
        overBtn.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.exit(0);
            }
        });
        goonBtn.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                dialog.dispose();
                dialog = new Dialog(frame, "游戏结束", true);
                dialog.setBounds(600, 150, 300, 200);
                p2.add(goonBtn);
                p2.add(overBtn);
                dialog.add(p2, BorderLayout.SOUTH);
                Arrays.setAll(board, i -> new int[BOARD_SIZE + 2]);
            }
        });
        p2.add(goonBtn);
        p2.add(overBtn);
        dialog.add(p2, BorderLayout.SOUTH);
        p.add(whiteBtn);
        p.add(blackBtn);
        p.add(deleteBtn);
        frame.setLocation(500, 100);
        frame.pack();
        frame.setVisible(true);
    }

    private int judge() {
        int[][] coor1 = new int[BOARD_SIZE + 2][BOARD_SIZE + 2];
        int[][] coor2 = new int[BOARD_SIZE + 2][BOARD_SIZE + 2];
        int[][] coor3 = new int[BOARD_SIZE + 2][BOARD_SIZE + 2];
        int[][] coor4 = new int[BOARD_SIZE + 2][BOARD_SIZE + 2];
        for (int x = 1; x < BOARD_SIZE + 1; x++) {
            for (int y = 1; y < BOARD_SIZE + 1; y++) {
                //纵向扫描
                if (board[x][y] * board[x][y - 1] > 0) {
                    coor1[x][y] = coor1[x][y - 1] + board[x][y];
                }
                //横向扫描
                if (board[x][y] * board[x - 1][y] > 0) {
                    coor2[x][y] = coor2[x - 1][y] + board[x][y];
                    System.out.println(coor2[x][y]);
                }
                //右斜向扫描
                if (board[x][y] * board[x - 1][y - 1] > 0) {
                    coor3[x][y] = coor3[x - 1][y - 1] + board[x][y];
                }
                //左斜向扫描
                if (board[x][y] * board[x - 1][y + 1] > 0) {
                    coor4[x][y] = coor4[x - 1][y + 1] + board[x][y];
                }
                if (coor1[x][y] == 4 || coor2[x][y] == 4 || coor3[x][y] == 4 || coor4[x][y] == 4)
                    return 1;
                if (coor1[x][y] == -4 || coor2[x][y] == -4 || coor3[x][y] == -4 || coor4[x][y] == -4)
                    return -1;
            }
        }
        return 0;
    }

    public static void main(String[] args) throws IOException {
        new test07().init();
    }
}

图片素材自己画,网上找都可。该程序由本人改编自黑马的五子棋

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值