Java怎么实现五子棋单机版
发表于:2025-11-09 作者:千家信息网编辑
千家信息网最后更新 2025年11月09日,这篇文章主要介绍了Java怎么实现五子棋单机版的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java怎么实现五子棋单机版文章都会有所收获,下面我们一起来看看吧。Java五
千家信息网最后更新 2025年11月09日Java怎么实现五子棋单机版
这篇文章主要介绍了Java怎么实现五子棋单机版的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java怎么实现五子棋单机版文章都会有所收获,下面我们一起来看看吧。
Java五子棋设计流程:
1.创建窗口和设计一个棋盘界面
2.实现鼠标点击,棋子出现,黑白棋轮流下
3.能够判断输赢
4.添加按钮功能
实现结果图:
import java.awt.BorderLayout;import java.awt.Color;import java.awt.Cursor;import java.awt.FlowLayout;import java.awt.Graphics;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import javax.imageio.ImageIO;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JOptionPane;import javax.swing.JPanel; public class Test { public static void main(String[] args) { new MyFrame(); }} class MyFrame extends JFrame implements MouseListener{ //保存坐标 int x; int y; int x1; int y1; //黑子数 //白子数 //1是黑下,2是白下 //默认开始是黑旗先下 int flag=1; //表示游戏是否结束 //true游戏开始,false游戏结束,不能再下 boolean canPlay=true; //保存之前下过的棋子的坐标 //'0'代表没有棋子,'1'代表黑棋,'2'代表白棋 int [][]allChess=new int[19][19]; //int [][]allChess=new int[25][25]; //当前棋子的总数 int chessSum=0; BufferedImage bgImage =null; JButton withdraw=new JButton("悔棋"); JButton restart=new JButton("重新开始"); JButton exit=new JButton("退出"); JPanel south=new JPanel(); public MyFrame() { this.setTitle("五子棋"); setSize(630,700); setLayout(new BorderLayout()); setLocationRelativeTo(null); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); try { bgImage=ImageIO.read(new File("C:\\Users\\us\\Desktop\\1.jpg")); } catch (IOException e1) { e1.printStackTrace(); } addMouseListener(this);//将窗体加入监听 south.setLayout(new FlowLayout(FlowLayout.LEFT,60,30)); south.add(restart); south.add(withdraw); south.add(exit); //初始化按钮事件监听器内部类 MybuttonListener buttonListener =new MybuttonListener(); //将三个按钮事件注册监听事件 restart.addActionListener(buttonListener); withdraw.addActionListener(buttonListener); exit.addActionListener(buttonListener); //将按钮面板加到窗体的南部 this.add(south,BorderLayout.SOUTH); setVisible(true); } public void paint(Graphics g) { int tempSum=chessSum; //棋盘 g.drawImage(bgImage,8,30,this); for(int colum=58;colum<600 ;colum=colum+30){//行 g.drawLine(38,colum,578,colum); } for(int rand=38;rand<600;rand=rand+30){//列 g.drawLine(rand, 58,rand, 598); } //黑点 g.fillOval(122, 143, 10, 10); g.fillOval(484, 143, 10, 10); g.fillOval(122, 504, 10, 10); g.fillOval(303, 353, 10, 10); g.fillOval(484, 503, 10, 10); g.fillOval(122, 355, 10, 10); g.fillOval(484, 355, 10, 10); g.fillOval(303, 145, 10, 10); g.fillOval(303, 503, 10, 10); for(int i=0;i0) { g.setColor(Color.red); g.drawRect(x*30+38-13, y*30+58-13, 25,25); } //g.setColor(Color.red); //g.drawRect(x1*30+38-13, y1*30+58-13, 25,25); chessSum++; System.out.println("总数为"+(chessSum-1)); } public void mouseClicked(MouseEvent e) { x=e.getX(); y=e.getY(); //System.out.println("x="+e.getX()+" "+"y="+e.getY()); if(canPlay) { if(x>=38&&x<=588&&y>=58&&y<=620) { x=(x-38)/30;//38起点,适应19x19 y=(y-58)/30; if(allChess[x][y]==0){//此点没有棋子,才可下 //判断该由哪方下棋 if(flag==1) {//'1'代表由黑方下 allChess[x][y]=1;//'1'表示此处放黑棋 this.checkFive();//判断黑棋是否五子相连 flag=2; } else { allChess[x][y]=2;//'2'表示此处放白棋 this.checkFive();//判断白棋是否五子相连 flag=1;//'1'代表由黑方下 } this.repaint(); } } } } //判断五子相连 public void checkFive(){ //把要下的棋子颜色保存 int color=allChess[x][y]; //计算已连棋子个数 int count=1; //判断横向右边是否五子 for(int i=1;i<5;i++) { if(x>=15) break; if(color==allChess[x+i][y]) { count++; } checkWin(count); } count=1; //判断横向左边是否五子 for(int i=1;i<5;i++) { if(x<=3)//当棋子左边无法连成五子,直接退出 break; if(color==allChess[x-i][y]) { count++; } checkWin(count); } count=1; //判断竖向下边是否五子 for(int i=1;i<5;i++) { if(y>=15)//当棋子左边无法连成五子,直接退出 break; if(color==allChess[x][y+i]) { count++; } checkWin(count); } count=1; //判断竖向上边是否五子 for(int i=1;i<5;i++) { if(y<=3)//当棋子竖向上边无法连成五子,直接退出 break; if(color==allChess[x][y-i]) { count++; } checkWin(count); } count=1; //判断右斜上边是否五子 for(int i=1;i<5;i++) { if(y<=3||x>=15)//当棋子右斜上边无法连成五子,直接退出 break; if(color==allChess[x+i][y-i]) { count++; } checkWin(count); } count=1; //判断左斜向下边是否五子 for(int i=1;i<5;i++) { if(x<=3||y>=15)//当棋子左斜向下边无法连成五子,直接退出 break; if(color==allChess[x-i][y+i]) { count++; } checkWin(count); } count=1; //判断左斜向上边是否五子 for(int i=1;i<5;i++) { if(x<=3||y<=3) break; if(color==allChess[x-i][y-i]) { count++; } checkWin(count); } count=1; //判断右斜向下边是否五子 for(int i=1;i<5;i++) { if(y>=15||x>=15) break; if(color==allChess[x+i][y+i]) { count++; } checkWin(count); } count=1; } public void mouseEntered(MouseEvent e) { x1=e.getX(); y1=e.getY(); if(x1>=38&&x1<=588&&y1>=58&&y1<=620) { setCursor(new Cursor(Cursor.HAND_CURSOR)); } } public void mouseExited(MouseEvent arg0) { // TODO Auto-generated method stub } public void mousePressed(MouseEvent arg0) { } public void mouseReleased(MouseEvent e) { } public void checkWin(int count) { if(count>=5) {//五子相连 if(allChess[x][y]==1) { JOptionPane.showMessageDialog(this, "黑方胜出!!!!!!"); } if(allChess[x][y]==2) { JOptionPane.showMessageDialog(this, "白方胜出!!!!!!"); } canPlay=false;//游戏结束 } } //重新开始 public void restartGame(){ for(int i=0;i关于"Java怎么实现五子棋单机版"这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对"Java怎么实现五子棋单机版"知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。
五子
棋子
五子棋
上边
代表
按钮
连成
单机
单机版
事件
监听
棋盘
白棋
知识
黑方
黑棋
内容
坐标
总数
横向
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
服务器硬件招聘立讯
常见的关系型数据库产品的是
基岩版花雨庭服务器端口
数据仓库 关系型数据库
ctf江西网络安全大赛
宁夏广播电视台 网络安全
record数据类型数据库
网络支付与网络安全
服务器管理软件怎么看
网络安全检测与重构
数据库 查询语句
华为服务器怎么清理数据
网络安全监测装置 型
温州网络技术怎么样
部署web应用服务器配置
mysql数据库及调优
东莞视觉软件开发公司
河南烟草局网络安全招标
建设银行软件开发笔试题
推特中的涉疆数据库问题
智能软件开发难不难
mdb数据库怎么恢复
长沙信创服务器品牌
奥迪车载软件开发
数据库下信息存储安全
上海网络技术服务常见问题
分布式数据库和mpp数据库区别
sd卡拷不了太大的数据库
网络安全和电信运营
网易版红石大佬服务器号