当前位置: 首页 > 编程笔记 >

java实现单人版五子棋游戏

苏硕
2023-03-14
本文向大家介绍java实现单人版五子棋游戏,包括了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有所帮助。

 类似资料:
  • 本文向大家介绍java实现单机版五子棋,包括了java实现单机版五子棋的使用技巧和注意事项,需要的朋友参考一下 这个小游戏是我和我姐们儿的JAVA课程设计,也是我做的第一个JAVA项目,适合初学者,希望能帮到那些被JAVA课设所困扰的孩纸们~~~ 一、该游戏需要实现 1、设计主框架,界面。 2、利用ActionListener接口实现按钮事件的监听。 3、重新开始功能的实现。 4、悔棋功能的实现。

  • 本文向大家介绍Java棋类游戏实践之单机版五子棋,包括了Java棋类游戏实践之单机版五子棋的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了java实现的五子棋游戏代码,分享给大家供大家参考,具体代码如下 一、实践目标     1.掌握JavaGUI界面设计        2.掌握鼠标事件的监听(MouseListener,MouseMotionListener) 二、实践内容      

  • 本文向大家介绍java实现五子棋小游戏,包括了java实现五子棋小游戏的使用技巧和注意事项,需要的朋友参考一下 java实现五子棋小游戏 演示图: 以上所述就是本文的全部内容了,希望能够对大家熟练掌握java有所帮助。

  • 本文向大家介绍java Swing实现五子棋游戏,包括了java Swing实现五子棋游戏的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了java实现五子棋项目,供大家参考,具体内容如下 运行结果 视频经过压缩画质略显粗糙。 标题 1)绘制网格棋盘: 重写JPanel的paint(Graphics g)方法,绘制16*16网格。 如图: 2)代码如下(仅包含部分代码): 具体运行效果

  • 本文向大家介绍java GUI实现五子棋游戏,包括了java GUI实现五子棋游戏的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了java实现五子棋游戏GUI,供大家参考,具体内容如下 引用包 前期预设 设置背景板 主要框架段落 判断是否满了 判断是否赢了 和八皇后有点像,可以考虑那种数组优化四个方向,这里比较懒 设置棋子 导入图片 游戏结束的锁定与弹窗 其他棋子信息 图片显示 以上

  • 本文向大家介绍javafx实现五子棋游戏,包括了javafx实现五子棋游戏的使用技巧和注意事项,需要的朋友参考一下 需求描述 一个五子棋游戏,能实现双方黑白对决,当一方获胜时给出提示信息,利用GUI界面实现 项目结构如下图 一、实体 FiveChess类 提供五子棋实体包含的所有信息 判断游戏是否结束 play方法改变chess[][]棋盘中的数据 二、视图 ChessPane类继承Pane类实现