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<Chess> array; int coloum1,row1; int xx,yy,max; public GobangListener(GobangMain gm,MyArrayList<Chess> 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<array1.length;i++) { Arrays.fill(array1[i], 0); } cco=true; fff=true; ggg=true; array.Reset(); gm.repaint(); } if (e.getActionCommand().equals("人机对战")) { //选择人机对战模式 flag[0]为false,flag[1]为true flag[0]=false; flag[1]=true; for(int i=0;i<array1.length;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<array1.length;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<array1.length;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<array1.length;i++) { Arrays.fill(array1[i], 0); } gm.addMouseListener(this); array.Reset(); gm.repaint(); } if(co[0]) { for(int i=0;i<array1.length;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<array1.length;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<coloum&&row1<row) { 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,row1,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<coloum&&row1<row) { 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<row) { 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<weightArray.length;i++) { for(int j=0;j<weightArray[i].length;j++) { weightArray[i][j]=0; } } max=-1; AI.Quan(); for(int i=0;i<weightArray.length;i++) { for(int j=0;j<weightArray[i].length;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<weightArray[i][j]&&array1[i][j]==0) { 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<weightArray.length;i++) { for(int j=0;j<weightArray[i].length;j++) { weightArray[i][j]=0; } } max=-1; AI.Quan(); for(int i=0;i<weightArray.length;i++) { for(int j=0;j<weightArray[i].length;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<weightArray[i][j]&&array1[i][j]==0) { 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; } } } }
四、其他
1.更多系统
JavaSwing系统系列实现
Java+Swing实现斗地主游戏
Java+Swing实现图书管理系统
Java+Swing实现医院管理系统
Java+Swing实现考试管理系统
Java+Swing实现酒店管理系统
Java+Swing实现超市管理系统
Java+Swing实现电影购票系统
Java+Swing实现仓库管理系统-1
Java+Swing实现仓库管理系统-2
Java+Swing实现进销存管理系统
Java+Swing实现自助取款机系统
Java+Swing实现通讯录管理系统
Java+Swing实现停车场管理系统
Java+Swing实现学生信息管理系统
Java+Swing实现学生宿舍管理系统
Java+Swing实现学生选课管理系统
Java+Swing实现学生成绩管理系统
Java+Swing实现学校教材管理系统
Java+Swing实现学校教务管理系统
Java+Swing实现企业人事管理系统
Java+Swing实现电子相册管理系统
Java+Swing实现超市管理系统-TXT存储数据
Java+Swing实现自助取款机系统-TXT存储数据
Java+Swing实现宠物商店管理系统-TXT存储数据
Java+JSP系统系列实现
Java+JSP实现学生图书管理系统
Java+JSP实现学生信息管理系统
Java+JSP实现用户信息管理系统
Java+Servlet系统系列实现
Java+Servlet+JSP实现航空订票系统
Java+Servlet+JSP实现新闻发布系统
Java+Servlet+JSP学生宿舍管理系统
Java+Servlet+JSP实现图书管理系统
Java+Servlet+JSP实现停车场管理系统
Java+Servlet+JSP实现房屋租赁管理系统
Java+Servlet+JSP实现学生信息管理系统
Java+Servlet+JSP实现学生选课管理系统
Java+Servlet+JSP实现宠物诊所管理系统
Java+Servlet+JSP实现学生成绩管理系统-1
Java+Servlet+JSP实现学生成绩管理系统-2
Java+SSM系统系列实现
Java+SSM+JSP实现图书管理系统
Java+SSM+JSP实现超市订单系统
Java+SSM+JSP实现网上考试系统
Java+SSM+JSP实现宠物商城系统
Java+SSM+Layui实现学生成绩管理系统
Java+SSM+Bootstrap实现学生信息管理系统
Java+SSH系统系列实现
Java+SSH+JSP实现在线考试系统
Java+SSH+JSP实现医院在线挂号系统
Java+Springboot系统系列实现
Java+Springboot+H-ui+Maven实现营销管理系统
Java+Springboot+Bootstrap+Maven实现网上商城系统
Java+Springboot+Bootstrap+Maven实现景区旅游管理系统
1.更多JavaWeb系统请关注专栏。
https://blog.csdn.net/helongqiang/category_10020130.html
https://blog.csdn.net/helongqiang/category_10020130.html
2.更多JavaSwing系统请关注专栏。
https://blog.csdn.net/helongqiang/category_6229101.html
https://blog.csdn.net/helongqiang/category_6229101.html
2.源码下载
Java+Swing实现五子棋游戏
3.运行项目
请点击以下链接,部署你的项目。
Eclipse如何导入JavaSwing项目超详细图文教程
Eclipse如何导入JavaSwing项目超详细视频教程
4.备注
如有侵权请联系我删除。
5.支持博主
如果您觉得此文对您有帮助,请点赞加关注加收藏。祝您生活愉快!