新闻详情

新闻详情

首页 / 资讯中心 / 详情

除了问号基本实现了经典扫雷游戏(WPF)一(需求、思路和按钮代码)

发布时间:2026/9/5 4:21:38来源:尧图网络
除了问号基本实现了经典扫雷游戏(WPF)一(需求、思路和按钮代码)
摘要本文分享一个用 WPF 从零实现经典扫雷游戏的思路与代码。作者针对网上现成代码缺少右键排雷、首次点击不踩雷等核心体验的问题自定义了一个继承自 Button 的 GameBtn 按钮类通过 Opened 和 Signed 两个依赖属性封装打开与标记逻辑简化游戏主类设计并兼顾右键反悔等细节需求。突然想练手WPF扫雷游戏先上网查了下有不少下了几个没能找到能实现经典扫雷功能的代码尤其是右键排雷功能这可是这款游戏的灵魂还有就是第一次点击应保证不是雷问号不常用手速快的不太用省略也无妨。一、基本需求扫雷基本动作就是排雷和标记比较频繁的动作是对按钮的左击、右击判断胜利或失败记录用时它是一个坐标游戏。二、基本思路首先使用原生Button有较高复杂度打开判断、标记和周围雷数都需要数组记录好多都是这样做的所以我做了个新类继承自Button添加两个属性Opened和Signed把背景色变更和标记动作放在里面简化了游戏类的设计。其次本游戏玩复杂度较低但逻辑复杂度较高需要考虑多种情况比如右键排雷如果玩家右键按下后发现不对有一个反悔的需求怎么设计布雷看着有难度其实就几行代码只是理解有难度而已。三、基本代码一是按钮类public class GameBtn : Button { public static readonly DependencyProperty OpenedProperty; public static readonly DependencyProperty SignedProperty; public bool Opened { get { return (bool)GetValue(OpenedProperty); } set { SetValue(OpenedProperty, BooleanBoxes.Box(value)); } } public bool Signed { get { return (bool)GetValue(SignedProperty); } set { SetValue(SignedProperty, BooleanBoxes.Box(value)); } } internal static class BooleanBoxes { internal static object TrueBox true; internal static object FalseBox false; internal static object Box(bool value) { if (value) return TrueBox; else return FalseBox; } } static GameBtn() { OpenedProperty DependencyProperty.Register(Opened, typeof(bool), typeof(GameBtn), new FrameworkPropertyMetadata(BooleanBoxes.FalseBox, OnOpenedChanged)); SignedProperty DependencyProperty.Register(Signed, typeof(bool), typeof(GameBtn), new FrameworkPropertyMetadata(BooleanBoxes.FalseBox, OnSignedChanged)); } private static void OnSignedChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { if (d is GameBtn button) { if (button.Opened) { return;//已点开不操作 } else if (button.Signed) { button.Content ; button.Foreground Brushes.Red; } else { button.Content null; button.Foreground Brushes.LightGray; } } } private static void OnOpenedChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { if (d is GameBtn button) { if (button.Opened) { button.Background Brushes.LightYellow; } else { button.Background Brushes.LightGray; } } } protected override AutomationPeer OnCreateAutomationPeer() { return new ButtonAutomationPeer(this); } protected override void OnClick() { if (AutomationPeer.ListenerExists(AutomationEvents.InvokePatternOnInvoked)) { UIElementAutomationPeer.CreatePeerForElement(this)?.RaiseAutomationEvent(AutomationEvents.InvokePatternOnInvoked); } if (!Opened)//已点开左击无效 { base.OnClick(); } } }
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

使用Skill工具快速实现拼贴风格动画:前端动效实战指南 2026/9/5 5:00:44

使用Skill工具快速实现拼贴风格动画:前端动效实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
26年奇点智能大会分享C++ 与 AI 的交汇点:系统工程师在 AI 时代的技能地图与能力跃迁路径 2026/9/5 5:00:44

26年奇点智能大会分享C++ 与 AI 的交汇点:系统工程师在 AI 时代的技能地图与能力跃迁路径

大会:2026 C 及系统软件技术大会(与奇点智能技术大会同期举办) 时间:2026 年 11 月 20-21 日 地点:中国北京万达文华酒店 参会报名:奇点智能研究院 一、系统工程师的"新大陆" 大模型推理的成本与…

阅读更多 →
STM32C5驱动LSM6D3TR-C六轴IMU:I2C轮询读取陀螺仪与加速度计实战 2026/9/5 5:00:44

STM32C5驱动LSM6D3TR-C六轴IMU:I2C轮询读取陀螺仪与加速度计实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
【Linux】【shell】常用命令全称 2026/9/5 5:00:44

【Linux】【shell】常用命令全称

Shell 命令全称与含义详解 Everybody,Shell 命令是不是特别难记?哪怕记住了,如果不常用常新,也容易忘记。 就像让你记住一串不知何意的密码:cptbtptpbcptdtptp。不是记不住,就是容易记错。但要是告诉你这是“吃葡萄不吐葡萄皮,不吃葡萄倒吐葡萄皮”的拼音首字母,是不…

阅读更多 →
比尔·戴利:一个从高中辍学生到英伟达首席科学家的传奇 2026/9/5 5:00:44

比尔·戴利:一个从高中辍学生到英伟达首席科学家的传奇

导读:从高中辍学生到斯坦福硕士、加州理工博士,30岁成为MIT终身教授,比尔戴利的人生充满反叛与突破。他驾驶飞机坠海逃生后,将事故编入模拟器反复练习;拒绝英特尔高薪,押注亏损的英伟达,坚信“质…

阅读更多 →
VibeCode实践指南:构建高效开发环境与工具链整合 2026/9/5 4:57:44

VibeCode实践指南:构建高效开发环境与工具链整合

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞