好久没更新博客了,最近花了一周时间,做了个单机版五子棋游戏,已经实现了棋盘界面的绘制,棋子下落等功能,就差加上判断输赢的规则了,暂且就贴上这部分代码以及效果图,以后陆续会添上后续代码,并升级为网络版五子棋,写的不好,还望各位大侠不吝赐教
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{ @Override public 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接口 @Override public 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 } //监听鼠标移动的区域从而决定它显示的形状 @Override public 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); } } } @Override public void mouseClicked(MouseEvent e) {} @Override public void mousePressed(MouseEvent e) { //String colorName= isBlack?"黑棋":"白棋"; //将鼠标单击的坐标位置转换成网格索引0-10 xIndex=(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; } @Override public void mouseReleased(MouseEvent e) {} @Override public void mouseEntered(MouseEvent e) {} @Override public void mouseExited(MouseEvent e) {} }
相关推荐
1、由于是单机的游戏,启动游戏后,可直接开始游戏。 2、游戏规则: 对局双方各执一色棋子。 空棋盘开局。 黑先、红后,交替下子,每次只能下一子。 棋子下在棋盘的空白点上,棋子下定后,不得向其它点移动,不得...
javascript语言实现的网页版离线单机五子棋小游戏,在学习javascript语法的同时,锻炼逻辑算法等基础知识,简小精悍,一举多得。
该项目使用Java实现了简易版的五子棋小游戏。只适合单机双人对战。关键代码为五子棋胜利算法。
1、由于是两人的游戏,非单机版,所以要有多个客户端相互通信,这时就要用到socket 技术 2、设计socket服务端,用来维护socket客户端连接 3、设计socket客户端,用来实现五子棋逻辑和效果 4、客户端要能设置连接...
Java编写的网页版魔方游戏 内容索引:JAVA源码,游戏娱乐,魔方,网页游戏 Java编写的网页版魔方游戏,编译后生成.class文件,然后用HTML去调用,不过运行时候需要你的浏览器安装有运行Class的插件。Java源代码实现...
Ch06:人机对战五子棋游戏的实现 安装JDK,配置环境变量,双击compile.bat 批处理文件编译项目,双击runFive.bat批处理文件可启动项目。 Ch07:蚁群算法的模拟实现 安装JDK,配置环境变量,导入ch07项目,一般...
Java编写的网页版魔方游戏 内容索引:JAVA源码,游戏娱乐,魔方,网页游戏 Java编写的网页版魔方游戏,编译后生成.class文件,然后用HTML去调用,不过运行时候需要你的浏览器安装有运行Class的插件。Java源代码实现...
Java编写的网页版魔方游戏 内容索引:JAVA源码,游戏娱乐,魔方,网页游戏 Java编写的网页版魔方游戏,编译后生成.class文件,然后用HTML去调用,不过运行时候需要你的浏览器安装有运行Class的插件。Java源代码实现部分...
单机版java五子棋V1.1.rar 在Servlet中连接数据库的Java代码.rar 备份数据源.rar 学生成绩系统(图形界面).rar 学生课程管理系统.rar 宾馆管理系统.rar 手机游戏J2ME毕业设计.rar 打地鼠游戏.rar 数据持久层框架 ...
Java编写的网页版魔方游戏 内容索引:JAVA源码,游戏娱乐,魔方,网页游戏 Java编写的网页版魔方游戏,编译后生成.class文件,然后用HTML去调用,不过运行时候需要你的浏览器安装有运行Class的插件。Java源代码实现...
Java编写的网页版魔方游戏 内容索引:JAVA源码,游戏娱乐,魔方,网页游戏 Java编写的网页版魔方游戏,编译后生成.class文件,然后用HTML去调用,不过运行时候需要你的浏览器安装有运行Class的插件。Java源代码实现...
Java编写的网页版魔方游戏 内容索引:JAVA源码,游戏娱乐,魔方,网页游戏 Java编写的网页版魔方游戏,编译后生成.class文件,然后用HTML去调用,不过运行时候需要你的浏览器安装有运行Class的插件。Java源代码实现部分...
Java编写的网页版魔方游戏 内容索引:JAVA源码,游戏娱乐,魔方,网页游戏 Java编写的网页版魔方游戏,编译后生成.class文件,然后用HTML去调用,不过运行时候需要你的浏览器安装有运行Class的插件。Java源代码实现...
Java编写的网页版魔方游戏 内容索引:JAVA源码,游戏娱乐,魔方,网页游戏 Java编写的网页版魔方游戏,编译后生成.class文件,然后用HTML去调用,不过运行时候需要你的浏览器安装有运行Class的插件。Java源代码实现...