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

推荐订阅源

人人都是产品经理
人人都是产品经理
Stack Overflow Blog
Stack Overflow Blog
S
SegmentFault 最新的问题
博客园 - 司徒正美
aimingoo的专栏
aimingoo的专栏
U
Unit 42
GbyAI
GbyAI
B
Blog RSS Feed
博客园 - Franky
L
LangChain Blog
Hugging Face - Blog
Hugging Face - Blog
美团技术团队
The GitHub Blog
The GitHub Blog
Y
Y Combinator Blog
云风的 BLOG
云风的 BLOG
H
Hackread – Cybersecurity News, Data Breaches, AI and More
博客园 - 三生石上(FineUI控件)
Microsoft Azure Blog
Microsoft Azure Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
G
Google Developers Blog
Last Week in AI
Last Week in AI
阮一峰的网络日志
阮一峰的网络日志
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Apple Machine Learning Research
Apple Machine Learning Research

博客园 - 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#实现扫雷出炉