java实现单人版五子棋游戏

 更新时间:2022年05月04日 14:43:59   投稿:lijiao  
这篇文章主要为大家详细介绍了java实现五子棋小游戏的相关资料,十分简单实用,有不错的参考借鉴价值,推荐给大家,需要的朋友可以参考下

本文实例讲述了java实现的五子棋游戏代码,分享给大家供大家参考,具体代码如下

package gyb.exam;
 
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
 
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.border.TitledBorder;
 
public class MainFrame extends JFrame{
 private static int BIG=15;
 private static final int ONE=25;
 private static final int START=10;
 private static int X=BIG*START/2;
 private static int Y=BIG*START/2;
 private int HL=BIG*ONE+START;
 private static boolean isBlack;
 CanvasFrame canvas=new CanvasFrame();
 CanvasFrame can;
 Graphics g;
 public MainFrame(){
  init();
 }
 private Point point;
 private ArrayList<Point> blacklist=new ArrayList<Point>();
 private ArrayList<Point> whitelist=new ArrayList<Point>();
 private void init() {
  JMenuBar bar=new JMenuBar();
  setJMenuBar(bar);
  setSize(600,600);
  setTitle("五子棋");
  JMenu menu=new JMenu("game");
  bar.add(menu);
  JMenuItem start=new JMenuItem("start");
  JMenuItem end=new JMenuItem("棋盘大小");
  end.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent e) {
   }
  });
  JMenuItem renew=new JMenuItem("重新开始");
  JMenuItem exit=new JMenuItem("退出");
  exit.addActionListener(new ActionListener(){
   public void actionPerformed(ActionEvent e) {
    System.exit(0);
   }
  });
  renew.addActionListener(new ActionListener(){
   public void actionPerformed(ActionEvent e) {
    blacklist.clear();
    whitelist.clear();
   }
  });
  menu.add(start);
  menu.add(renew);
  menu.add(end);
  menu.add(exit);
  setLayout(new BorderLayout());
  add(BorderLayout.CENTER,createCenter());
  add(BorderLayout.EAST,createEast());
 }
 private boolean isWin(ArrayList<Point> list){
  int x;
  int y;
  int idx=0;
  loop:for (Point p : list) {
   x=p.x;
   y=p.y;
   idx=0;
   while(list.contains(new Point(x,y))){
    idx++;
    x=x-ONE;
    if(idx==5)
     break loop;
   }
   x=p.x;
   y=p.y;
   idx=0;
   while(list.contains(new Point(x,y))){
    idx++;
    y=y-ONE;
    if(idx==5)
     break loop;
   }
   x=p.x;
   y=p.y;
   idx=0;
   while(list.contains(new Point(x,y))){
    idx++;
    x=x-ONE;
    y=y-ONE;
    if(idx==5)
     break loop;
   }
   x=p.x;
   y=p.y;
   idx=0;
   while(list.contains(new Point(x,y))){
    idx++;
    x=x-ONE;
    y=y+ONE;
    if(idx==5)
     break loop;
   }
  }
  return idx==5;
 }
  
 private JPanel createEast() {
  JPanel pane=new JPanel();
  BorderLayout border=new BorderLayout();
  pane.setLayout(border);
  pane.setBorder(new TitledBorder("五子棋"));
   
  Icon image=new ImageIcon(getClass().getResource("mm.png"));
  pane.add(BorderLayout.NORTH,new JLabel(image,JLabel.CENTER));
  pane.add(BorderLayout.CENTER,ballColor());
  pane.add(BorderLayout.SOUTH,button());
  return pane;
 }
 
 private JPanel ballColor() {
  JPanel pane=new JPanel();
   
  pane.setLayout(new BorderLayout());
  can=new CanvasFrame(){
   public void paint(Graphics g){
    g.setColor(Color.PINK);
    g.fillRect(1, 1,200,300);
    g.setFont(new Font("sans",Font.BOLD,20));
    g.setColor(Color.BLACK);
    g.fillOval(55, 20,25,30);
    g.drawString("黑子", 10, 43);
    g.setColor(Color.WHITE);
    g.fillOval(55, 60,25,30);
    g.drawString("白子", 10, 83);
    if(isBlack){
     g.setColor(Color.BLACK);
     g.drawString("黑方落子", 5, 120);
    }else{
     g.setColor(Color.WHITE);
     g.drawString("白方落子",5,120);
    }
    can.repaint();
   }
  };
  pane.add(BorderLayout.CENTER,can);
  return pane;
 }
 
 private JPanel button() {
  JPanel pane=new JPanel();
  BorderLayout bor=new BorderLayout();
  JButton start=new JButton("开始");
  JButton end=new JButton("结束");
  end.addActionListener(new ActionListener(){
   public void actionPerformed(ActionEvent e) {
    System.exit(0);
   }});
  pane.setLayout(bor);
  bor.setVgap(5);
  pane.setBorder(new TitledBorder(""));
  pane.add(BorderLayout.NORTH,start);
  pane.add(BorderLayout.SOUTH,end);
  return pane;
 }
 
 private JPanel createCenter() {
  JPanel pane=new JPanel();
  canvas.setPreferredSize(new Dimension(HL+10,HL+10));
  canvas.addMouseListener(new MouseAdapter() {
   public void mouseClicked(MouseEvent e){
    loop:if(e.getButton()==MouseEvent.BUTTON1){
      X=e.getX();
      Y=e.getY();
      int x=(X/ONE)*ONE;
      int y=(Y/ONE)*ONE;
      point=new Point(x,y);
       
      if(!(blacklist.contains(point)||whitelist.contains(point))){
       if(isBlack){
        blacklist.add(point);
        if(isWin(blacklist)){
         JOptionPane.showMessageDialog(null, "黑方胜利!");
         blacklist.clear();
         whitelist.clear();
        }
       }else{
        whitelist.add(point);
        if(isWin(whitelist)){
         JOptionPane.showMessageDialog(null, "白方胜利!");
         blacklist.clear();
         whitelist.clear();
        }
       }
      }
      else{
       JOptionPane.showMessageDialog(null, "这里己有子了,换个地方落子吧!");
       break loop;
      }
     canvas.repaint();
     isBlack=!isBlack;
    }
    
   }
  });
  pane.add(canvas);
  return pane;
 }
 
 public static void main(String[] args) {
  MainFrame frame=new MainFrame();
  frame.center(frame);
  frame.pack();
   
  frame.setVisible(true);
 }
 public void center(JFrame frame){
  //Toolkit 是当前 绘图系统集合工具包
  Toolkit toolkit=Toolkit.getDefaultToolkit();
  Dimension screen=toolkit.getScreenSize();//屏幕的宽高
  int frameWidth=frame.getWidth();
  int frameHigh=frame.getHeight();
  int x=(screen.width-frameWidth)/2;
  int y=(screen.height-frameHigh)/2;
  frame.setLocation(x, y);
 }
 class CanvasFrame extends JPanel {
  public void paint(Graphics g){
   g.setColor(Color.PINK);
   g.fillRect(0, 0, HL+20, HL+20);
   g.setColor(Color.BLACK);
   for(int i=START;i<=HL;i=i+ONE){
    for(int j=START;j<=HL;j=j+ONE){
     g.drawLine(i, j, HL, j);
    }
   }
   for(int i=START;i<=HL;i=i+ONE){
    for(int j=START;j<=HL;j=j+ONE){
     g.drawLine(i, j, i, HL);
    }
   }
   g.setColor(Color.YELLOW);
   g.drawRect(START/2, START/2, HL+1, HL+1);
   g.setColor(Color.BLACK);
   for(Point point : blacklist){
    g.fillOval(point.x, point.y, 20, 25);
   }
   g.setColor(Color.WHITE);
   for(Point point : whitelist){
    g.fillOval(point.x, point.y, 20, 25);
   }
  }
 }
}

效果图:

以上所述就是本文的全部内容了,希望能够对大家熟练掌握java有所帮助。

相关文章

  • Maven setting配置镜像仓库的方法步骤

    Maven setting配置镜像仓库的方法步骤

    这篇文章主要介绍了Maven setting配置镜像仓库的方法步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12
  • 解决InputStream.available()获取流大小问题

    解决InputStream.available()获取流大小问题

    这篇文章主要介绍了解决InputStream.available()获取流大小问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • IDEA中关于enter键换行的问题

    IDEA中关于enter键换行的问题

    这篇文章主要介绍了IDEA中关于enter键换行的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • java调用远程服务器的shell脚本以及停止的方法实现

    java调用远程服务器的shell脚本以及停止的方法实现

    这篇文章主要介绍了java调远程服务器的shell脚本以及停止的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • 详解JAVA如何实现乐观锁以及CAS机制

    详解JAVA如何实现乐观锁以及CAS机制

    悲观锁和乐观锁其实本质都是一种思想,在JAVA中对于悲观锁的实现大家可能都很了解,可以通过synchronized、ReentrantLock加锁实现,本文不展开讲解了。那么乐观锁在JAVA中是如何实现的呢?底层的实现机制又是什么呢?本文就来和大家详细讲讲
    2022-12-12
  • Java 十大排序算法之堆排序刨析

    Java 十大排序算法之堆排序刨析

    堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下堆结构
    2021-11-11
  • Java使用JSONObject需要的6个jar包下载地址

    Java使用JSONObject需要的6个jar包下载地址

    这篇文章主要介绍了Java使用JSONObject需要的6个jar包下载地址,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • java并发编程专题(三)----详解线程的同步

    java并发编程专题(三)----详解线程的同步

    这篇文章主要介绍了JAVA并发编程 线程同步的的相关资料,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-06-06
  • Java synchronized关键_动力节点Java学院整理

    Java synchronized关键_动力节点Java学院整理

    在java中,每一个对象有且仅有一个同步锁。这也意味着,同步锁是依赖于对象而存在。下面通过本文给大家介绍synchronized原理 及基本规则,感兴趣的朋友一起学习吧
    2017-05-05
  • 一文搞懂Spring Security异常处理机制

    一文搞懂Spring Security异常处理机制

    这篇文章主要为大家详细介绍一下Spring Security异常处理机制,文中的示例代码讲解详细,对我们学习Spring Security有一定帮助,感兴趣的可以学习一下
    2022-07-07

最新评论