Java小程序——简单五子棋(人机对战)

本文介绍了使用Java开发的一款简单五子棋小程序,包括人机对战功能。作者提到提供的AI算法较为基础,因此电脑对手并不强大,适合初学者作为Java入门项目。文章分享了游戏接口、界面类和控制器/监听类的相关代码。
摘要由CSDN通过智能技术生成

有关五子棋人人对战的代码,以及其他一些我想说的话请参考

 

Java小程序 —— 简单五子棋_如切如磋,如琢如磨-CSDN博客_java小程序

由于某些原因,这里我给出的AI算法算是比较简单的,所以导致了电脑其实并没有很强,甚至你玩的多了还可以发现电脑的“致命缺点”,由于我只是借助这个项目来做一个java的入门练习,且我还在读研,所以本人并不准备对AI的算法进行改进。

五子棋游戏接口:

public interface WZQConfig {
    /*
     * 起始位置X
     */
    public static final int START_X = 60;
    /*
     * 起始位置Y
     */
    public static final int START_Y = 60;
    /*
     * 五子棋盘线条数
     */
    public static final int H_LINE = 15;
    /*
     * 五子棋盘竖线条数
     */
    public static final int V_LINE = 15;
    /*
     * 五子棋盘格子大小
     */
    public static final int SIZE = 60;
    /*
     * 储存棋子的x位置信息
     */
    public static final int[][] bx = new int[17][17];
    public static final int[][] bx_lastStep = new int[17][17];

    public static final int[][] weightArray = new int [17][17];


}

界面类:

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
/*
 * 五子棋的界面类,该类继承JFrame,然后实现WZQConfig接口
 */
import javax.swing.JPanel;

public class WZQFrame extends JPanel implements WZQConfig {
    public void WZQFrame() {
        // WZQFrame ui = new WZQFrame();
        JFrame jf = new javax.swing.JFrame();
        jf.setTitle("五子棋");
        jf.setDefaultCloseOperation(3);
        jf.setSize(1246, 1080);
        jf.setLocationRelativeTo(null);
        jf.setResizable(false);

        jf.setLayout(new FlowLayout());
        this.setLayout(new FlowLayout());

        this.setPreferredSize(new Dimension(1030, 1080));

        // this.setBackground(Color.CYAN);
        // 把面板对象添加到窗体上
        jf.add(this);
        JPanel jp1 = new JPanel();
        jp1.setPreferredSize(new Dimension(200, 1080));
        jp1.setLayout(new FlowLayout());
        jf.add(jp1);
        LoginListener ll = new LoginListener();
        String[] str = { "悔棋", "重新开始" };
        for (int i = 0; i < str.length; i++) {
            JButton jbu1 = new JButton(str[i]);
            jbu1.setPreferredSize(new Dimension(150, 80));
            jbu1.setFont(new Font("楷体", Font.BOLD,20));//设置字体
            jp1.add(jbu1);
            jbu1.addActionListener(ll);
        }

        jf.setVisible(true);

        Graphics g = this.getGraphics();

        this.addMouseListener(ll);

        ll.setG(g);
        ll.setU(this);
    }

    /*
     * 重写窗体绘制容器的方法
     */
    public void paint(Graphics g) {
        super.paint(g);

        ImageIcon im2 = new ImageIcon(this.getClass().getResource("2.jpg"));

        g.drawImage(im2.getImage(), 0, 0, 1030, 1080, null);

        for (int i = 1; i < 17; i++) {
            Graphics2D g2 = (Graphics2D) g;
            g2.setStroke(new BasicStroke(4));
            g2.drawLine(START_X, START_Y * i, START_X + SIZE * V_LINE, START_Y
                    * i);// 横线
            g2.drawLine(START_X * i, START_Y, START_X * i, START_Y + SIZE
                    * V_LINE);// 竖线

            g2.setStroke(new BasicStroke(8));
            // 画边框
            g2.drawLine(35, 35, 990, 35);
            g2.drawLine(35, 990, 990, 990);
            g2.drawLine(35, 35, 35, 990);
            g2.drawLine(990, 35, 990, 990);
        }
        for (int k = 0; k < 17; k++) {
            for (int k1 = 0; k1 < 17; k1++) {
                if (bx[k][k1] == 1) {
                    g.setColor(Color.BLACK);
                    g.fillOval(Math.abs(k * SIZE - 25),
                            Math.abs(k1 * SIZE - 25), 50, 50);

                } else if (bx[k][k1] == 2) {
                    g.setColor(Color.WHITE);
                    g.fillOval(Math.abs(k * SIZE - 25),
                            Math.abs(k1 * SIZE - 25), 50, 50);
                }

            }

        }

    }

    public static void main(String[] args) {
        WZQFrame l = new WZQFrame();
        l.WZQFrame();

    }

}

控制器/监听类:

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.HashMap;
import java.util.Random;

import javax.swing.JButton;
import javax.swing.JOptionPane;

public class LoginListener implements MouseListener, WZQConfig, ActionListener {
    private int x, y;// 鼠标点击的位置
    private int x1, y1, xx, yy, x2, y2;// 鼠标点击附近格子交点的坐标
    private Graphics g;
    private int a = 0, i = 0, j = 0, count1 = 0;// count统计当前下的棋子数
    private String Str;// 定义全局变量获取按钮上的字符串
    private JButton jbu1, jbu2;
    private int GetX[] = new int[256];
    private int GetY[] = new int[256];
    WZQFrame ui;
    HashMap<String,Integer> map = new HashMap<String,Integer>();

    public LoginListener(){

        // 活一连
        map.put("010", 20);
        map.put("020", 20);
        map.put("01", 20);
        map.put("02", 20);
        map.put("10", 20);
        map.put("20", 20);
        // 活二连
        map.put("0110", 100);
        map.put("0220", 100);
        map.put("011", 100);
        map.put("110", 100);
        map.put("022", 100);
        map.put("220", 100);
        // 活三连
     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小王曾是少年

如果对你有帮助,欢迎支持我

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值