排序算法
冒泡排序 冒泡排序(Bubble Sort)是一种 交换类 的基础排序算法,重复遍历待排序数组,依次 比较相邻两个元素,若顺序错误则交换二者,每一轮遍历都会将当前 未排序部分 中最大(或最小)的元素 “冒泡” 到末尾。 交换类排序算法通过 比较并交换元素位置 来实现排序,主要操作是相邻或远距离的元素互换。 典型算法 冒泡排序:相邻元素两两比较,大值逐轮"冒泡"到末尾。 快速排序:选定基准值,通过交换将序列分为左右两部分,递归处理。 核心思想 冒泡排序的核心思想是 相邻元素两两比较,通过不断交换将最值逐位后移。 每一轮从前往后遍历,比较每一对相邻元素,若前者大于后者则交换。这个过程中,较大的元素就像气泡一样,一步步 “冒泡” 到当前未排序区间的末尾。 每完成一轮,末尾就多一个已排好的最大值,下一轮比较范围缩短一位,若某轮无交换则提前结束。 实现过程 以升序排序为例: 进行一轮循环,每次循环都找到 未排序部分 的最大元素并交换到末尾,只需要查找 n-1 次就能完成排序(最后一个元素不需要排序)。 123for (let i = 0; i < n - 1...
国际象棋
快速阅读 记录上学时做过的一个国际象棋软件。 功能概述 玩家对战:玩家之间轮流控制各自的棋子,吃掉对方的王获得胜利。合法的落点高亮,不合法的落点不对鼠标做出响应。 人机对战:玩家通过鼠标控制自己的棋子,AI通过搜索算法获得将要移动的棋子及移动的目标位置。AI走棋没有控制阶段但设置了完整的过渡动画。 控制面板:控制面板能够修改游戏模式、重置游戏进度、调整AI难度。 特殊规则: 兵的升变:本方任何一个兵直进达到对方底线时,即可升变为除 “王” 和 “兵” 以外的任何一种棋子。 王车易位:这是国际象棋中比较特殊的行棋规则,车和王在一些情况下可以互换位置。 吃过路兵:如果对方的兵第一次行棋且直进两格,刚好形成本方有兵与其横向紧贴并列,则本方的兵可以立即斜进,把对方的兵吃掉,并视为一步棋。 核心节点 搜索算法 deepSearch(depth, chessBoard, AIRound, parentIndex) depth 代表搜索的深度,每次递归 -1。 chessBoard 是搜索算法需要用到的棋盘数组。 AIRound 用来判断此轮搜索是否为 AI 走棋,若为AI走棋则遍...
五子棋
快速阅读 记录上学时做过的一个五子棋软件。 功能概述 可以选择玩家对战 / 人机对战的五子棋游戏。 按键控制 按键 0 1 2 3 4 5 6 7 8 9 a b c d e:控制行列线坐标 -> 开启对应线条闪动 Player1 控制时线条高亮色为红色,Player2 / AI 控制时高亮色为青色。 按键 - 清除列线闪动(列线已激活时) 清除行线闪动(列线已锁定、行线已激活时) 解锁列线 -> 开启列线闪动(列线已锁定、行线未激活时) 按键 + 锁定列线 -> 修改列线为高亮(列线已激活时) 生成棋子 -> 解锁列线 -> 取消列线高亮 -> 清除行线闪动 -> 锁定 Player1 按键 -> 解锁 Player2 按键或 AI 控制(列线已锁定、行线已激活时) 系统控制 T:显示 / 隐藏控制面板 R:切换模式(进程未结束时)/ 重置棋盘(进程已结束,棋盘已满或任意一方胜利时) Player2 对应的控制按键为:小键盘 0 1 2 3 4 5 6 7 8 9 . ↑ ← ↓ → 和 小键盘 + -...
图表编辑器
快速阅读 记录上学时做过的一个图表编辑器软件。 功能概述 基于 ECharts 实现的图表编辑器,通过点击按钮的方式选择相关配置项,自动编码并生成图表。 对于主要配置项提供不同类型的交互按钮: 输入框:data 类需要手动输入的数据,会自动错误检测。 单选框:有限个固定值的配置项。 多选框:可选用的工具类组件。 对于次要配置项,提供编码预览功能,可以在预览界面添加次要配置项代码。 核心节点 页面双向锚定、自适应图表尺寸、配置项转化为 JavaScript 代码以及错误检测的过程实现。 运行效果 五子棋国际象棋图表编辑器媒体播放器虚拟桌面贪吃蛇音频播放器
媒体播放器
快速阅读 记录大一暑假做过的一个媒体播放器软件。 功能概述 基于 JavaScript 和 Electron 实现的媒体播放器,用于播放视频和音频,可以修改播放速度、显示歌词、修改轮播逻辑、切换主题、缩放页面。 界面划分 上栏:包括白天/夜间模式切换、时间显示、媒体搜索框、消息提醒。 侧栏:包括主页、电影页、MV 页、音频页、自定义页、资源库 ABC。 主栏:显示选中的页面内容。 下栏:包括控制区、进度条、功能区。 按键控制 W A S:显示 / 隐藏上、侧、下栏 D:进入 / 退出主栏全屏 ← →:播放回退 / 播放快进 ↑ ↓:切换到上一个页面 / 下一个页面 F:进入 / 退出画中画 G:进入 / 退出视频全屏 Q:进入 / 退出缩放屏状态 R:打开 / 关闭主题窗口 T:打开 / 关闭模式窗口 V:打开 / 关闭词条窗口 B:打开 / 关闭视频窗口 1 2 3 4 5 6 7 8:切换到第 1 / 2 / 3 / 4 / 5 / 6 / 7 / 8 个页面 核心节点 轮播图:保存元素序列到数组,所有的元素横向排列,通过设定整体偏移距离实现轮播图效果。 缩略图:设...
音频播放器
快速阅读 记录大一寒假做过的一个音频播放器软件。 功能概述 基于 C语言 和 EasyX图形库 实现的音频播放器,完成了音频控制、轮播、搜索、收藏等功能。 界面划分 上栏:包括时间显示和搜索框。 侧栏:包括主页、最近播放序列、最近更新序列、音频库 ABCD。 主栏:显示选定的页面内容。 下栏:包括控制区、进度条、轮播设置。 核心节点 这是用绘图代码制作的应用程序,所有的视觉元素和视觉效果都是通过在给定坐标处重复绘制基本几何体实现的,由于绘图代码没有控件,时间轴、拖动条和所有的悬停点击交互效果都需要单独设计对应的绘图逻辑。 这种程序的优点是自由度高,可以严格实现自己的想要的效果,缺点是代码量大,很难实现平滑的过渡动画。 运行效果 实现过程 2021 年 1 月 27 日 一个基于图形库的音频播放器,看看多久可以做完… [{"url":"/img/captures/audio-player/ch2-01.jpg...
虚拟桌面
快速阅读 记录大一下学期做过的一个虚拟桌面软件。 功能概述 基于 Java Swing 实现的一个简易系统平台,可以通过类文件的方式嵌入其他程序,关闭后会保存到系统托盘。 桌面顶部的导航栏可以提供适配当前获取焦点的内嵌程序的快捷操作按钮 桌面空白区域右键点击可以修改壁纸以及对内嵌程序的快捷操作 内嵌的便笺程序完成了设置字型、颜色、换行等通用功能,桌面顶部的导航栏可以对获取焦点的便笺进行快捷操作。便笺还实现了拖拽功能,可以从外部拖动文件或字符串,也可以用文件选择器打开文件并粘贴内容到便笺中。 核心节点 Swing 提供的控件有些情况不符合预期效果,部分区域(例如右键菜单栏等)需要编写自定义控件。 应该还可以实现联网功能:在类文件中用 socket 和远程主机建立连接并返回连接状态,这样就可以接入一些联机程序,比如多人小游戏? 运行效果 五子棋国际象棋图表编辑器媒体播放器虚拟桌面贪吃蛇音频播放器
贪吃蛇
快速阅读 记录大一上学期做过的一个双人贪吃蛇游戏。 功能概述 基于 C语言 和 EasyX图形库 实现的双人贪吃蛇,引入了咬合玩法,当玩家的头部前向接触到对手的任何部位时,若咬合力(基于体长)大于此部位韧性(基于此部位到尾部的距离)则咬断对手(减少对方体长),若咬断部位为头部则玩家获胜;否则计时结束后体长最大的一方获胜。 按键控制 玩家1:W A S D 控制移动方向,SPACE 暂停移动。 玩家2:↑ ← ↓ → 控制移动方向,NUMPAD0 暂停移动。 随机位置会刷新食物,可以按键暂停自己以微调坐标。 玩家可以沿斜向共 8 个方向移动,当头部指向自己的身体时算法会自动改变玩家的方向。 核心节点 相对于 C语言 原生的黑白屏符号游戏,利用绘图代码实现的程序视觉效果上要提升很多,难点主要在于设计合适的代码结构和运行逻辑。 运行效果 备注信息 咬合力与韧性规则 咬合力 Force = 体长 / 2 韧性 Toughness = 尾部为 1,尾至头部依次 +1。 例如:体长为 5,则尾部韧性为 1,头部韧性为 5,身体部位递变。 修改游戏内置音乐 参...









