Java+Swing实现的五子棋游戏

news2024/11/26 0:48:11

Java+Swing实现的五子棋游戏

  • 一、系统介绍
  • 二、功能展示
    • 1.游戏展示
  • 三、系统实现
    • 1.ChessFrame .java
  • 四、其它
    • 1.其他系统实现
    • 2.获取源码

一、系统介绍

五子棋游戏实现人机对战、人人对战两个模式。

二、功能展示

1.游戏展示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、系统实现

1.ChessFrame .java

package five;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

import view.UserFrame;


public class ChessFrame extends JFrame implements ActionListener {
    public static boolean iscomputer = true, checkcomputer = true;
    private String[] strsize = {"标准棋盘", "改进棋盘", "扩大棋盘"};
    private String[] strmode = {"人机对战", "人人对战"};
    private int width, height;
    private ChessModel cm;
    private MainPanel mp;

    public ChessFrame() {
        this.setTitle("五子棋游戏");
        cm = new ChessModel(1);
        mp = new MainPanel(cm);
        Container con = this.getContentPane();
        con.add(mp, "Center");
        this.setResizable(false);
        this.addWindowListener(new ChessWindowEvent());
        MapSize(14, 14);
        JMenuBar mbar = new JMenuBar();
        this.setJMenuBar(mbar);
        JMenu gameMenu = new JMenu("游戏");
        mbar.add(makeMenu(gameMenu, new Object[]{
                "开局", null, "棋盘", null, "模式", null, "退出"
        }, this));
        JMenu lookMenu = new JMenu("外观");
        mbar.add(makeMenu(lookMenu, new Object[]{
                "类型一", "类型二", "类型三"
        }, this));
        JMenu userMenu = new JMenu("用户管理");
        mbar.add(makeMenu(userMenu, new Object[]{
                "用户管理"
        }, this));
        JMenu helpMenu = new JMenu("版本");
        mbar.add(makeMenu(helpMenu, new Object[]{
                "关于"
        }, this));
        this.setLocationRelativeTo(null);
    }

    public JMenu makeMenu(Object parent, Object items[], Object target) {
        JMenu m = null;
        if (parent instanceof JMenu)
            m = (JMenu) parent;
        else if (parent instanceof String)
            m = new JMenu((String) parent);
        else
            return null;
        for (int i = 0; i < items.length; i++)
            if (items[i] == null)
                m.addSeparator();
            else if (items[i] == "棋盘") {
                JMenu jm = new JMenu("棋盘");
                ButtonGroup group = new ButtonGroup();
                JRadioButtonMenuItem rmenu;
                for (int j = 0; j < strsize.length; j++) {
                    rmenu = makeRadioButtonMenuItem(strsize[j], target);
                    if (j == 0)
                        rmenu.setSelected(true);
                    jm.add(rmenu);
                    group.add(rmenu);
                }
                m.add(jm);
            } else if (items[i] == "模式") {
                JMenu jm = new JMenu("模式");
                ButtonGroup group = new ButtonGroup();
                JRadioButtonMenuItem rmenu;
                for (int h = 0; h < strmode.length; h++) {
                    rmenu = makeRadioButtonMenuItem(strmode[h], target);
                    if (h == 0)
                        rmenu.setSelected(true);
                    jm.add(rmenu);
                    group.add(rmenu);
                }
                m.add(jm);
            } else
                m.add(makeMenuItem(items[i], target));
        return m;
    }

    public JMenuItem makeMenuItem(Object item, Object target) {
        JMenuItem r = null;
        if (item instanceof String)
            r = new JMenuItem((String) item);
        else if (item instanceof JMenuItem)
            r = (JMenuItem) item;
        else
            return null;
        if (target instanceof ActionListener)
            r.addActionListener((ActionListener) target);
        return r;
    }

    public JRadioButtonMenuItem makeRadioButtonMenuItem(
            Object item, Object target) {
        JRadioButtonMenuItem r = null;
        if (item instanceof String)
            r = new JRadioButtonMenuItem((String) item);
        else if (item instanceof JRadioButtonMenuItem)
            r = (JRadioButtonMenuItem) item;
        else
            return null;
        if (target instanceof ActionListener)
            r.addActionListener((ActionListener) target);
        return r;
    }

    public void MapSize(int w, int h) {
        setSize(w * 24, h * 27);
        if (this.checkcomputer)
            this.iscomputer = true;
        else
            this.iscomputer = false;
        mp.setModel(cm);
        mp.repaint();
    }

    public boolean getiscomputer() {
        return this.iscomputer;
    }

    public void restart() {
        int modeChess = cm.getModeChess();
        if (modeChess <= 3 && modeChess >= 0) {
            cm = new ChessModel(modeChess);
            MapSize(cm.getWidth(), cm.getHeight());
        }
    }


    public void actionPerformed(ActionEvent e) {
        String arg = e.getActionCommand();
        try {
            if (arg.equals("类型三"))
                UIManager.setLookAndFeel(
                        "com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
            else if (arg.equals("类型二"))
                UIManager.setLookAndFeel(
                        "com.sun.java.swing.plaf.motif.MotifLookAndFeel");
            else
                UIManager.setLookAndFeel(
                        "javax.swing.plaf.metal.MetalLookAndFeel");
            SwingUtilities.updateComponentTreeUI(this);
        } catch (Exception ee) {
        }
        if (arg.equals("标准棋盘")) {
            this.width = 14;
            this.height = 14;
            cm = new ChessModel(1);
            MapSize(this.width, this.height);
            SwingUtilities.updateComponentTreeUI(this);
        }
        if (arg.equals("改进棋盘")) {
            this.width = 18;
            this.height = 18;
            cm = new ChessModel(2);
            MapSize(this.width, this.height);
            SwingUtilities.updateComponentTreeUI(this);
        }
        if (arg.equals("扩大棋盘")) {
            this.width = 22;
            this.height = 22;
            cm = new ChessModel(3);
            MapSize(this.width, this.height);
            SwingUtilities.updateComponentTreeUI(this);
        }
        if (arg.equals("人机对战")) {
            this.checkcomputer = true;
            this.iscomputer = true;
            cm = new ChessModel(cm.getModeChess());
            MapSize(cm.getWidth(), cm.getHeight());
            SwingUtilities.updateComponentTreeUI(this);
        }
        if (arg.equals("人人对战")) {
            this.checkcomputer = false;
            this.iscomputer = false;
            cm = new ChessModel(cm.getModeChess());
            MapSize(cm.getWidth(), cm.getHeight());
            SwingUtilities.updateComponentTreeUI(this);
        }
        if (arg.equals("开局")) {
            restart();
        }
        if (arg.equals("关于"))
            JOptionPane.showMessageDialog(null, " 第一版\nR数学192 董磊 1918180232", "版本", JOptionPane.PLAIN_MESSAGE);
        if (arg.equals("退出"))
            System.exit(0);
        if (arg.equals("用户管理")){
        	new UserFrame();
        }
           
    }
}























四、其它

1.其他系统实现

Java+Swing实现学生选课管理系统
Java+Swing实现学校教务管理系统
Java+Swing+sqlserver学生成绩管理系统
Java+Swing用户信息管理系统
Java+Swing实现的五子棋游戏
基于JavaSwing 银行管理系统
Java+Swing+mysql仿QQ聊天工具
Java+Swing 聊天室
Java+Swing+dat文件存储实现学生选课管理系统
Java+Swing可视化图像处理软件
Java+Swing学生信息管理系统
Java+Swing图书管理系统
Java+Swing图书管理系统2.0
基于java+swing+mysql图书管理系统3.0
大作业-基于java+swing+mysql北方传统民居信息管理系统

2.获取源码

点击下载
Java+Swing实现的五子棋游戏

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/92669.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【图像处理】图像拼接原理介绍

问题 图像拼接是图像处理的基础之一&#xff0c;虽然自己并没有直接做图像拼接方面的研究&#xff0c;但在面试中却多次被问到这方面的内容&#xff0c;可见这个知识点还是很重要的。事实上&#xff0c;很多场景都会用到图像拼接的知识&#xff0c;例如运动检测与跟踪、游戏画…

HJL-E6/A DC220V数字式【电流继电器】

1&#xff0e;用途 HJL系列数字式交流电流继电器为瞬时动作特性&#xff0c;用于发电机&#xff0c;变压器和输电线路的过负荷和短路保护&#xff0c;作为启动元件。 2&#xff0e;安装结构 导轨安装9&#xff0c;导轨安装E 两种壳体尺寸&#xff0c;具体尺寸请参考外型尺寸…

Spark 3.0 - 12.ML GBDT 梯度提升树理论与实战

目录 一.引言 二.GBDT 理论 1.集成学习 2.分类 & 回归问题 3.梯度提升 4.GBDT 生成 三.GBDT 实战 1.数据准备 2.构建 GBDT Pipeline 3.预测与评估 四.总结 一.引言 关于决策树前面已经介绍了常规决策树与随机森林两种类型的知识&#xff0c;本文主要介绍梯度提…

小游戏赛道如何加速流量增长?

小游戏是指设计极简的轻量级游戏。它构造简单&#xff0c;但却给人带来了娱乐性和重复参与的欲望。 近年来&#xff0c;小游戏在抖音、微信小游戏等平台拥有着疯狂裂变的可能性&#xff0c;出现了例如“羊了个羊”“跳一跳”、“合成大西瓜”等风靡一时的小游戏。 这些爆火的小…

「微服务系列」统一网关Gateway

为什么需要网关 网关功能&#xff1a; 身份认证和权限校验服务路由、负载均衡请求限流在SpringCloud中网关的实现包括两种&#xff1a; Zuul&#xff1a;基于Servlet的实现&#xff0c;属于阻塞式编程。SpringCloudGateway&#xff1a;是基于Spring5中提供的WebFlux&#xf…

关注渐冻症|菌群助力探索其发病机理及相关干预措施

最杰出的物理学家之一的斯蒂芬威廉霍金想必大家都知道&#xff0c;以及曾经风靡全网的“冰桶挑战”&#xff0c;它们都与一种罕见疾病有关&#xff0c;那就是渐冻症。 媒体的宣传让渐冻症成为了较为“知名”罕见病之一&#xff1b;2000年丹麦举行的国际病友大会上正式确定6月21…

【Redis】数据类型操作二 (Set/Hash/Zset)

文章目录3、Redis集合(Set)4、 Redis哈希(Hash)5、Redis有序集合Zset(sorted set)实操3、Redis集合(Set)4、 Redis哈希(Hash)5、Redis有序集合Zset(sorted set)3、Redis集合(Set) Redis Set 是String类型的无序集合。一个key集合可以对应多个value元素。Redis Set 可以自动排重…

[附源码]Python计算机毕业设计高校篮球训练管理系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

Python如何做自动化测试?

众做周知&#xff0c;自动测试的优势是显而易见的&#xff0c;它可以大大节省我们的时间&#xff0c;提高我们的工作效率。那么Python如何做自动化测试呢&#xff1f;本文将用Python编写一个简单的测试用例&#xff0c;并指导大家写做自动化测试的代码。如果大家对这个内容感兴…

基于java+springboot+mybatis+vue+mysql的会员制医疗预约服务管理信息系统

项目介绍 会员制医疗预约服务管理信息系统是针对会员制医疗预约服务管理方面必不可少的一个部分。在会员制医疗预约服务管理的整个过程中&#xff0c;会员制医疗预约服务管理系统担负着最重要的角色。为满足如今日益复杂的管理需求&#xff0c;各类的管理系统也在不断改进。系…

[计算机网络微课]第三章 数据链路层

数据链路层 概述 数据链路层在网络体系结构中的地位 主机 H1 给主机 H2 发送数据&#xff0c;中间要经过 3 个路由器和电话网、局域网以及广域网等多种网络。从五层协议原理体系结构角度来看 为了专注数据链路层内容&#xff0c;这里我们只考虑数据链路层&#xff0c;而不考…

体外诊断丨艾美捷游离维多珠单抗ADA水平检测试剂盒

introduction: Crohns disease in patients with moderate to severe active ulcerative colitis, routine treatment or tumor necrosis factor α &#xff08;TNF α&#xff09; Antagonists can also be treated with vidolizumab. Vedolizumab is a humanized monoclona…

并查集引入

目的 主要是处理一些不相交集合的合并问题&#xff0c;比如&#xff1a;求连通子图&#xff0c;求最小生成树的克鲁斯卡尔算法以及最近公共祖先&#xff08;LCA&#xff09;等 简单应用就是连通图&#xff0c;将元素进行合并&#xff0c;如果要优化路径的话可以利用数据压缩 …

大学生简单抗击疫情静态HTML网页设计作品 DIV布局疫情感动人物介绍网页模板代码 DW学生抗疫逆行者网站制作成品下载

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

vTESTstudio入门到精通 - vTESTstudio工具栏介绍_Home

继上篇介绍File功能模块之后&#xff0c;今天我们来介绍vTESTstudio工程使用过程的种的另外一个重要的工具栏Home&#xff0c;这块将是我们使用vTESTstudio编程中使用最多的一个功能模块。话不多说&#xff0c;下面我们就来一一介绍该功能栏能在我们编程的时候做哪些事情。 2、…

网关服务限流熔断降级【Gateway+Sentinel】

目录 第一步&#xff1a;启动sentinel-dashboard控制台 第二步&#xff1a;在网关服务中引入sentinel依赖 第三步&#xff1a;在网关服务application.yml中配置sentinel 第四步&#xff1a;通过网关进入服务 再进入sentinel控制台查看链路情况 第一步&#xff1a;启动sen…

一个简单的dw网页制作作业,学生个人html静态网页制作成品代码——怪盗基德动漫主题网页成品(15页)

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置&#xff0c;有div的样式格局&#xff0c;这个实例比较全面&#xff0c;有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 ⚽精彩专栏推荐&#x1…

【mmdetection系列】mmdetection之evaluate评测

1.configs 还是以yolox为例&#xff0c;配置有一项evaluation。用于配置评估是用什么评价指标评估。 https://github.com/open-mmlab/mmdetection/blob/master/configs/yolox/yolox_s_8x8_300e_coco.py#L151 max_epochs 300 num_last_epochs 15 interval 10evaluation di…

LVS 负载均衡

LVS 负载均衡 本篇主要介绍一下 lvs 是什么 以及它的 nat 模式的搭建 配合nginx来演示 1.概述 LVS 是 Linux Virtual Server 的简写 (Linux 虚拟服务器 ), 是由章文嵩博士主导, 它虚拟出一个服务器集群,然后进行负载均衡的项目, 目前LVS 已经被集成到Linux内核模块中了, 外部请…

直播弹幕系统(三)- 直播在线人数统计

直播弹幕系统&#xff08;三&#xff09;- 直播在线人数统计前言一. 在线人数统计功能实现1.1 Redis整合1.2 在线人数更新1.3 演示前言 上一篇文章整合RabbitMQ进行消息广播和异步处理 写完了消息的广播、削峰、异步处理业务逻辑等操作。完成了实时共享功能。 不过写到后面发…