再谈C#扫雷

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

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()等接口来使界面发生变化.这样做的好处显而易见:在实现逻辑的时候,我们不需要关心显示的细节,这样程序的结构看上去就会更清晰一些.

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

时间: 2024-10-26 18:06:55

再谈C#扫雷的相关文章

再谈IO的异步,同步,阻塞和非阻塞

原本转过一个<六种Socket I/O模型幽默讲解>,里面用比喻的方法讲解各种IO,但说到底那个时候我对同步异步这些还是只知其表.还未能完全理解异步和同步,现在觉得清晰一些了.总结一下. 前提概要: IO的过程: 整个IO的过程其实是应用发起IO的请求,到应用获取到IO请求数据的中间过程. 这个中间,其实主要的时间就是系统准备数据的过程.这也是异步技术的优化所在. 对系统调用的理解: 首先,我们要明确一点.IO的操作属于一种系统调用.也就是应用在运行中,进入到内核代码来执行某些重要的操作. 其

再谈ASP防止SQL Injection漏洞的问题

问题 再谈ASP防止SQL Injection漏洞的问题 /**作者:慈勤强Email: cqq1978@Gmail.com*/ 关于Asp的SQL Injection预防问题,似乎已经没什么可说的了.在我做的Asp的项目里面, 都是用自己写的函数来处理客户端提交进来的数据,我的Blog里面也贴过这个函数. 具体可以参考http://blog.csdn.net/cqq/archive/2004/09/23/113786.aspx 不过,从朋友的留言和网上其他的一些讲如何防范SQL Injecti

用户交互设计:再谈人机交互中的设计隐喻

文章描述:再谈人机交互中的设计隐喻. 上篇文章<人机交互中的设计隐喻-由Mac的文件替换引出来的话题>发出来以后收到了各种各样的反馈,我索性再写一篇续文,算是集中答复吧. 用户习惯 在所有的反馈中,"用户觉得Windows的做法更好用,所以理应这样设计"的说法可谓最多.那么我们就来看一下,为什么有人会觉得Windows的做法更"好用". 我们来看两个例子. 银行里面用的系统-就是柜台后面业务人员用的那个-基本上还是字符界面,没有漂亮的图标和窗口,甚至可能

网页设计经验分享:再谈网易首页的改版

之所以说再谈网易首页的改版,是因为去年临近奥运会的时候,网易首页做过一次改版,奥运会之后网易首页做了一下小调整,调整后的首页让人感到很困惑.今天在没有任何预告的前提下,网易又上线了新首页. 其间有个小插曲是,新首页刚上线后,很多地区突然无法访问网易首页,我访问的时候是服务器返回500. 网易就此次改版的说明是:"本次改版从整体到细节都有一个质的飞跃,新版继承了网易一贯简约.大气.包容的设计品质,达到以用户为中心提高用户体验.促进频道发展的改版设计目的." 此次改版促进频道发展的目的似乎

走近VB.Net(二) 再谈函数调用

函数 走近VB.Net(二) 再谈函数调用 在VB6中如果你想调用一个对话框,首先你知道要使用vb内置的MsgBox函数,你甚至于使用API,大部分人乐于使用API.如下:Public Declare Function MessageBox Lib "user32" Alias "MessageBoxA" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wTy

再谈CMOS密码

对于CMOS而言,相信大家已经不再陌生.但就CMOS密码而言,我想真正了解的人就不太多了,所以我们就做了些实验,研究了一下.以前已经有不少人讨论过了,但我觉得还是有再谈的必要,下面就把其中合适的部分拿出来,以飨各位. 在谈密码之前,还是先说说什么是CMOS(本文所言CMOS均针对Award而言).CMOS实际上存放的是计算机的系统时钟和硬件配置方面的一些信息,供系统引导时读取:同时初始化计算机各个部件的状态,总共有128个字节,存放在RAM芯片中. 好了,先看一个例子,用来向大家说明一下CMOS

再再谈java乱码:GBK和UTF-8互转尾部乱码问题分析(续)

GBK字节码用UTF-8解码 UTF-8 的编码规则 转码实例 解决问题 jdk 18 测试 jdk 1617 jdk 版本的影响 小结 参考 在<再谈java乱码:GBK和UTF-8互转尾部乱码问题分析>我们分析了,如果从一个UTF-8 的字节序列,经过 new String(b,"GBK") 的操作,"可能"(与总字节数有关)会破坏数据.结果可能是,损失最后一个"字". 反过来呢?可能会很惨,大范围溃散... 同时,可参考:一段j

【Go语言】【13】再谈GO语言的结构体

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://qingkechina.blog.51cto.com/5552198/1671842 本文从如下四个方面再领着大家认识结构体 匿名结构体和匿名成员的结构体 值传递和引用传递 再谈嵌套结构体 面向对象 1.匿名结构体和匿名成员的结构体 如上篇所述,一个结构体需要先声明,再初始化,最后把初始化后的结构体赋值给其它变量,例如: /*声明结构体*/ type employee struc

[译]再谈如何安全地在 Android 中存储令牌

本文讲的是[译]再谈如何安全地在 Android 中存储令牌, 原文地址:A follow-up on how to store tokens securely in Android 原文作者:Enrique López Mañas 译文出自:掘金翻译计划 译者: lovexiaov 校对者:luoqiuyu hackerkevin 作为本文的序言,我想对读者做一个简短的声明.下面的引言对本文的后续内容而言十分重要. 没有绝对的安全.所谓的安全是指利用一系列措施的堆积和组合,来试图延缓必然发生的