好久没更新博客了,最近花了一周时间,做了个单机版五子棋游戏,已经实现了棋盘界面的绘制,棋子下落等功能,就差加上判断输赢的规则了,暂且就贴上这部分代码以及效果图,以后陆续会添上后续代码,并升级为网络版五子棋,写的不好,还望各位大侠不吝赐教

package wzq1;import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;import javax.swing.*;public class StartFrame extends JFrame {private JPanel toolbar;private JMenuBar menuBar;private JMenu sysMenu;private JMenuItem startMenuItem;private JMenuItem exitMenuItem;private JMenuItem backMenuItem;private JButton btnStart;private JButton btnBack;private JButton btnExit;public StartFrame(){//设置标题setTitle("单机版五子棋");//创建菜单栏menuBar=new JMenuBar();//创建和添加菜单sysMenu=new JMenu("系统");startMenuItem =new JMenuItem("重新开始");exitMenuItem =new JMenuItem("退出");backMenuItem =new JMenuItem("悔棋");sysMenu.add(startMenuItem);sysMenu.add(backMenuItem);sysMenu.add(exitMenuItem);MyItemListener lis=new MyItemListener(); //将3个菜单项添加到菜单上startMenuItem.addActionListener(lis);backMenuItem.addActionListener(lis);exitMenuItem.addActionListener(lis);//将“系统”菜单加到菜单栏上menuBar.add(sysMenu);//设置此窗体的菜单栏setJMenuBar(menuBar);//工具栏面板实例化toolbar=new JPanel();//初始化3个按钮btnStart=new JButton("重新开始");btnBack=new JButton("悔棋");btnExit=new JButton("退出");//将工具栏面板按钮设置为FlowLayout布局toolbar.setLayout(new FlowLayout(FlowLayout.LEFT));//将3个按钮添加到工具面板上toolbar.add(btnStart);toolbar.add(btnBack);toolbar.add(btnExit);//将工具面板布局到界面“南”方add(toolbar,BorderLayout.SOUTH);//将3个按钮注册到事件监听器上btnStart.addActionListener(lis);btnBack.addActionListener(lis);btnExit.addActionListener(lis);setDefaultCloseOperation(EXIT_ON_CLOSE);setSize(500,550);//pack();ChessBoard chessBoard=new ChessBoard();add(chessBoard,BorderLayout.CENTER);}//内部类public class MyItemListener implements ActionListener{@Overridepublic void actionPerformed(ActionEvent e) {//获取事件源Object obj=e.getSource();if(obj==StartFrame.this.startMenuItem||obj==btnStart){System.out.println("重新开始");}else if(obj==backMenuItem||obj==btnBack){System.out.println("悔棋");}else if(obj==exitMenuItem||obj==btnExit){System.out.println("退出");}}}public static void main(String[] args) {new StartFrame().setVisible(true);}}
package wzq1;import java.awt.Color;public class Point {private int x;private int y;private Color color;//直径public static final int DIMETER=30;public Point(int x,int y,Color color){this.x=x;this.y=y;this.color=color;}//拿到棋盘中的x索引public int getX() {return x;}//拿到棋盘中的Y索引public int getY() {return y;}//得到颜色public Color getColor() {return color;}}
package wzq1;import java.awt.Color;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;import javax.swing.JPanel;/*** * 设计棋盘* 棋盘是画在一个JPanel上,然后添加到一个JFrame上* 棋盘的坐标原点在JPanel上,所有坐标都在JPanel上,不包括JFrame没有放置JFrame的边框部分* @author zhang**/public class ChessBoard extends JPanel implements MouseListener{public static final int MARGIN=30;//边距public static final int GRID_SPAN=40;//网格距public static final int ROWS=10;//棋盘行数public static final int COLS=10;//棋盘列数int chessCount;Point[] chessList =new Point[(ROWS+1)*(COLS+1)];int xIndex,yIndex;//当前所下棋子的索引boolean isBlack=true;//默认开始是黑棋先下public ChessBoard() {setBackground(Color.ORANGE);addMouseListener(this);//this指代调用addMouseListener方法的ChessBoard类的对象自身addMouseMotionListener(new MouseMotionListener() {//匿名内部类,且该类实现了 MouseMotionListener接口@Overridepublic void mouseMoved(MouseEvent e) {// 将鼠标单击的坐标位置转换成网格索引
//              int x1=(e.getX()-MARGIN+GRID_SPAN/2)/GRID_SPAN;
//              int y1=(e.getY()-MARGIN+GRID_SPAN/2)/GRID_SPAN;setCursor(new Cursor(Cursor.HAND_CURSOR));//设置成手型,也可以设置为其他类型如CROSSHAIR_CURSOR十字架形,请自行查API}//监听鼠标移动的区域从而决定它显示的形状@Overridepublic void mouseDragged(MouseEvent e) {// 鼠标按键在组件上按下并拖动时需要实现此方法,此处用不上,所以采用空实现}});}//    public Dimension getPreferredSize(){
//      return new Dimension(MARGIN*2+GRID_SPAN*COLS,MARGIN*2+GRID_SPAN*ROWS);
//  }public void paintComponent(Graphics g){super.paintComponent(g);//画横线(每条线的Y坐标不变y1=y2,x坐标变化,不同线的终点X坐标X2都相同)for(int i=0;i<=ROWS;i++){g.drawLine(MARGIN, MARGIN+i*GRID_SPAN, MARGIN+COLS*GRID_SPAN, MARGIN+i*GRID_SPAN);}//画竖线(每条线的X坐标不变x1=x2,y坐标变化不同线的终点Y坐标y2都相同)for(int i=0;i<=COLS;i++){g.drawLine(MARGIN+i*GRID_SPAN,MARGIN, MARGIN+i*GRID_SPAN, MARGIN+ROWS*GRID_SPAN );//g.drawLine(x1, y1, x2, y2);}for(int i=0;i<chessCount;i++){int xPos=chessList[i].getX()*GRID_SPAN+MARGIN;//网格交叉点x坐标int yPos=chessList[i].getY()*GRID_SPAN+MARGIN;//网格交叉点y坐标g.setColor(chessList[i].getColor());//设置颜色g.fillOval(xPos-Point.DIMETER/2, yPos-Point.DIMETER/2, Point.DIMETER, Point.DIMETER);//System.out.println(xPos+"  "+yPos);if(i==chessCount-1){//最后一个棋子g.setColor(Color.red);g.drawRect(xPos-Point.DIMETER/2, yPos-Point.DIMETER/2, Point.DIMETER, Point.DIMETER);}}}@Overridepublic void mouseClicked(MouseEvent e) {}@Overridepublic void mousePressed(MouseEvent e) {//String colorName= isBlack?"黑棋":"白棋";//将鼠标单击的坐标位置转换成网格索引0-10xIndex=(e.getX()-MARGIN+GRID_SPAN/2)/GRID_SPAN;yIndex=(e.getY()-MARGIN+GRID_SPAN/2)/GRID_SPAN;//落在棋盘外,不能下//System.out.println(xIndex+"  a"+yIndex);//System.out.println(e.getX()+" b "+e.getY());if(xIndex<0||xIndex>ROWS||yIndex<0||yIndex>COLS){return;}Point ch=new Point(xIndex,yIndex,isBlack?Color.black:Color.white);chessList[chessCount++]=ch;//System.out.println(chessCount);repaint();//通知系统重新绘制isBlack=!isBlack;}@Overridepublic void mouseReleased(MouseEvent e) {}@Overridepublic void mouseEntered(MouseEvent e) {}@Overridepublic void mouseExited(MouseEvent e) {}}

单机版五子棋游戏项目的实现相关推荐

  1. 做一个简单的java小游戏--单机版五子棋

    做一个简单的java小游戏–单机版五子棋 学了java有一段时间了,今天就来搞一个简单的单机版五子棋游戏. 实现功能:那必须能进行基础的输赢判断.还有重新开始的功能,悔棋的功能,先手设置的功能和退出的 ...

  2. java实训五子棋_Java棋类游戏实践之单机版五子棋

    本文实例讲述了java实现的五子棋游戏代码,分享给大家供大家参考,具体代码如下 一.实践目标 1.掌握JavaGUI界面设计 2.掌握鼠标事件的监听(MouseListener,MouseMotion ...

  3. 单机java_java实现单机版五子棋小游戏

    简单的java小游戏–单机版五子棋 学了java有一段时间了,今天就来搞一个简单的单机版五子棋游戏. 实现功能:那必须能进行基础的输赢判断.还有重新开始的功能,悔棋的功能,先手设置的功能和退出的功能. ...

  4. Java写单机版五子棋

    前言 用Java写的单机版五子棋,可实现悔棋,设置游戏时间.认输等功能,界面如下图所示. 主函数入口          public class TestWuZiQi {public static v ...

  5. 使用html5+javascript+css实现单机版五子棋---跟电脑打没赢过

    Html5+JavaScript+CSS实现单机版五子棋: 运行环境-除了老版的IE浏览器,其他都行: 源码需要请:请点赞留言邮箱: 需要录屏软件:请点赞留言邮箱: html5实现五子棋

  6. 课程设计-单机版五子棋游戏-Java

    一. 项目简介: 五子棋是全国智力运动会竞技项目之一,是一种两人对弈的纯策略型棋类游戏.五子棋的玩法是:双方分别使用黑白两色的棋子,下在棋盘直线与横线的交叉点上,先形成五子连线者获胜.五子棋的棋具与围 ...

  7. 单机版五子棋【JAVA】

    单机版五子棋 这个小游戏是我和我姐们儿的JAVA课程设计,也是我做的第一个JAVA项目,适合初学者,希望能帮到那些被JAVA课设所困扰的孩纸们~~~ 一.该游戏需要的实现的: 1.设计主框架,界面. ...

  8. Java源码分享——单机版五子棋

    初学JavaGUI编程,就写了一个小游戏–五子棋. 目前只实现了单机版,任何事情都是从简制作的,有问题请大牛们不吝指教啊. 此处的棋盘和棋子都未用图片,全部都是使用Java中的Graphics画出来的 ...

  9. 五子棋java_java实现单机版五子棋

    这个小游戏是我和我姐们儿的JAVA课程设计,也是我做的第一个JAVA项目,适合初学者,希望能帮到那些被JAVA课设所困扰的孩纸们~~~ 一.该游戏需要实现 1.设计主框架,界面. 2.利用Action ...

最新文章

  1. 后端调用python_【后端开发】python如何调用api接口
  2. 在Vs.net中集成 NDoc生成的 Html Help 2帮助文档
  3. 如何打造千万播放量的Tiktok
  4. android ios 传视频播放器,推荐用于iOS / Android全面格式的视频播放器|手机最强大的播放器...
  5. ruhr启动mysql数据库_mysql报错:ERROR! MySQL is not running, but lock file (/var/lock/subsys/mysql) exists...
  6. C语言必背18个经典程序(含免费源码大全)
  7. 当前系统license已过期什么意思_Windows10为什么老是显示系统许可证已过期
  8. 《DFC-Net:Deep Flow-Guided Video Inpainting》论文笔记
  9. 虚拟存储页面置换算法c语言,虚拟存储器管理页面置换算法模拟实验.doc
  10. win10 文件夹设置区分大小写
  11. 刹车防抱死系统(ABS)
  12. 阿拉伯语在H5页面中排版问题解决
  13. 金融计算器 npv_CFA考试用什么计算器?怎么操作?
  14. 迅雷链DAPP插件:链克袋鼠Linker让链克持续爆发
  15. 解决IDEA输出中文显示为问号
  16. LTHTB五脚充电芯片规格书,LTH7B规格书
  17. 多地楼市库存续升凸显调控效果 下半年需关注钱流
  18. NPDP产品经理六顶思考帽,让思维更清晰、更全面
  19. springboot easypoi 报错The bean 'beanNameViewResolver', defined in class path resource [cn/afterturn/e
  20. 为什么每次登录系统都有烦人的验证码?

热门文章

  1. 叮咚买菜基于Doris引擎的应用实践
  2. 万达牵手IBM:万达进军企业级云业务,IBM Watson进入中国
  3. html 文件压缩与解压缩,压缩与解压缩
  4. C#的JSON实现源代码
  5. 阿里云对象存储oss+picgo+typora实现步骤及无法上传图片解决方案
  6. 数据库 DB database
  7. android开源组件化框架,轻量级Android组件化协议框架 – Android-Route...
  8. Hive分区表数据压缩
  9. 代驾微信小程序现成开发,代驾司机用户端功能详细介绍
  10. 眺望高阶智能驾驶的远方,北醒驶入新“平台”