五子棋(极简版)

简介: 简单五子棋

简单五子棋

棋盘棋子

public void paint(Graphics g) {
    super.paint(g);   //super 相当于是指向当前对象的父类
    //画棋盘
    for(int i=0;i<15;i++) {
        g.setColor(Color.blue);
        g.drawLine(30, 150+i*30, 450, 150+i*30);
        g.drawLine(30+i*30, 150, 30+i*30, 570);
      }
    //画棋子
    for(int i=0;i<15;i++)     //进行了一次遍历,遍历 chess[][]!=0.画下棋子
      for(int j=0;j<15;j++) {
      if(allChess[i][j]==1) {
        int ovalX=i*30+20;
        int ovalY=j*30+140;
        g.setColor(Color.black);
        g.fillOval(ovalX,ovalY , 20, 20);
        g.drawOval(ovalX,ovalY , 20, 20);
      } 
      if(allChess[i][j]==2) {
        int ovalX=i*30+20;
        int ovalY=j*30+140;
        g.setColor(Color.white);
        g.fillOval(ovalX,ovalY , 20, 20);
        g.drawOval(ovalX,ovalY , 20, 20);
      } 
    }
  }

鼠标监听

public void mousePressed(MouseEvent e) {
    if(canPlay) {
      x=e.getX();
      y=e.getY();
      if(x>=20 && x<=460 && y>=160 && y<=580) {//判断是否超出棋盘范围
        x=(int)(x/30.0-0.5);
        y=(int)((y-120)/30.0-0.5);//因为要下在相交处,四舍五入确定精度
        if(allChess[x][y]==0) {
          if(isblack) {         
            allChess[x][y]=1;                                                            
            isblack=false;//判定是下哪个棋子
          }
          else {
            allChess[x][y]=2;
            isblack=true;
          }
          this.repaint();//重绘
          if(isWin()) {
            if(allChess[x][y]==1) JOptionPane.showMessageDialog(this, "黑方获胜");
            else          JOptionPane.showMessageDialog(this, "白方获胜");
            this.canPlay=false;//不能下了
          }
        }
      }
      }
    }

判定

  public boolean isWin() {
    boolean flag=false;
    int count=1;
    //四种判定
    //1
    count=checkCount(0, 1, allChess[x][y]);
        if(count==5) flag=true;
        //2
    count=checkCount(1, 0, allChess[x][y]);
        if(count==5) flag=true;
        //3
    count=checkCount(1, 1, allChess[x][y]);
        if(count==5) flag=true;
        //4
    count=checkCount(1, -1, allChess[x][y]);
        if(count==5) flag=true;
    return flag;
  }
  public int checkCount(int xChange,int yChange,int color) {
    int count=1;
    int tX=xChange;
    int tY=yChange;
    while(x+xChange>=0&&x+xChange<=15&&y+yChange>=0&& 
        y+yChange<=15&& color==allChess[x+xChange][y+yChange]) //防止数组越界
    {
      count++;
      if(xChange!=0)  xChange++;
      if(yChange!=0) {
        if(yChange>0) yChange++;
        else  yChange--;
      }   //半边的判断
    }
    xChange=tX;
    yChange=tY;//之所以不用传过来的数据又定义了一个,是防止自加自减出现错误
    while(x-xChange>=0&& x-xChange<15&&y-yChange>=0&&
        y-yChange<15&&color==allChess[x-xChange][y-yChange])
    {
      count++;
      if(xChange!=0)  xChange++;
      if(yChange!=0) {
        if(yChange>0) yChange++;
        else  yChange--;
      }   //半边的判断
    }
    return count;
  }

这是一个极简版的五子棋,不能人人,无悔棋,认输等按钮,只能下棋,以后或许会改进的,接下来上源码

package chess;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
//界面
public class MyChess extends JFrame implements MouseListener{
  /**
   * 
   */
  private static final long serialVersionUID = 1L;
  int [][] allChess=new int [15][15]; //把棋子放进数组中
  int x,y;            //用getX()获得 鼠标点击的坐标
  boolean canPlay=true; //判断是否能下
  boolean isblack=true; //判断是否应该改下黑棋子
  int i,j;
  public MyChess(){
    this.setTitle("五子棋");
    this.setSize(600,600);
    this.setLocation(300, 300);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setResizable(false);         //设置窗口不可改变
    this.getContentPane().setBackground(Color.orange);  //设置窗口的背景颜色
    this.setVisible(true);
    this.repaint();
    this.addMouseListener(this);
  }
  public void paint(Graphics g) {
    super.paint(g);   //super 相当于是指向当前对象的父类
    //画棋盘
    for(int i=0;i<15;i++) {
        g.setColor(Color.blue);
        g.drawLine(30, 150+i*30, 450, 150+i*30);
        g.drawLine(30+i*30, 150, 30+i*30, 570);
      }
    //画棋子
    for(int i=0;i<15;i++)     //进行了一次遍历,遍历 chess[][]!=0.画下棋子
      for(int j=0;j<15;j++) {
      if(allChess[i][j]==1) {
        int ovalX=i*30+20;
        int ovalY=j*30+140;
        g.setColor(Color.black);
        g.fillOval(ovalX,ovalY , 20, 20);
        g.drawOval(ovalX,ovalY , 20, 20);
      } 
      if(allChess[i][j]==2) {
        int ovalX=i*30+20;
        int ovalY=j*30+140;
        g.setColor(Color.white);
        g.fillOval(ovalX,ovalY , 20, 20);
        g.drawOval(ovalX,ovalY , 20, 20);
      } 
    }
  }
  public void mousePressed(MouseEvent e) {
    if(canPlay) {
      x=e.getX();
      y=e.getY();
      if(x>=20 && x<=460 && y>=160 && y<=580) {//判断是否超出棋盘范围
        x=(int)(x/30.0-0.5);
        y=(int)((y-120)/30.0-0.5);//因为要下在相交处,四舍五入确定精度
        if(allChess[x][y]==0) {
          if(isblack) {
            allChess[x][y]=1;                                                                                     
            isblack=false;//判定是下哪个棋子
          }
          else {
            allChess[x][y]=2;
            isblack=true;
          }
          this.repaint();//重绘
          if(isWin()) {
            if(allChess[x][y]==1) JOptionPane.showMessageDialog(this, "黑方获胜");
            else          JOptionPane.showMessageDialog(this, "白方获胜");
            this.canPlay=false;//不能下了
          }
        }
      }
      }
    }
  public boolean isWin() {
    boolean flag=false;
    int count=1;
    //四种判定
    //1
    count=checkCount(0, 1, allChess[x][y]);
        if(count==5) flag=true;
        //2
    count=checkCount(1, 0, allChess[x][y]);
        if(count==5) flag=true;
        //3
    count=checkCount(1, 1, allChess[x][y]);
        if(count==5) flag=true;
        //4
    count=checkCount(1, -1, allChess[x][y]);
        if(count==5) flag=true;
    return flag;
  }
  public int checkCount(int xChange,int yChange,int color) {
    int count=1;
    int tX=xChange;
    int tY=yChange;
    while(x+xChange>=0&&x+xChange<=15&&y+yChange>=0&& 
        y+yChange<=15&& color==allChess[x+xChange][y+yChange]) //防止数组越界
    {
      count++;
      if(xChange!=0)  xChange++;
      if(yChange!=0) {
        if(yChange>0) yChange++;
        else  yChange--;
      }   //半边的判断
    }
    xChange=tX;
    yChange=tY;//之所以不用传过来的数据又定义了一个,是防止自加自减出现错误
    while(x-xChange>=0&& x-xChange<15&&y-yChange>=0&&
        y-yChange<15&&color==allChess[x-xChange][y-yChange])
    {
      count++;
      if(xChange!=0)  xChange++;
      if(yChange!=0) {
        if(yChange>0) yChange++;
        else  yChange--;
      }   //半边的判断
    }
    return count;
  }
  @Override
  public void mouseClicked(MouseEvent e) {
    // TODO Auto-generated method stub
  }
  @Override
  public void mouseReleased(MouseEvent e) {
    // TODO Auto-generated method stub
  }
  @Override
  public void mouseEntered(MouseEvent e) {
    // TODO Auto-generated method stub
  }
  @Override
  public void mouseExited(MouseEvent e) {
    // TODO Auto-generated method stub
  }
  public static void main(String[] args) {
    new MyChess();
  }
}
相关文章
|
存储 安全 Unix
一文带你了解服务器!
一文带你了解服务器!
1710 1
|
存储 弹性计算 网络安全
|
监控
阿里云应用性能管理(APM)产品-应用实时监控服务(ARMS)技术解密 资料下载
直播大纲 1. 应用性能管理(APM)背景介绍 2. 分布式链路追踪的现状与使用场景 3. ARMS分布式链路追踪的技术实现 4. 最佳实践 (1) 全息排查+场景链路(2) 前端监控与应用监控融合(3) ARMS与K8S的融合与实践 专家介绍 阳其凯(逸陵),阿里巴巴高级开发工程师,2016年加入阿里巴巴Eageleeye团队,多年实时计算平台与APM产品开发经验,目前主要负责云产品业务实时监控服务(ARMS)与链路追踪(Tracing Analysis)的研发工作。
13482 0
|
Java Linux Maven
java依赖冲突解决问题之容器加载依赖jar包如何解决
java依赖冲突解决问题之容器加载依赖jar包如何解决
|
10月前
|
Perl
|
Java
Java编程:基于socket实现局域网双人联机对战五子棋
Java编程:基于socket实现局域网双人联机对战五子棋
1287 0
Java编程:基于socket实现局域网双人联机对战五子棋
|
Rust 安全 开发者
Rust 问题之Rust-analyzer 提供了哪些功能来辅助编写 Rust 代码
Rust 问题之Rust-analyzer 提供了哪些功能来辅助编写 Rust 代码
305 0
|
存储 算法 安全
Linux命令sha512sum详解
`sha512sum`是Linux中用于计算文件SHA-512哈希值的工具,确保数据完整性和安全。它生成的128字符哈希对微小内容变化敏感,不可逆。命令行用法如`sha512sum [-bc] 文件名`,-b处理二进制,-c检查哈希匹配。可用于文件完整性验证、软件分发检查。例如,`sha512sum file.txt`计算哈希,`sha512sum -c checksums.txt`验证文件。注意哈希值长度和安全性限制。
|
Java Linux Windows
记一次排查循环依赖的经历
记一次排查循环依赖的经历
Java课程大作业设计:实现联网对战、实时聊天、多线程编程的五子棋项目
本项目是笔者和同学大二下Java课的时候的课程设计项目,该五子棋游戏的客户端可以实现联网对战、实时聊天、自定义昵称、对在线玩家并发出对战邀请、悔棋、撤回聊天消息、逃跑等多种功能,而服务端可以看到在线玩家列表、配对玩家列表、玩家实时上线下线等功能。总的来说,功能比较齐全,代码中也有详细注解思路,是非常不错的新手入门项目。
Java课程大作业设计:实现联网对战、实时聊天、多线程编程的五子棋项目