Java五子棋设计流程:

1.创建窗口和设计一个棋盘界面

2.实现鼠标点击,棋子出现,黑白棋轮流下

3.能够判断输赢

4.添加按钮功能

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;i<allChess.length;i++) {for(int j=0;j<allChess.length;++j) {//下黑子if(allChess[i][j]==1) {int tempX=i*30+38;//左边界到棋盘的距离int tempY=j*30+58;//上边界到棋盘的距离g.setColor(Color.black);g.fillOval(tempX-13,tempY-13,25,25);}//下白子if(allChess[i][j]==2) {int tempX=i*30+38;int tempY=j*30+58;g.setColor(Color.white);g.fillOval(tempX-13,tempY-13,25,25);}}}//最后棋子用红框表示if(chessSum>0) {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起点,适应19x19y=(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<allChess.length;i++) {for(int j=0;j<allChess.length;j++) {allChess[i][j]=0;}}flag=1;//默认开始是黑旗先下canPlay=true;repaint();}//悔棋public void goback() {if(allChess[x][y]!=0) {//当棋盘有棋子,才能悔棋allChess[x][y]=0;if(flag==1) {flag=2;repaint();}else {flag=1;repaint();}}}//按钮事件监听器内部类 class MybuttonListener  implements ActionListener{public void actionPerformed(ActionEvent e) {if(e.getSource()==restart) {restartGame();}if(e.getSource()==withdraw) {goback();}if(e.getSource()==exit) {System.exit(0);  }}}
}

JAVA五子棋单机版相关推荐

  1. JAVA 实现《五子棋单机版》游戏

    前言 五子棋是世界智力运动会竞技项目之一,是一种两人对弈的纯策略型棋类游戏,是世界智力运动会竞技项目之一,通常双方分别使用黑白两色的棋子,下在棋盘直线与横线的交叉点上,先形成5子连线者获胜. 棋具与围 ...

  2. java实现单机版和网络对战版五子棋

    java实现单机版和网络对战版五子棋,功能包括计时.悔棋.聊天.显示双方状态等等. 选择com.fivechess.view中的SelectMenu.java开始游戏,效果如图: (1)单机版 点击& ...

  3. java五子棋实训训心得,java五子棋实习报告

    java五子棋实习报告 Java 程序设计基础 实习报告 课程名称 Java 程序设计基础 实习题目 java 五子棋 专 业 班 级 学 号 学生姓名 指导教师 Java 实习报告 一.一.J JA ...

  4. Java五子棋最全教程

    Java五子棋最全教程 Ps:首先当我们做一个项目时应该培养这样一种思维即这个项目怎么开展,分为哪几个功能,这每个功能又该分为哪几步去实现,只有确定了基本路线,才有利于我们设计程序的基本结构,也让我们 ...

  5. Java五子棋Ai-权值法

    Java五子棋Ai-权值法 一. 什么是权值法? 二.实现权值法Ai会面临的问题 1.如何表达棋盘上未下处的横竖斜的棋子情况?(类似01120) 2.如何将未下处的横竖斜情况和权值联系起来?(Hash ...

  6. 网页版JS游戏五子棋单机版也可以改版成网络版

    网页版JS游戏五子棋单机版也可以改版成网络版 2个文件,界面wuziqi.html   脚本wuziqi.js 新手可以去我下载中心下, <!DOCTYPE html> <html ...

  7. 递归算法棋子移动java,java五子棋实习报告

    java五子棋实习报告 Java 程序设计基础 实习报告 课程名称 Java 程序设计基础 实习题目 java 五子棋 专 业 班 级 学 号 学生姓名 指导教师 Java 实习报告 一.一.J JA ...

  8. java五子棋游戏源代码_Java实现五子棋游戏的完整代码

    用Java编写简单的五子棋,供大家参考,具体内容如下 前言 这两天在空闲时间做了个五子棋项目,分享给大家看一下,界面是这样的: 界面很丑我知道,本人虽有几年PS基础,但知识浅薄,审美观不尽人意,做到如 ...

  9. java五子棋源代码文件,Java 网络版五子棋(含源代码)

    [实例简介] Java 五子棋 网络版 聊天 源代码 悔棋 认输 Swing [实例截图] [核心代码] Javaswing网络版五子棋 └── Java五子棋程序 ├── 11.jpg ├── 1. ...

最新文章

  1. uva455periodic strings周期串
  2. Javascript如何判断对象是否相等
  3. 一天一个C++程序(六)
  4. python:更改pip源
  5. linux配置https
  6. java 文件上传 大小_java 上传文件大小转换为 GB/MB/KB/B
  7. ngrok 代理访问
  8. 再问:支付宝即时到账集成接口!
  9. Atitit.软件仪表盘(8)--os子系统--资源占用监测
  10. C++ 线程安全的单例模式总结
  11. springboot整合aceadmin
  12. centos安装udp,tcp的测试工具
  13. MATLAB学习:解一阶常系数微分方程
  14. 《游戏引擎架构》信息总汇
  15. 修复双系统的windows启动项找不到问题
  16. Android桌面插件宽度,android 屏幕适配插件
  17. golang操作chromedp模拟浏览器基础入门
  18. 腾达路由器怎么设置网站服务服务器,腾达(Tenda)-无线路由器如何设置上网?
  19. 华为鸿蒙OS精品资料汇总,持续更新中
  20. window下nginx实现图片缩放实操

热门文章

  1. 无人机基础知识:多旋翼无人机系统基本组成
  2. 三极管-【设计】三极管的功用-晶体管的电流放大作用
  3. 原生JS实现俄罗斯方块
  4. 2、phpstudy本地搭建网站
  5. 关闭无限局域网配置服务器,无线局域网无线控制器MAC地址过滤配置实例-Cisco.PDF...
  6. 2003-2019年各省数据GDP、人均GDP、城镇化率、年末人口数、人口自然增长率
  7. 不可不学的摄影技巧之一(构图)
  8. Gala Games 推出最新的 3 款新游戏。
  9. php比价源码,定稿毕业论文基于PHP的家电在线比价系统设计与实现喜欢就下吧(资料4)...
  10. 菜孔孔学python-Day03 冲鸭