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有所帮助。