千家信息网

java怎么实现简单五子棋小游戏

发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,本篇文章为大家展示了java怎么实现简单五子棋小游戏,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。讲解五子棋,实际上就是用一个数组来实现的。没有其他很复杂的结
千家信息网最后更新 2025年02月01日java怎么实现简单五子棋小游戏

本篇文章为大家展示了java怎么实现简单五子棋小游戏,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

讲解

五子棋,实际上就是用一个数组来实现的。没有其他很复杂的结构。
首先我们制作五子棋,先要有一个棋盘。

public void setGraphics(Graphics g){        this.g=g;        for(int i=0;i<11;i++){            g.drawLine(100+Size*i, 100, 100+Size*i, 500);            g.drawLine(100, 100+Size*i, 500, 100+Size*i);        }        for(int i=0;i<11;i++){            for(int j=0;j<11;j++){                chessboard[i][j]=0;            }        }    }

此时我们在画布上制作了一个棋盘,图示如下:

接下来我们要实现的就是如何去放置棋子了。
放置棋子大体思路就是,当我们点击一个网格点的时候,可以出现一个白棋或者黑棋,所以我们在这里需要学会如何画一个椭圆。

// 绘制一个椭圆  g.drawOval(a-Size/4, b-Size/4, Size/2, Size/2);//修改左上角的坐标,使画好的圆恰好在以网格点所在的位置上// 填充一个椭圆 g.setColor(Color.BLACK); g.fillOval(a-Size/4, b-Size/4, Size/2, Size/2);

此时,点击某一个位置就会出现一个黑棋子。这里我们需要注意的是,我们不可能要求用户每一次的点击都非常准确,所以我们必须设定一个范围,只要这个范围内的点击,我们都默认点击到了这个网格上面。因为网格大小为40,所以我们以一个网格点位中心,向上下左右移动20长度的范围都属于这个点。
白棋的设置也一样

if(number==0){                    // 绘制一个椭圆                    g.drawOval(a-Size/4, b-Size/4, Size/2, Size/2);//修改左上角的坐标,使画好的圆恰好在以网格点所在的位置上                    // 填充一个椭圆                    g.setColor(Color.BLACK);                    g.fillOval(a-Size/4, b-Size/4, Size/2, Size/2);                    number++;                }                else{                    g.drawOval(a-Size/4, b-Size/4, Size/2, Size/2);                    // 填充一个椭圆                    g.setColor(Color.WHITE);                    g.fillOval(a-Size/4, b-Size/4, Size/2, Size/2);                    number--;                }

现在我们看一下我们的棋盘,白棋和黑棋都可以放到棋盘上面了,但是依旧存在一个问题,当我们在同一位置点击两次后会发生覆盖现象。如何解决?
我们只需要设置一个数组来记录这个位置是否放置了棋子就好了

完整代码

package game;import java.awt.Graphics;import javax.swing.JFrame;public class ShowUI {    public void Draw(){        //设置格子的大小                JFrame drawframe=new JFrame();//创建一个窗体        drawframe.setSize(1000,600);//设置窗体大小        drawframe.setLocationRelativeTo(null);//设置相对位置        drawframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗体操作        //创建监听器对象        DrawListener draw = new DrawListener();        drawframe.addMouseListener(draw);        drawframe.setVisible(true);//设置窗体可见        try {            Thread.sleep(566);        } catch (InterruptedException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        Graphics g = drawframe.getGraphics();        //设置画布        draw.setGraphics(g);            }    public static void main(String[] args) {        // TODO Auto-generated method stub        ShowUI a=new ShowUI();        a.Draw();//引用对象    }}
package game;import java.awt.Color;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.RenderingHints;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;public class DrawListener implements MouseListener{    Graphics g;    public int Start_X=50;    public int Start_Y=50;    public int Size=40;    public int number=0;    public int [][]chessboard=new int[11][11];        public void setGraphics(Graphics g){        this.g=g;        for(int i=0;i<11;i++){            g.drawLine(100+Size*i, 100, 100+Size*i, 500);            g.drawLine(100, 100+Size*i, 500, 100+Size*i);        }        for(int i=0;i<11;i++){            for(int j=0;j<11;j++){                chessboard[i][j]=0;            }        }    }    /*public void drawOval(Graphics g) {               // Graphics2D g2d = (Graphics2D) g.create();        //g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);        //g.setColor(Color.RED);        // 1. 绘制一个圆: 圆的外切矩形 左上角坐标为(0, 0), 宽高为100        g.drawOval(0, 0, 100, 100);        g.setColor(Color.GRAY);        // 2. 填充一个椭圆        g.fillOval(120, 100, 100, 150);        g.dispose();    }*/    /**     * Invoked when the mouse button has been clicked (pressed     * and released) on a component.     */    public void mouseClicked(MouseEvent e){        int countx=e.getX();        int county=e.getY();        int Size=40;        //起始点为(100,100)        //终止点为(500,500)        //System.out.println(countx);        //System.out.println(county);        int a=0;        int b=0;//这里是修改点击显示的位置,让最后得到的点在角落上        for(int i=0;i<11;i++){            if(countx>=(100+Size*i-(Size/2))&&countx<(100+Size*i+(Size/2))){                a=100+Size*i;                //System.out.println(a);            }            if(county>=(100+Size*i-(Size/2))&&county<(100+Size*i+(Size/2))){                b=100+Size*i;                //System.out.println(b);            }        }        if(a!=0&&b!=0){            int flag1=0;            int flag2=0;            flag1=(a-100)/Size;            flag2=(b-100)/Size;            if(chessboard[flag1][flag2]==0){//判断这个地方是否已经放置了一个点                if(number==0){                    // 绘制一个椭圆                    g.drawOval(a-Size/4, b-Size/4, Size/2, Size/2);//修改左上角的坐标,使画好的圆恰好在以网格点所在的位置上                    // 填充一个椭圆                    g.setColor(Color.BLACK);                    g.fillOval(a-Size/4, b-Size/4, Size/2, Size/2);                    number++;                }                else{                    g.drawOval(a-Size/4, b-Size/4, Size/2, Size/2);                    // 填充一个椭圆                    g.setColor(Color.WHITE);                    g.fillOval(a-Size/4, b-Size/4, Size/2, Size/2);                    number--;                }                chessboard[flag1][flag2]=1;//没放置,那么我们需要在放置后            }            else{                System.out.println("此处已经放置了棋子");            }                    }            }    /**     * Invoked when a mouse button has been pressed on a component.     *///点击鼠标    public void mousePressed(MouseEvent e){            }    /**     * Invoked when a mouse button has been released on a component.     *///释放鼠标    public void mouseReleased(MouseEvent e){            }    /**     * Invoked when the mouse enters a component.     */    public void mouseEntered(MouseEvent e){            }    /**     * Invoked when the mouse exits a component.     */    public void mouseExited(MouseEvent e){            }}

上述内容就是java怎么实现简单五子棋小游戏,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。

椭圆 位置 网格 棋子 五子棋 五子 坐标 就是 左上角 棋盘 窗体 大小 所在 白棋 小游戏 内容 对象 技能 数组 画布 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 港口网络技术发展缓慢 用a3纸画网络安全的手抄报 电脑网络安全密钥不匹配怎么了 酒店数据库表格 惠州数字软件开发供应商 国际上最著名的三大核苷酸数据库 时间服务器同步网关 抢票软件开发用什么语言 金山区特殊软件开发技术指导 名字斗罗服务器下载 什么是刀片式服务器 恶魔之魂重制版卡在登录服务器 湖南工程软件开发费用 一直跳出服务器正在运行中 网络安全重于泰山手抄报简单 网络安全饮食 网络安全治理的原则有哪些 网络安全实体是指 浙江智能网络安全 西安瑜乐软件开发有限公司 华为单板底层软件开发 可以检索会议的数据库 代理服务器地址和端口怎么填微信 access数据库查找窗体 软件开发工程师就业方向 2018年网络安全周海报 昆仑数据库 神魔大陆为什么有好几个服务器 无忧网络技术专业服务 计算机网络安全论文最新文章
0