Java+Swing实现的五子棋游戏

Java+Swing实现的五子棋游戏

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

一、系统介绍

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

二、功能展示

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);elsereturn 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);} elsem.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;elsereturn 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;elsereturn 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;elsethis.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");elseUIManager.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图书管理系统

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

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

相关文章

C语言实验 顺序结构

时间&#xff1a;2024.11.1 实验一、7-1 逆序的三位数 #include<stdio.h> int main(){int n,a,b,c;scanf("%d",&n);an%10;bn/10%10;cn/100;printf("%d",a*100b*10c);return 0; }实验二、7-2 求整数均值 #include<stdio.h> int main(){int…

图形几何之美系列:三维实体结构表达

“ 图形几何库提供丰富的几何工具算法&#xff0c;如基础的仿射变换、向量运算、关系计算及高阶的布尔运算、网格剖分、实体造型、曲线曲面等&#xff0c;这离不开基础的三维实体结构表达&#xff0c;而三维实体结构表达的方式有多种&#xff0c;各具特点。” ​ 1.背景简述 …

华为OD机试真题(Python/JS/C/C++)- 考点 - 细节

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题 点这里。 本专栏收录于《华为OD机试真题&#xff08;Python/JS/C/C&#xff09;》。

CTFshow之信息收集第1关到10关。详细讲解

得而不惜就该死&#xff01; --章总 开始新的篇章&#xff01; 零、目录 一、实验准备 1、ctf网站&#xff1a;ctf.show 2、工具&#xff1a;chrome浏览器、hackbar插件 3、burpsuite抓包工具 二、实验技巧 &#xff08;一&#xff09;F12摸奖 源码泄露 &#xff08;二…

AI驱动的医疗创新:信息抽取与知识图谱在临床应用中的转变

一、思通数科平台支持多种输入格式&#xff0c;如电子病历、临床数据和医学文献等&#xff0c;并能将这些信息快速转换为结构化数据&#xff0c;包括自动360度不同角度的旋转识别&#xff0c;提升数据的可操作性和可检索性。通过我们的解决方案&#xff0c;医疗机构能够有效整合…

js | undefined vs null vs void 0

背景 你就说为啥吧&#x1f447; console.log(nullundefined,nullundefined); // true false console.log(null false,undefinedfalse) // fasle false console.log(0false,NaNfalse) // true falseconsole.log(0null,0<null); // false true console.log(0false,0<fa…

【YOLOv11[基础]】实例分割Seg | 导出ONNX模型 | ONN模型推理以及检测结果可视化 | python

本文将导出YOLO-Seg.pt模型对应的ONNX模型,并且使用ONNX模型推理以及结果的可视化。话不多说,先看看效果图吧!!! 目录 一 导出ONNX模型 二 推理及检测结果可视化 1 代码 2 效果图

qt QDataStream详解

1. 概述 QDataStream是Qt框架中的一个核心类&#xff0c;主要用于处理二进制数据的序列化和反序列化。它提供了高效、跨平台的方式&#xff0c;将C数据结构转化为字节流&#xff0c;便于在网络传输、持久化存储等场景下使用。QDataStream可以处理包括整数、浮点数、布尔值、字…

云专线优势有哪些?对接入网络有什么要求?

云专线是一种连接企业本地数据中心与云服务提供商之间的专用网络连接方式&#xff0c;具有以下优势&#xff1a; 高安全性&#xff1a;云专线提供了物理隔离的数据传输通道&#xff0c;减少了数据在公共互联网上传输时可能遭遇的安全风险。 低延迟&#xff1a;由于是直接连接&a…

使用python向钉钉群聊发送消息

使用python向钉钉群聊发送消息 一、在钉钉群中新建机器人二、使用代码发送消息 一、在钉钉群中新建机器人 在群设置中添加机器人 选择自定义 勾选对应的安全设置 完成后会展示webhook&#xff0c;将地址复制出来&#xff0c;并记录&#xff0c;后面会用到 二、使用代码发送消…

简单又便宜的实现电脑远程开机唤醒方法

现有的远程开机方案 1&#xff09;使用向日葵开机棒 缺点是比较贵一点&#xff0c;开机棒要一百多&#xff0c;而且查了评论发现挺多差评说不稳定&#xff0c;会有断联和无法唤醒的情况&#xff0c;而且设置也麻烦&#xff0c;还需要网卡支持WOL 2&#xff09;使用远程开机卡 …

Netty ByteBuf 分配 | 池化复用 、直接内存

Netty ByteBuf 分配 本文主要内容关于 ByteBuf 分配介绍&#xff0c;为了更好的理解本文&#xff0c;我们可以带着几个问题思考 在IO密集型业务场景下&#xff0c;可能涉及大量ByteBuf分配&#xff0c;这时我们需 要考虑会不会产生OOM会不会出现频繁GC会不会内存泄露 根据上…

推荐一款windows右键管理工具:ContextMenuManager

Windows右键菜单管理工具是一款可以为系统打造一个异常丰富的右键菜单组&#xff0c;能自定义添加右键菜单项和管理“发送到”及第三方程序添加的右键菜单项目。 主要功能 一个纯粹的Windows右键菜单管理程序 • 管理常见位置右键菜单、自定义添加右键菜单 • 启用或禁用文件…

#渗透测试#SRC漏洞挖掘#自动化脚本的编写01

免责声明 本教程仅为合法的教学目的而准备&#xff0c;严禁用于任何形式的违法犯罪活动及其他商业行为&#xff0c;在使用本教程前&#xff0c;您应确保该行为符合当地的法律法规&#xff0c;继续阅读即表示您需自行承担所有操作的后果&#xff0c;如有异议&#xff0c;请立即停…

个人学习记录平台的

摘 要 随着互联网的不断发展&#xff0c;人们由Web 1.0以静态、单向阅读为主的只读式网络走向了以分享为内核的实时现代化网络&#xff0c;即Web 2.0时代逐渐向着Web 3.0迈进。 随着技术的不断更新迭代&#xff0c;互联网从业者也必须处于终身学习的状态&#xff0c;他们要不…

算法日记 14—16 day 二叉树

前两天没有更新&#xff0c;这次把之前的补上&#xff0c;大篇章。 直接冲&#xff01;&#xff01;&#xff01; 题目&#xff1a;找树坐下角的值 513. 找树左下角的值 - 力扣&#xff08;LeetCode&#xff09; 给定一个二叉树的 根节点 root&#xff0c;请找出该二叉树的 最…

第三十一章 Vue之路由(VueRouter)

目录 一、引言 1.1. 路由介绍 二、VueRouter 三、VueRouter的使用 3.1. 使用步骤&#xff08;52&#xff09; 3.2. 完整代码 3.2.1. main.js 3.2.2. App.vue 3.2.3. Friend.vue 3.2.4. My.vue 3.2.5. Find.vue 一、引言 1.1. 路由介绍 Vue中路由就是路径和组件的映…

特朗普钦定的编程语言!

大家好&#xff0c;我是程序员面试刷题平台的鸭鸭&#xff01; 鸭鸭昨天一直关注美国大选&#xff0c;最终川普获胜&#xff01;然后就刷到了一个图&#xff1a; 看到上面这张图片了吗&#xff1f; 你没有看错&#xff0c;特朗普也开始关心起 Java 了&#xff01;Java 的迷弟…

day20:三剑客——awk基础

一&#xff0c;概述 AWK 是一种用于处理文本和数据的编程语言&#xff0c;特别擅长用于处理格式化文本文件。它通过将输入数据分成字段&#xff0c;逐行进行处理&#xff0c;广泛应用于数据分析、文本处理和系统管理中。 二&#xff0c;使用方式 命令模式&#xff08;重点&a…

如何优化 B2B 转化率?这些步骤你不可不知

企业怎么才能把上网逛的人变成潜在买家&#xff0c;再进一步变成真金白银的付费客户呢&#xff1f;这对营销团队来说&#xff0c;可是头等大事。特别是在B2B这行&#xff0c;提升转化率&#xff08;CRO&#xff09;不光是任务&#xff0c;更是让营销更高效、收入噌噌涨的秘密武…