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

(0)

相关推荐

  • java基于swing实现的五子棋游戏代码

    本文实例讲述了java基于swing实现的五子棋游戏代码.分享给大家供大家参考. 主要功能代码如下: 复制代码 代码如下: import java.awt.*; import javax.swing.*; import java.awt.event.*; public class Main extends JFrame implements ActionListener{         private static final long serialVersionUID = 1L;      

  • Java棋类游戏实践之中国象棋

    本文实例讲述了java实现的中国象棋游戏代码,分享给大家供大家参考,具体代码如下 一.实践目的: 1.鼠标点击.拖动等事件的应用与区别 2.棋谱文件的保存与读取 3.完善象棋的规则. 二.实践内容: 中国象棋历史悠久,吸引了无数的人研究,现对中国象棋的对战和实现棋谱的制作做如下的设计和说明,供大家参考学习. 1.机机对弈,红方先手.在符合规则的情况下拖动棋子到目的地,松鼠标落子. 人人对弈图 2.制作棋谱,选择制作棋谱菜单后,对弈开始,并记录了下棋过程. 选择"制作棋谱"菜单 棋谱制作

  • java实现五子棋小游戏

    java实现五子棋小游戏 package Gomoku; import java.awt.Toolkit; import javax.swing.JFrame; public class GomokuFrame extends JFrame { //定义一个操作面板 OperatorPane op=null; public GomokuFrame() { //设置名称 this.setTitle("五子棋"); //设置窗口大小 this.setSize(510,510); //设置窗

  • Java swing五子棋的实现方法

    今天给大家介绍一下如何用Java swing实现五子棋的开发即用Java开发图形界面程序五子棋,代码由于太多,只贴部分,最下面会附上下载地址,废话不多说,下面我们先看一下运行结果: 接下来我们看代码: 首先是创建主frame框架界面: package org.liky.game.frame; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Toolkit; import

  • Java棋类游戏实践之单机版五子棋

    本文实例讲述了java实现的五子棋游戏代码,分享给大家供大家参考,具体代码如下 一.实践目标        1.掌握JavaGUI界面设计        2.掌握鼠标事件的监听(MouseListener,MouseMotionListener) 二.实践内容       设计一个简单的五子棋程序,能够实现五子棋下棋过程.如下图所示 1.五子棋棋盘类 package cn.edu.ouc.fiveChess; import java.awt.Color; import java.awt.Curs

  • 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.

  • Java实现两人五子棋游戏(三) 画出棋子

    上一篇文章讲的是Java实现两人五子棋游戏(二) 画出棋盘,已经画好棋盘,接下来要实现控制功能,主要功能: 1)选择棋子 2)画棋子 3)判断胜负 4)交换行棋方 先实现画棋子PART -------------画棋子代码示例如下-------------- 首先,定义一个棋子类,这个类有两个属性,棋子颜色(0-表示黑色,1-表示白色),是否落子(我计划用一个二维数组才存储棋子的落子信息) Chessman.java package xchen.test.simpleGobang; public

  • Java实现两人五子棋游戏(二) 画出棋盘

    本文为大家分享了java画出五子棋游戏棋盘的方法,供大家参考,具体内容如下 棋盘模块: 画五子棋棋盘:19条横线.19条竖线 步骤一:显示棋盘 我有一张名为chessboard.png的棋盘,位置为根目录/res/drawable/chessboard/png,现在我要显示这张图片. DrawChessBoard.java package xchen.test.simpleGobang; import java.awt.Graphics; import java.awt.Image; impor

  • Java实现两人五子棋游戏(七) 屏幕提示信息

    之前的两篇文章:Java实现两人五子棋游戏(二) 画出棋盘:Java实现两人五子棋游戏(三) 画出棋子:Java实现两人五子棋游戏(四) 落子动作的实现:Java实现两人五子棋游戏(六) 行棋方变换,可以点击查看. 接下来我们要实现的功能是在有五连珠的时候,在屏幕上提示信息.直接在mousePressed函数的isWin部分使用showMessageDialog即可. mousePressed函数代码如下: @Override //当用户按下鼠标按钮时发生 public void mousePr

  • Java实现两人五子棋游戏(六) 行棋方变换

    之前的两篇文章:Java实现两人五子棋游戏(二) 画出棋盘:Java实现两人五子棋游戏(三) 画出棋子:Java实现两人五子棋游戏(四) 落子动作的实现,可以点击查看. 前面我们已经画好棋盘和棋子,并可以自由落子,且可以判断棋盘中是否有五连珠.接下来的工作是,每次落子后交换行棋方(即将下一棋子颜色由白->黑或黑->白),并将胜出判断增加颜色判断条件(棋盘上存在五连珠->棋盘上存在同色的五连珠). 主模块Main.java和棋子类Chessman.java不变,我们要对DrawChessB

  • Java实现两人五子棋游戏(五) 判断是否有一方胜出

    之前的两篇文章:Java实现两人五子棋游戏(二) 画出棋盘:Java实现两人五子棋游戏(三) 画出棋子:Java实现两人五子棋游戏(四) 落子动作的实现,可以点击查看. 前面我们已经画好了棋盘.棋子并且可以自由的落子了,那么接下来要实现的功能是判断是否有五连珠(暂时不考虑行棋方). 我们采用遍历棋盘已经落子的位置,查看每个落子点,在它的上下,左右,左下右上,左上右下四个方向的任一方向上是否有五个连续的棋子. 第一步,对棋子类进行改造,之前我们的棋子类只有颜色信息和落子状态,现在要新增一个int型

  • Java实现两人五子棋游戏(四) 落子动作的实现

    之前的两篇文章:Java实现两人五子棋游戏(二) 画出棋盘:Java实现两人五子棋游戏(三) 画出棋子 前面,我们已经画好的棋盘和棋子,接下来,我们要通过鼠标点击屏幕获取落子位置并落子(先不考虑行棋方和胜负判断). 步骤: 1)捕捉鼠标按下的位置 2)经过坐标变换(由像素位置->0-19的棋盘位置) 3)更新记录棋盘状态的二维数组 4)重新渲染绘制棋盘. -------------落子动作代码示例如下-------------- 一个棋子类Chessman.java package xchen.

  • 利用java开发简易版扫雷游戏

    1.简介 学了几周的Java,闲来无事,写个乞丐版的扫雷,加强一下Java基础知识. 2.编写过程 编写这个游戏,一共经历了三个阶段,编写了三个版本的游戏代码. 第一版:完成了扫雷游戏的基本雏形,实现了游戏的基本功能,游戏运行在cmd黑窗口中,以字符绘制游戏界面,无图形化窗口,通过控制台输入字符完成游戏控制.代码放置在一个java文件中,代码的可读性以及可扩展性都比较差. 第二版:在第一版实现基本功能的基础之上,对游戏代码进行重构,根据各部分的功能创建多个类,增加代码注释,提高代码的可读性以及可

  • JavaScript实现网页版五子棋游戏

    本文实例为大家分享了JavaScript实现网页版五子棋游戏的具体代码,供大家参考,具体内容如下 学习js的第三天,跟着老师完成的五子棋小游戏,记录学习成果欢迎大佬们一起分享经验,批评指正. 本程序主要通过三部分实现: 1.棋盘绘制 2.鼠标交互 3.输赢判断 <!DOCTYPE html> <html> <head> <title> canvastest </title> </head> <body> <h1>

  • Java+Swing实现经典五子棋游戏

    目录 前言 主要需求 主要设计 功能截图 代码实现 总结 前言 五子棋是世界智力运动会竞技项目之一,是一种两人对弈的纯策略型棋类游戏,是世界智力运动会竞技项目之一,通常双方分别使用黑白两色的棋子,下在棋盘直线与横线的交叉点上,先形成5子连线者获胜. 棋具与围棋通用,起源于中国上古时代的传统黑白棋种之一.主要流行于华人和汉字文化圈的国家以及欧美一些地区,是世界上最古老的棋. 容易上手,老少皆宜,而且趣味横生,引人入胜:不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性. 用java语言实现

随机推荐