有关五子棋人人对战的代码,以及其他一些我想说的话请参考
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);
// 活三连