惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

阮一峰的网络日志
阮一峰的网络日志
D
Darknet – Hacking Tools, Hacker News & Cyber Security
S
Schneier on Security
The Last Watchdog
The Last Watchdog
Cyberwarzone
Cyberwarzone
S
Securelist
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
C
Cyber Attacks, Cyber Crime and Cyber Security
L
Lohrmann on Cybersecurity
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 司徒正美
The Cloudflare Blog
V
V2EX
博客园_首页
博客园 - 聂微东
Vercel News
Vercel News
人人都是产品经理
人人都是产品经理
G
GRAHAM CLULEY
T
Tenable Blog
Last Week in AI
Last Week in AI
Y
Y Combinator Blog
L
LINUX DO - 最新话题
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
SecWiki News
SecWiki News
博客园 - 三生石上(FineUI控件)
S
Secure Thoughts
N
News | PayPal Newsroom
T
The Blog of Author Tim Ferriss
The GitHub Blog
The GitHub Blog
T
Troy Hunt's Blog
博客园 - 【当耐特】
Forbes - Security
Forbes - Security
H
Hacker News: Front Page
A
About on SuperTechFans
B
Blog RSS Feed
Engineering at Meta
Engineering at Meta
MongoDB | Blog
MongoDB | Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
罗磊的独立博客
D
DataBreaches.Net
P
Privacy & Cybersecurity Law Blog
Schneier on Security
Schneier on Security
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Google DeepMind News
Google DeepMind News
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Jina AI
Jina AI
D
Docker
P
Proofpoint News Feed

博客园 - magicdlf

[HIMCM暑期班]第4课: 扑克牌问题 [HIMCM暑期班]第3课:一个博弈问题 [HIMCM暑期班]第2课:建模 [HIMCM暑期班]第1课:概述 [C#]ASP.NET MVC 3 在线学习资料 [HIMCM]Consortium可以免费下载了! [C#]在Windows Service中使用ThreadPool [HIMCM]MathType小练习 [C#]DataGridView中使用数据绑定Enum类型 SRM 518 解题报告 SRM 522 解题报告 SRM 521 解题报告 [原创]简易版Socket聊天室 附源码 C#实现扫雷出炉 如何通过P/Invoke返回Struct和String Array 计算文件的散列值 zz .NET抽象工厂模式 from cnblogs 清空VSTFS cache 如何在VSTFS中设置email notification
再谈C#扫雷
magicdlf · 2009-04-29 · via 博客园 - magicdlf

看来大家都很喜欢扫雷这个话题啊. 感谢大家指出了我代码里的问题,这里徐小侠写了一个很好的实现:

http://www.cnblogs.com/Chinese-xu/archive/2009/04/29/1446415.html 

同时他指出我并没有完全按照面向对象的方法来设计,其实这个起源于我设计时候的一个初衷,在这里澄清一下.

我一开始实现只个MineControl的时候,并没有考虑要将所有的逻辑都放到MineControl Class中. 我认为MineControl其实和WinForm里的普通Button,Label之类的没有区别,都是一个View,用来显示的. 只不过MineControl是专用来显示扫雷中的一个Button的,所以会有123456789,flag,questionmark等不同的显示状态. 简单地说,MineControl负责的是如何显示的问题,至于什么时候显示,显示什么,这些逻辑都应该要和控件剥离. 在我的设计里,MineControl只是一个View,具体的逻辑都不应该出现在其中.

所以大家可以看到在我的代码中,一些具体的逻辑,比如鼠标左键MouseDown,左右键双击,点中空白区域等等,这些具体的逻辑都是在Form1里实现的. Form1根据用户的输入,来确定这些MineControl应该的表现是什么,再通过Unseal(),Press()等接口来使界面发生变化.这样做的好处显而易见:在实现逻辑的时候,我们不需要关心显示的细节,这样程序的结构看上去就会更清晰一些.

其实每个人的对程序设计都会有自己的理解, 这样的讨论受益良多,我相信多看看别人的实现,对自己的提高是有很大帮助的. ^^

上一篇 C#实现扫雷出炉