Java+Swing实现五子棋游戏的示例代码

网友投稿 237 2022-08-28


Java+Swing实现五子棋游戏的示例代码

目录一、系统介绍1.开发环境2.技术选型3.系统功能二、系统展示三、部分代码AI.javaChess.javaGobang.javaGobangListener.java

一、系统介绍

1.开发环境

开发工具:Eclipse2021

JDK版本:jdk1.8

mysql版本:8.0.13

2.技术选型

Java+Swing

3.系统功能

实现五子棋游戏,开始游戏,悔棋,认输,退出功能。

二、系统展示

1.首页

2.黑棋走

3.白棋走

三、部分代码

AI.java

package com.sjsq;

import java.util.HashMap;

public class AI implements Gobang {

static HashMap map = new HashMap();

static {

/**

* 权值

*/

// 防守权值

// 活1连

map.put("010", 20); //map.put(key,value) key=键 value=值

map.put("0-10", 10);

// 眠1连

map.put("-110", 1);

map.put("1-10", 1);

// 活2连

map.put("0110", 200);

map.put("0-1-10", 100);

// 眠2连

map.put("-1110", 20);

map.put("1-1-10", 10);

// 活3连

map.put("01110", 7000);

map.put("0-1-1-10", 5000);

// 眠3连

map.put("-11110", 50);

map.put("1-1-1-10", 30);

// 活4连

map.put("011110", 10000);

map.put("0-1-1-1-10", 10000);

// 眠4连

map.put("-111110", 10000);

map.put("1-1-1-1-10", 10000);

// 碰壁眠4连

map.put("11110", 10000);

map.put("-1-1-1-10", 10000);

//进攻权值

//活1连

map.put("010",10);

map.put("0-10",20);

//眠1连

map.put("-110",1);

map.put("1-10",1);

//活2连

map.put("0110", 100);

map.put("0-1-10",200);

//眠2连

map.put("-1110",10);

map.put("1-1-10",20);

//活3连

map.put("01110", 5000);

map.put("0-1-1-10",7000);

//眠3连

map.put("-11110",30);

map.put("1-1-1-10",50);

//活4连

map.put("011110", 10000);

map.put("0-1-1-1-10",10000);

//眠4连

map.put("-111110",10000);

map.put("1-1-1-1-10",10000);

//碰壁眠4连

map.put("11110", 10000);

map.put("-1-1-1-10", 15000);

}

static String code;

static Integer weight;

public static void Quan() {

for (int r = 0; r < array1.length; r++) {

for (int c = 0; c < array1[r].length; c++) {

if (array1[r][c] == 0) {// 如果该位置没有棋子则开始统计

code = countHL(r, c);// 调用水平向左统计的方法

weight = map.get(code);// 根据棋子相连情况获取对应的权值

if (weight != null) {// 判断是否有该种棋子相连的情况

weightArray[r][c] += weight;// 累加权值

}

// 把另外七个方向统计完毕后,就完成权值统计

code = countHR(r, c);// 调用水平向右统计的方法

weight = map.get(code);// 根据棋子相连情况获取对应的权值

if (weight != null) {// 判断是否有该种棋子相连的情况

weightArray[r][c] += weight;// 累加权值

}

code = countHT(r, c);// 调用水平向左统计的方法

weight = map.get(code);// 根据棋子相连情况获取对应的权值

ihttp://f (weight != null) {// 判断是否有该种棋子相连的情况

weightArray[r][c] += weight;// 累加权值

}

code = countHB(r, c);// 调用水平向左统计的方法

weight = map.get(code);// 根据棋子相连情况获取对应的权值

if (weight != null) {// 判断是否有该种棋子相连的情况

weightArray[r][c] += weight;// 累加权值

}

code = countHZXS(r, c);// 调用水平向左统计的方法

weight = map.get(code);// 根据棋子相连情况获取对应的权值

if (weight != null) {// 判断是否有该种棋子相连的情况

weightArray[r][c] += weight;// 累加权值

}

code = countHYXS(r, c);// 调用水平向左统计的方法

weight = map.get(code);// 根据棋子相连情况获取对应的权值

if (weight != null) {// 判断是否有该种棋子相连的情况

weightArray[r][c] += weight;// 累加权值

}

code = countHZXX(r, c);// 调用水平向左统计的方法

weight = map.get(code);// 根据棋子相连情况获取对应的权值

if (weight != null) {// 判断是否有该种棋子相连的情况

weightArray[r][c] += weight;// 累加权值

}

code = countHYXX(r, c);// 调用水平向左统计的方法

weight = map.get(code);// 根据棋子相连情况获取对应的权值

if (weight != null) {// 判断是否有该种棋子相连的情况

weightArray[r][c] += weight;// 累加权值

}

// 针对每种情况都进行权值分析,保证五子棋规则的完善

// 判断两个2连在一条直线但中间有一个空位的情况

if ((countHL(r, c) + countHR(r, c) == "01100110")

|| (countHL(r, c) + countHR(r, c) == "0-1-100-1-10")

|| (countHL(r, c) + countHR(r, c) == "-11100110")

|| (countHL(r, c) + countHR(r, c) == "1-1-100-1-10")

|| (countHL(r, c) + countHR(r, c) == "0110-1110")

|| (countHL(r, c) + countHR(r, c) == "0-1-101-1-10")

|| (countHL(r, c) + countHR(r, c) == "-1110-1110")

|| (countHL(r, c) + countHR(r, c) == "1-1-101-1-10")) {

weightArray[r][c] = weightArray[r][c] + 5000;

}

if ((countHT(r, c) + countHB(r, c) == "01100110")

|| (countHT(r, c) + countHB(r, c) == "0-1-100-1-10")

|| (countHT(r, c) + countHB(r, c) == "-11100110")

|| (countHT(r, c) + countHB(r, c) == "1-1-100-1-10")

|| (countHT(r, c) + countHB(r, c) == "0110-1110")

|| (countHT(r, c) + countHB(r, c) == "0-1-101-1-10")

|| (countHT(r, c) + countHB(r, c) == "-1110-1110")

|| (countHT(r, c) + countHB(r, c) == "1-1-101-1-10")) {

weightArray[r][c] = weightArray[r][c] + 5000;

}

if ((countHZXS(r, c) + countHYXX(r, c) == "01100110")

|| (countHZXS(r, c) + countHYXX(r, c) == "0-1-100-1-10")

|| (countHZXS(r, c) + countHYXX(r, c) == "-11100110")

|| (countHZXS(r, c) + countHYXX(r, c) == "1-1-100-1-10")

|| (countHZXS(r, c) + countHYXX(r, c) == "0110-1110")

|| (countHZXS(r, c) + countHYXX(r, c) == "0-1-101-1-10")

|| (countHZXS(r, c) + countHYXX(r, c) == "-1110-1110")

|| (countHZXS(r, c) + countHYXX(r, c) == "1-1-101-1-10")) {

weightArray[r][c] = weightArray[r][c] + 5000;

}

if ((countHYXS(r, c) + countHZXX(r, c) == "01100110")

|| (countHYXS(r, c) + countHZXX(r, c) == "0-1-100-1-10")

|| (countHYXS(r, c) + countHZXX(r, c) == "-11100110")

|| (countHYXS(r, c) + countHZXX(r, c) == "1-1-100-1-10")

|| (countHYXS(r, c) + countHZXX(r, c) == "0110-1110")

|| (countHYXS(r, c) + countHZXX(r, c) == "0-1-101-1-10")

|| (countHYXS(r, c) + countHZXX(r, c) == "-1110-1110")

|| (countHYXS(r, c) + countHZXX(r, c) == "1-1-101-1-10")) {

weightArray[r][c] = weightArray[r][c] + 5000;

}

// 判断一个活2连和一个活1连在一条直线上但中间有一个空位的情况

if ((countHL(r, c) + countHR(r, c) == "0100110") || (countHL(r, c) + countHR(r, c) == "0-100-1-10")

|| (countHL(r, c) + countHR(r, c) == "0110010")

|| (countHL(r, c) + countHR(r, c) == "0-1-100-10")) {

weightArray[r][c] = weightArray[r][c] + 3000;

}

if ((countHT(r, c) + countHB(r, c) == "0100110") || (countHT(r, c) + countHB(r, c) == "0-100-1-10")

|| (countHT(r, c) + countHB(r, c) == "0110010")

|| (countHT(r, c) + countHB(r, c) == "0-1-100-10")) {

weightArray[r][c] = weightArray[r][c] + 3000;

}

if ((countHZXS(r, c) + countHYXX(r, c) == "0100110")

|| (countHZXS(r, c) + countHYXX(r, c) == "0-100-1-10")

|| (countHZXS(r, c) + countHYXX(r, c) == "0110010")

|| (countHZXS(r, c) + countHYXX(r, c) == "0-1-100-10")) {

weightArray[r][c] = weightArray[r][c] + 3000;

}

if ((countHYXS(r, c) + countHZXX(r, c) == "0100110")

|| (countHYXS(r, c) + countHZXX(r, c) == "0-100-1-10")

|| (countHYXS(r, c) + countHZXX(r, c) == "0110010")

|| (countHYXS(r, c) + countHZXX(r, c) == "0-1-100-10")) {

weightArray[r][c] = weightArray[r][c] + 3000;

}

// 眠3连的一端被堵了

// "1-1-1-10"&"010" "0-1-1-10"&"010"

if ((countHL(r, c) + countHR(r, c) == "1-1-1-10010")

|| (countHL(r, c) + countHR(r, c) == "0101-1-1-10")

|| (countHL(r, c) + countHR(r, c) == "1-1-1-100")

|| (countHL(r, c) + countHR(r, c) == "01-1-1-10")

|| (countHL(r, c) + countHR(r, c) == "1-1-1-100110")

|| (countHL(r, c) + countHR(r, c) == "01101-1-1-10")) {

weightArray[r][c] = 1;

}

if ((countHT(r, c) + countHB(r, c) == "1-1-1-10010")

|| (countHT(r, c) + countHB(r, c) == "0101-1-1-10")

|| (countHT(r, c) + countHB(r, c) == "1-1-1-100")

|| (countHT(r, c) + countHB(r, c) == "01-1-1-10")

|| (countHT(r, c) + countHB(r, c) == "1-1-1-100110")

|| (countHT(r, c) + countHB(r, c) == "01101-1-1-10")) {

weightArray[r][c] = 1;

;

}

if ((countHZXS(r, c) + countHYXX(r, c) == "1-1-1-10010")

|| (countHZXS(r, c) + countHYXX(r, c) == "0101-1-1-10")

|| (countHZXS(r, c) + countHYXX(r, c) == "1-1-1-100")

|| (countHZXS(r, c) + countHYXX(r, c) == "01-1-1-10")

|| (countHZXS(r, c) + countHYXX(r, c) == "1-1-1-100110")

|| (countHZXS(r, c) + countHYXX(r, c) == "01101-1-1-10")) {

weightArray[r][c] = 1;

}

if ((countHYXS(r, c) + countHZXX(r, c) == "1-1-1-10010")

|| (countHYXS(r, c) + countHZXX(r, c) == "0101-1-1-10")

|| (countHYXS(r, c) + countHZXX(r, c) == "1-1-1-100")

|| (countHYXS(r, c) + countHZXX(r, c) == "01-1-1-10")

|| (countHYXS(r, c) + countHZXX(r, c) == "1-1-1-100110")

|| (countHYXS(r, c) + countHZXX(r, c) == "01101-1-1-10")) {

weightArray[r][c] = 1;

}

// 3连和1连在一条线上差一个棋位

if ((countHL(r, c) + countHR(r, c) == "0-1-1-100-10")

|| (countHL(r, c) + countHR(r, c) == "0-101-1-1-10")

|| (countHL(r, c) + countHR(r, c) == "01110010")

|| (countHL(r, c) + countHR(r, c) == "010-11110")

|| (countHL(r, c) + countHR(r, c) == "0-100-1-1-10")

|| (countHL(r, c) + countHR(r, c) == "1-1-1-100-10")

|| (countHL(r, c) + countHR(r, c) == "01001110")

|| (countHL(r, c) + countHR(r, c) == "-11110010")) {

weightArray[r][c] = weightArray[r][c] + 4000;

}

if ((countHT(r, c) + countHB(r, c) == "0-1-1-100-10")

|| (countHT(r, c) + countHB(r, c) == "0-101-1-1-10")

|| (countHT(r, c) + countHB(r, c) == "01110010")

|| (countHT(r, c) + countHB(r, c) == "010-11110")

|| (countHT(r, c) + countHB(r, c) == "0-100-1-1-10")

|| (countHT(r, c) + countHB(r, c) == "1-1-1-100-10")

|| (countHT(r, c) + countHB(r, c) == "01001110")

|| (countHT(r, c) + countHB(r, c) == "-11110010")) {

weightArray[r][c] = weightArray[r][c] + 4000;

}

if ((countHZXS(r, c) + countHYXX(r, c) == "0-1-1-100-10")

|| (countHZXS(r, c) + countHYXX(r, c) == "0-101-1-1-10")

|| (countHZXS(r, c) + countHYXX(r, c) == "01110010")

|| (countHZXS(r, c) + countHYXX(r, c) == "010-11110")

|| (countHZXS(r, c) + countHYXX(r, c) == "0-100-1-1-10")

|| (countHZXS(r, c) + countHYXX(r, c) == "1-1-1-100-10")

|| (countHZXS(r, c) + countHYXX(r, c) == "01001110")

|| (countHZXS(r, c) + countHYXX(r, c) == "-11110010")) {

weightArray[r][c] = weightArray[r][c] + 4000;

}

if ((countHYXS(r, c) + countHZXX(r, c) == "0-1-1-100-10")

|| (countHYXS(r, c) + countHZXX(r, c) == "0-101-1-1-10")

|| (countHYXS(r, c) + countHZXX(r, c) == "01110010")

|| (countHYXS(r, c) + countHZXX(r, c) == "010-11110")

|| (countHYXS(r, c) + countHZXX(r, c) == "0-100-1-1-10")

|| (countHYXS(r, c) + countHZXX(r, c) == "1-1-1-100-10")

|| (countHYXS(r, c) + countHZXX(r, c) == "01001110")

|| (countHYXS(r, c) + countHZXX(r, c) == "-11110010")) {

weightArray[r][c] = weightArray[r][c] + 4000;

}

}

}

}

}

// 水平向左统计的方法

public static String countHL(int r, int c) {

String code = "0";

int chess = 0;// 存储第一颗出现的棋子

// 循环遍历

for (int r1 = r - 1; r1 >= 0; r1--) {

if (array1[r1][c] == 0) {// 表示空位沒有棋子

if (r1 + 1 == r) {// 相邻

break;

} else {

code = array1[r1][c] + code;// 记录棋子相连情况

break;

}

} else {// 表示该位置有棋子

if (chess == 0) {// 第一次出现棋子

chess = array1[r1][c];// 记录棋子

code = array1[r1][c] + code;// 记录棋子相连情况

} else if (chess == array1[r1][c]) {

code = array1[r1][c] + code;// 记录棋子相连情况

} else {

code = array1[r1][c] + code;// 记录棋子相连情况

break;

}

}

}

return code;

}

// 水平向右统计的方法

public static String countHR(int r, int c) {

String code = "0";

int chess = 0;// 存储第一颗出现的棋子

// 循环遍历

for (int r1 = r + 1; r1 < coloum; r1++) {

if (array1[r1][c] == 0) {// 表示空位沒有棋子

if (r1 - 1 == r) {// 相邻

break;

} else {

code = array1[r1][c] + code;// 记录棋子相连情况

break;

}

} else {// 表示该位置有棋子

if (chess == 0) {// 第一次出现棋子

chess = array1[r1][c];// 记录棋子

code = array1[r1][c] + code;// 记录棋子相连情况

} else if (chess == array1[r1][c]) {

code = array1[r1][c] + code;// 记录棋子相连情况

} else {

code = array1[r1][c] + code;// 记录棋子相连情况

break;

}

}

}

return code;

}

// 竖直向上统计的方法

public static String countHT(int r, int c) {

String code = "0";

int chess = 0;// 存储第一颗出现的棋子

// 循环遍历

for (int c1 = c - 1; c1 >= 0; c1--) {

if (array1[r][c1] == 0) {// 表示空位沒有棋子

if (c1 + 1 == r) {// 相邻

break;

} else {

code = array1[r][c1] + code;// 记录棋子相连情况

break;

}

} else {// 表示该位置有棋子

if (chess == 0) {// 第一次出现棋子

chess = array1[r][c1];// 记录棋子

code = array1[r][c1] + code;// 记录棋子相连情况

} else if (chess == array1[r][c1]) {

code = array1[r][c1] + code;// 记录棋子相连情况

} else {

code = array1[r][c1] + code;// 记录棋子相连情况

break;

}

}

}

return code;

}

// 竖直向下统计的方法

public static String countHB(int r, int c) {

String code = "0";

int chess = 0;// 存储第一颗出现的棋子

// 循环遍历

for (int c1 = c + 1; c1 < row; c1++) {

if (array1[r][c1] == 0) {// 表示空位沒没有棋子

if (c1 - 1 == c) {// 相邻

break;

} else {

code = array1[r][c1] + code;// 记录棋子相连情况

break;

}

} else {// 表示该位置有棋子

if (chess == 0) {// 第一次出现棋子

chess = array1[r][c1];// 记录棋子

code = array1[r][c1] + code;// 记录棋子相连情况

} else if (chess == array1[r][c1]) {

code = array1[r][c1] + code;// 记录棋子相连情况

} else {

code = array1[r][c1] + code;// 记录棋子相连情况

break;

}

}

}

return code;

}

// 左斜向上统计的方法

public static String countHZXS(int r, int c) {

String code = "0";

int chess = 0;// 存储第一颗出现的棋子

// 循环遍历

for (int r1 = r - 1, c1 = c - 1; r1 >= 0 && c1 >= 0; r1--, c1--) {

if (array1[r1][c1] == 0) {// 表示空位沒有棋子

if (c1 + 1 == c && r1 + 1 == r) {// 相邻

break;

} else {

code = array1[r1][c1] + code;// 记录棋子相连情况

break;

}

} else {// 表示该位置有棋子

if (chess == 0) {// 第一次出现棋子

chess = array1[r1][c1];// 记录棋子

code = array1[r1][c1] + code;// 记录棋子相连情况

} else if (chess == array1[r1][c1]) {

code = array1[r1][c1] + code;// 记录棋子相连情况

} else {

code = array1[r1][c1] + code;// 记录棋子相连情况

break;

}

}

}

return code;

}

// 右斜向上统计的方法

public static String countHYXS(int r, int c) {

String code = "0";

int chess = 0;// 存储第一颗出现的棋子

// 循环遍历

for (int r1 = r + 1, c1 = c - 1; c1 >= 0 && r1 < coloum; r1++, c1--) {

if (array1[r1][c1] == 0) {// 表示空位沒有棋子

if (r1 - 1 == r && c1 + 1 == c) {// 相邻

break;

} else {

code = array1[r1][c1] + code;// 记录棋子相连情况

break;

}

} else {// 表示该位置有棋子

if (chess == 0) {// 第一次出现棋子

chess = array1[r1][c1];// 记录棋子

code = array1[r1][c1] + code;// 记录棋子相连情况

} else if (chess == array1[r1][c1]) {

code = array1[r1][c1] + code;// 记录棋子相连情况

} else {

code = array1[r1][c1] + code;// 记录棋子相连情况

break;

}

}

}

return code;

}

// 左斜向下统计的方法

public static String countHZXX(int r, int c) {

String code = "0";

int chess = 0;// 存储第一颗出现的棋子

// 循环遍历

for (int r1 = r - 1, c1 = c + 1; c1 < row && r1 >= 0; c1++, r1--) {

if (array1[r1][c1] == 0) {// 表示空位沒有棋子

if (c1 - 1 == c && r1 + 1 == r) {// 相邻

break;

} else {

code = array1[r1][c1] + code;// 记录棋子相连情况

break;

}

} else {// 表示该位置有棋子

if (chess == 0) {// 第一次出现棋子

chess = array1[r1][c1];// 记录棋子

code = array1[r1][c1] + code;// 记录棋子相连情况

} else if (chess == array1[r1][c1]) {

code = array1[r1][c1] + code;// 记录棋子相连情况

} else {

code = array1[r1][c1] + code;// 记录棋子相连情况

break;

}

}

}

return code;

}

// 右斜向下统计的方法

public static String countHYXX(int r, int c) {

String code = "0";

int chess = 0;// 存储第一颗出现的棋子

// 循环遍历

for (int r1 = r + 1, c1 = c + 1; r1 < coloum && c1 < row; r1++, c1++) {

if (array1[r1][c1] == 0) {// 表示空位沒有棋子

if (c1 - 1 == c && r1 - 1 == r) {// 相邻

break;

} else {

code = array1[r1][c1] + code;// 记录棋子相连情况

break;

}

} else {// 表示该位置有棋子

if (chess == 0) {// 第一次出现棋子

chess = array1[r1][c1];// 记录棋子

code = array1[r1][c1] + code;// 记录棋子相连情况

} else if (chess == array1[r1][c1]) {

code = array1[r1][c1] + code;// 记录棋子相连情况

} else {

code = array1[r1][c1] + code;// 记录棋子相连情况

break;

}

}

}

return code;

}

}

Chess.java

package com.sjsq;

import java.awt.Color;//设置棋子颜色和棋子的落子位置

public class Chess extends Object implements Gobang{

int coloum,row; //输入列数,行数

Color color; //棋盘颜色的设置

public Chess(int coloum,int row,Color color) {

this.coloum=coloum;

this.row=row;

this.color=color;

}

}

Gobang.java

package com.sjsq;

public interface Gobang { //接口 申明全局变量

public static final int size = 40; // 设置格子大小为40

public static final int X = 20, Y = 20; // 设置棋盘右上角的位置

public static final int coloum = 15; //设置行数

public static final int row = 15; //设置列数

public static final int[][] array1 = new int[coloum][row]; //记录棋子位置的数组

public static final int[][] weightArray = new int[coloum][row]; //记录棋盘每个位置的权值

public static final boolean flag[] = new boolean[2]; //记录选择的模式

public static final boolean co[] = new boolean[2]; //记录选择的棋色

}

GobangListener.java

package com.sjsq;

import java.awt.Color;

import java.awt.Graphics;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

import java.util.Arrays;

import javax.swing.JOptionPane;

public class GobangListener extends MouseAdapter implements ActionListener,Gobang{

private GobangMain gm; // 棋盘面板对象

private Graphics g; // 画笔对象

boolean cco=true; //记录玩家下棋还是电脑下棋

boolean fff=true; //记录是否能悔棋

boolean ggg=true; //记录是否能认输

private MyArrayList array;

int coloum1,row1;

int xx,yy,max;

public GobangListener(GobangMain gm,MyArrayList array) { //从GobangMain传窗体对象和记录棋子的数组

this.gm = gm;

this.array=array;

}

public void actionPerformed(ActionEvent e) {

if (e.getActionCommand().equals("悔棋")) {

if(flag[0]) { //人人对战悔棋

if(fff) {

if(array.getSize()>1) {

array1[coloum1][row1]=0;

Chess aaa=array.get(array.getSize()-2);

coloum1=aaa.coloum;

row1=aaa.row;

array.Delete();

cco=!cco;

gm.repaint();

}

}

}

if(flag[1]) { //人机对战悔棋

if(fff) {

if(cco) {

if(array.getSize()>2) {

array1[xx][yy]=0;

Chess aaa=array.get(array.getSize()-2);

coloum1=aaa.coloum;

row1=aaa.row;

array.Delete();

array1[coloum1][row1]=0;

Chess bbb=array.get(array.getSize()-2);

xx=bbb.coloum;

yy=bbb.row;

array.Delete();

gm.repaint();

}

}

}

}

}

if (e.getActionCommand().equals("认输")) {

if(ggg) {

if(flag[0]){

if(cco) {

JOptionPane.showMessageDialog(gm, "白棋获胜");

}else {

JOptionPane.showMessageDialog(gm, "黑棋获胜");

}

gm.removeMouseListener(this);

fff=false;

ggg=false;

}

if(flag[1]) {

if(co[0]) {

if(cco) {

JOptionPane.showMessageDialog(gm, "黑棋获胜");

}else {

JOptionPane.showMessageDialog(gm, "白棋获胜");

}

gm.removeMouseListener(this);

fff=false;

ggg=false;

}

if(co[1]) {

if(cco) {

JOptionPane.showMessageDialog(gm, "白棋获胜");

}else {

JOptionPane.showMessageDialog(gm, "黑棋获胜");

}

gm.removeMouseListener(this);

fff=false;

ggg=false;

array.Reset();

}

}

}

}

if (e.getActionCommand().equals("退出")) { //退出游戏

System.exit(0);

}

if (e.getActionCommand().equals("人人对战")) { //选择人人对战模式 flag[0]为true,flag[1]为false

flag[0]=true;

flag[1]=false;

for(int i=0;i

Arrays.fill(array1[i], 0);

}

cco=true;

fff=true;

ggg=true;

array.Reset();

gm.repaint();

}

if (e.getActionCommand().equaFwJyuVls("人机对战")) { //选择人机对战模式 flag[0]为false,flag[1]为true

flag[0]=false;

flag[1]=true;

for(int i=0;i

Arrays.fill(array1[i], 0);

}

cco=true;

fff=true;

ggg=true;

array.Reset();

gm.repaint();

}

if (e.getActionCommand().equals("黑子(先手)")) {

co[0]=false;

co[1]=true;

for(int i=0;i

Arrays.fill(array1[i], 0);

}

cco=true;

fff=true;

ggg=true;

array.Reset();

gm.repaint();

}

if (e.getActionCommand().equals("白子(后手)")) {

co[0]=true;

co[1]=false;

for(int i=0;i

Arrays.fill(array1[i], 0);

}

cco=false;

fff=true;

ggg=true;

array.Reset();

gm.repaint();

}

if (e.getActionCommand().equals("开始新游戏")) {

if(flag[1]) {

if (co[1]){

for(int i=0;i

Arrays.fill(array1[i], 0);

}

gm.addMouseListener(this);

array.Reset();

gm.repaint();

}

if(co[0]) {

for(int i=0;i

Arrays.fill(array1[i], 0);

}

// cco=false;

gm.addMouseListener(this);

array.Reset();

gm.repaint();

// g.setColor(Color.BLACK);

// g.fillOval(X+8*size-size/2, Y+8*size-size/2, size, size);

array1[7][7]=-1; //AI先手第一个子落点

Chess sh=new Chess(7,7,Color.BLACK);

array.add(sh);

cco=true;

fff=true;

ggg=true;

}

}

if(flag[0]) {

for(int i=0;i

Arrays.fill(array1[i], 0);

}

cco=true;

fff=true;

ggg=true;

gm.addMouseListener(this);

array.Reset();

gm.repaint();

}

}

}

public void mouseReleased(MouseEvent e) { //鼠标松开的时候进行的操作

if(flag[0]) { //选择人人对战模式进行的操作

if (g == null)

g = gm.getGraphics();

int x = e.getX();

int y = e.getY();

coloum1 = (x-X+size/2)/size;

row1 = (y-Y+size/2)/size;

if(coloum1

if(array1[coloum1][row1]==0) {

if(cco) {

g.setColor(Color.BLACK);

g.fillOval(X+coloum1*size-size/2, Y+row1*size-size/2, size, size);

array1[coloum1][row1]=1;

Chess sh=new Chess(coloum1,row1http://,Color.BLACK);

array.add(sh);

}

else {

g.setColor(Color.WHITE);

g.fillOval(X+coloum1*size-size/2, Y+row1*size-size/2, size, size);

array1[coloum1][row1]=-1;

Chess sh=new Chess(coloum1,row1,Color.WHITE);

array.add(sh);

}

Judge jd=new Judge(coloum1,row1);

if(jd.judge()) {

if(cco) {

JOptionPane.showMessageDialog(gm, "黑棋获胜");

}else {

JOptionPane.showMessageDialog(gm, "白棋获胜");

}

gm.removeMouseListener(this);

fff=false;

ggg=false;

array.Reset();

}

cco=!cco;

}

}

}

if(flag[1]) { //选择人机对战进行的操作

if (g == null)

g = gm.getGraphics();

if(co[1]) {

if(cco) { //若cco为true,则人下棋

int x = e.getX();

int y = e.getY();

coloum1 = (x-X+size/2)/size;

row1 = (y-Y+size/2)/size;

if(coloum1

if(array1[coloum1][row1]==0) {

g.setColor(Color.BLACK);

g.fillOval(X+coloum1*size-size/2, Y+row1*size-size/2, size, size);

array1[coloum1][row1]=1;

Chess sh=new Chess(coloum1,row1,Color.BLACK);

array.add(sh);

Judge jd=new Judge(coloum1,row1);

if(jd.judge()) {

if(cco) {

JOptionPane.showMessageDialog(gm, "黑棋获胜");

}else {

JOptionPane.showMessageDialog(gm, "白棋获胜");

}

gm.removeMouseListener(this);

fff=false;

ggg=false;

array.Reset();

cco=!cco;

}

cco=!cco;

}

}

}

if(!cco) { //若cco为false,则机器下棋

AIX();

}

}

if(co[0]) {

if(cco) { //若cco为true,则人下棋

int x = e.getX();

int y = e.getY();

coloum1 = (x-X+size/2)/size;

row1 = (y-Y+size/2)/size;

if(coloum1<coloum&&row1

if(array1[coloum1][row1]==0) {

g.setColor(Color.WHITE);

g.fillOval(X+coloum1*size-size/2, Y+row1*size-size/2, size, size);

array1[coloum1][row1]=1;

Chess sh=new Chess(coloum1,row1,Color.WHITE);

array.add(sh);

Judge jd=new Judge(coloum1,row1);

if(jd.judge()) {

if(cco) {

JOptionPane.showMessageDialog(gm, "白棋获胜");

}else {

JOptionPane.showMessageDialog(gm, "黑棋获胜");

}

gm.removeMouseListener(this);

fff=false;

ggg=false;

array.Reset();

cco=!cco;

}

cco=!cco;

}

}

}

if(!cco) { //若cco为false,则机器下棋

AIX();

}

}

}

}

//调用AI进行下棋

public void AIX() {

if(co[1]) {

for(int i=0;i

for(int j=0;j

weightArray[i][j]=0;

}

}

max=-1;

AI.Quan();

for(int i=0;i

for(int j=0;j

if(i<5&&j<5) {

if(max<=weightArray[i][j]&&array1[i][j]==0) {

max=weightArray[i][j];

xx=i;yy=j;

}

}else {

if(max

max=weightArray[i][j];

xx=i;yy=j;

}

}

}

}

if(array1[xx][yy]==0) {

g.setColor(Color.WHITE);

g.fillOval(X+xx*size-size/2, Y+yy*size-size/2, size, size);

array1[xx][yy]=-1;

Chess sh=new Chess(xx,yy,Color.WHITE);

array.add(sh);

Judge jd=new Judge(xx,yy);

if(jd.judge()) {

if(cco) {

JOptionPane.showMessageDialog(gm, "黑棋获胜");

}else {

JOptionPane.showMessageDialog(gm, "白棋获胜");

}

gm.removeMouseListener(this); //移除监听,这时将不能对棋盘进行操作

fff=false; //设置不能进行悔棋

ggg=false; //设置不能进行认输

array.Reset();

}

cco=!cco;

}

}

if(co[0]) {

for(int i=0;i

for(int j=0;j

weightArray[i][j]=0;

}

}

max=-1;

AI.Quan();

for(int i=0;i

for(int j=0;j

if(i<5&&j<5) {

if(max<=weightArray[i][j]&&array1[i][j]==0) {

max=weightArray[i][j];

xx=i;yy=j;

}

}else {

if(max

max=weightArray[i][j];

xx=i;yy=j;

}

}

}

}

if(array1[xx][yy]==0) {

g.setColor(Color.BLACK);

g.fillOval(X+xx*size-size/2, Y+yy*size-size/2, size, size);

array1[xx][yy]=-1;

Chess sh=new Chess(xx,yy,Color.BLACK);

array.add(sh);

Judge jd=new Judge(xx,yy);

if(jd.judge()) {

if(cco) {

JOptionPane.showMessageDialog(gm, "白棋获胜");

}else {

JOptionPane.showMessageDialog(gm, "黑棋获胜");

}

gm.removeMouseListener(this); //移除监听,这时将不能对棋盘进行操作

fff=false; //设置不能进行悔棋

ggg=false; //设置不能进行认输

array.Reset();

}

cco=!cco;

}

}

}

}

以上就是Java+Swing实现五子棋游戏的示例代码的详细内容,更多关于Java Swing五子棋的资料请关注我们其它相关文章!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Python字符串常用方法总结(python字符串的操作方法)
下一篇:git中使用.gitignore的技巧 || PyCharm中为Python项目添加.gitignore文件(gitignore需要提交吗)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~