比较难的是判断五子是否连成部分,四个方向(横、纵、左斜、右斜)

  1. 横向和纵向主要判断在同一行或者列有没有五个相同棋子;
    2.斜方向也是判断有没有五个相同棋子
    3.判断过程会有数组长度超出异常,记得捕获,否则程序不能正常运行

代码:

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;import javax.swing.JOptionPane;public class ChessGame extends Frame implements ActionListener{ChessBoard b=new ChessBoard();public ChessGame() {setBackground(Color.LIGHT_GRAY);setLayout(new BorderLayout());add("Center",b);Panel p=new Panel();Button pass=new Button("重开一局");Button color=new Button("变棋盘背景");Button fail=new Button("认输");p.setLayout(new GridLayout(8,1,10,10));//控制盘部分8行1列,间距为10p.add(new Label());//为了美观,第一行空出来p.add(pass);p.add(color);p.add(fail);add("East",p);addWindowListener(new WindowAdapter(){  //内嵌窗体关闭类    public void windowClosing(WindowEvent e){dispose();}});pass.addActionListener(this);color.addActionListener(this);fail.addActionListener(this);setSize(500,450);setVisible(true);         }public void actionPerformed(ActionEvent e) {// TODO 自动生成的方法存根if(e.getActionCommand().equals("重开一局")) {dispose();new ChessGame();}if(e.getActionCommand().equals("变棋盘背景")) {b.setBackground(Color.pink);}if(e.getActionCommand().equals("认输")) {String s="黑";if(b.player==1){s="白";}JOptionPane.showMessageDialog(b, "恭喜"+s+"棋获胜!");dispose();new ChessGame();}}public static void main(String[] args) {// TODO 自动生成的方法存根new ChessGame();}
}class ChessBoard extends Canvas{int chess[][]=new int[19][19];int sx=20,sy=20;//棋盘起始坐标int w=20;//棋格宽度int cx=200,cy=200;//游标起始位置在棋盘中部int player=1;//1是黑子先下,0是白子public ChessBoard() {this.addMouseMotionListener(new MouseMotionAdapter() {public void mouseMoved(MouseEvent e) {Graphics g=getGraphics();//如果区域是背景颜色,将按画笔颜色替换并画出图形g.setXORMode(ChessBoard.this.getBackground());g.setColor(Color.RED);g.fillRect(cx-w/4, cy-w/4, w/2, w/2);//游标矩形左上角坐标(195,195)/*使游标矩形总是定位在十字实线上如:游标指到(35,35)位置时,绘制的游标矩形中心位置为(40,40)*/if(e.getX()%20>=10) {cx=(e.getX()/10+1)*10;}else {cx=e.getX()/10*10;}if(e.getY()%20>=10) {cy=(e.getY()/10+1)*10;}else {cy=e.getY()/10*10;}/*cx=sx+(e.getX()-sx+w/2)/w*w;cy=sy+(e.getY()-sy+w/2)/w*w;*/g.fillRect(cx-w/4,cy-w/4, w/2, w/2);}});this.addMouseListener(new MouseAdapter() {public void mouseClicked(MouseEvent e) {Graphics g=getGraphics();int r=(cx-sx)/w,c=(cy-sy)/w;//r代表二维数组的行,c代表列if(chess[r][c]==0) {if(player==1) {g.setColor(Color.BLACK);chess[r][c]=1;}else {g.setColor(Color.WHITE);chess[r][c]=2;}g.fillOval(cx-w/2+1,cy-w/2+1, w-2, w-2);g.setXORMode(ChessBoard.this.getBackground());g.setColor(Color.RED);g.fillRect(cx-w/4,cy-w/4, w/2, w/2);player=(player+1)%2;String s="黑";if(player==1) {s="白";}if(success(r, c)){JOptionPane.showMessageDialog(getParent(), "恭喜"+s+"棋获胜!");repaint();}}}});   }public boolean success(int r,int c) {//判断是否五子boolean re=false;int num=1;try {for(int k=0;k<chess.length-1;k++) {//水平五子if(chess[k][c]!=0) {if (chess[k][c] == chess[k + 1][c]) {num++;if (num >= 5) {re = true;}}else {num=1;}}}num=1;for(int k=0;k<chess[r].length-1;k++) {//垂直五子if(chess[r][k]!=0) {if (chess[r][k] == chess[r][k+1]) {num++;if (num >= 5) {re = true;}}else {num=1;}}}num=1;for (int k = -chess.length; k < chess.length; k++) {// 左斜五子for (int j = 1; j < chess.length; j++) {if (((k + j) >= 0) && ((k + j) < chess.length)) {if (chess[j][j + k] != 0) {if (chess[j][k + j] == chess[j + 1][k + j + 1]) {num++;if (num >= 5) {re = true;}}else {num=1;}}}}}num=1;for (int k = 0; k < chess.length*2-1; k++) {// 右斜五子for (int j = 1; j < chess.length; j++) {if (((k - j) >= 0) && ((k - j) < chess.length)) {if(chess[j][k-j]!=0){if(chess[j][k-j]==chess[j-1][k-j+1]){num++;if (num >= 5) {re = true;}}else {num=1;}}}}}}catch (ArrayIndexOutOfBoundsException e) {// TODO: handle exceptionreturn re;}return re;}public void paint(Graphics g) {for(int k=0;k<19;k++) {g.drawLine(sx, sy+k*w, sx+w*18, sy+k*w);}for(int k=0;k<19;k++){g.drawLine(sx+k*w, sy, sx+k*w, sy+w*18);}
/*  g.setXORMode(this.getBackground());g.setColor(Color.RED);g.fillRect(cx-w/4,cy-w/4, w/2, w/2);*/}
}

Java 简单五子棋程序的实现相关推荐

  1. java人际对战五子棋_系统框图如下 java实现五子棋程序 可以实现人人对战 人机对战 简单功能 悔棋 认输...

    展开全部 一.实验题目 五子棋游戏e69da5e6ba9062616964757a686964616f31333365633835. 二.问题分析 五子棋是双人博弈棋类益智游戏,由围棋演变而来,属纯策 ...

  2. 基于Java实现五子棋程序

    五子棋程序实现起来逻辑不复杂,五子棋的规则也比较简单,只要5个相同颜色棋子连成一条线就说明玩家获胜. 因此实现五子棋程序主要有两个问题去解决. 1 五子棋的界面如何实现. 2 给出一个棋盘如何判断有玩 ...

  3. Java版五子棋程序

    一.实验题目 五子棋游戏. 二.问题分析 五子棋是双人博弈棋类益智游戏,由围棋演变而来,属纯策略型.棋盘通常15*15,即15行,15列,共225个交叉点,即棋子落点:棋子由黑白两色组成,黑棋123颗 ...

  4. java简单小程序加翻译_一个翻译小程序(带一点点抒情)

    博客园里有几篇关于父亲节的文章?什么狗屁的父亲节母亲节,为什么不去想想让父母天天像过节一样,为什么只有到了外国人的父亲节,母亲节才想起有个爸妈,除此在外boss比爹还亲呢. 很多人把时间都用在了自己的 ...

  5. java简单小程序_Java简易登录注册小程序

    这篇文章主要介绍了Java图形界面开发,简易登录注册小程序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 登录注册小代码,将学过的一些小知识融合在一起进行了使用,加深印象.本例中如果有注释不详细的 ...

  6. java开发五子棋程序

    背单词背累了,于是拿出大二java课程设计期末项目"开心五子棋"玩了起来,emmm,还挺好玩,现在分享给大家,具体算法等考研结束之后再仔细介绍,目前只是分享源代码,另外,程序也没有 ...

  7. JAVA简单画图程序

    1.JFrame窗体界面(JButton.Graphics.Graphics2D.Color) 创建一个Draw类,在主函数中实例化Draw类,并调用Ondraw方法 public class Dra ...

  8. java拳皇地下城_拳皇(Java简单的小程序)代码实例

    刚开始学习Java,看完老九君的视频根据他的内容敲的代码,感觉还挺有成就感的,毕竟刚学习Java. package helloasd;import java.util.*; public class ...

  9. JAVA拳皇_拳皇(Java简单的小程序)代码实例|chu

    刚开始学习Java,看完老九君的视频根据他的内容敲的代码,感觉还挺有成就感的,毕竟刚学习Java. package helloasd;import java.util.*; public class ...

最新文章

  1. python中的连续比较是什么_在python中提取连续行之间的差异
  2. 最优化算法python实现篇(4)——无约束多维极值(梯度下降法)
  3. 翻译 | ORB: An efficient alternative to SIFT or SURF(ORB:对SIFT或SURF的一种有效选择)
  4. Unity MMORPG游戏优化经验分享
  5. Effective Java之谨慎地实现Serializable(七十四)
  6. 使用 C++的第三方库 jsoncpp的步骤以及出现的问题
  7. ZOJ 3300 Mahjong DFS暴力解决。。
  8. css 弹性盒子200304
  9. 有关国土的几个重大项目
  10. 【elasticsearch系列】SpringBoot整合elasticsearch客户端
  11. java接收json字符串_JAVA后台接收前台传过来的json字符串并解析获得key 和value
  12. android 沉浸式_【沉浸式体验】投影秀科技与视觉:体验亦真亦幻的超常感受
  13. 11300001数据集配置错误_Power BI 中的数据刷新(二)
  14. lwip-2.1.3在STM32F103ZE+ENC28J60有线网卡上无操作系统移植(使用STM32 HAL库)
  15. 易语言 linux 反编译,易语言反编译工具(E-Code Explorer)
  16. iOS音乐播放器详解(MusicPlayer1.0)
  17. ndvi matlab,基于Matlab的NDVI最大合成
  18. 视频剪辑工具,视频怎样批量加背景音乐和特效
  19. 网线制作方法-RJ45
  20. WPF解决方案和项目结构

热门文章

  1. 利用这10个工具,你可以写出更好的Python代码
  2. 2月份Github上很热门的Python项目
  3. Django框架——查询集QuerySet
  4. Python3.7.3安装(Ubuntu16.04)
  5. python---之plt.subplot画图详解
  6. SQL Server链接服务器(一台机器SQL Server登陆,同时映射登陆到另外一台远程服务器的数据库)
  7. python时间复杂度和空间复杂度是指_时间复杂度和空间复杂度
  8. c malloc结构体_9.8 C++动态分配 | 存放结构体变量
  9. python爬虫文件格式_Python网络爬虫数据格式学习(转换headers、表单和urlencode数据为字典格式)...
  10. Integral Channel Features-论文整理