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

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

    上一篇 C#实现扫雷出炉

  • 相关阅读:
    线性时间选择
    ios理解 Pro Mutlithreading and Memory Management for iOS and OS X with ARC, Grand Central Dispatch, and Blocks
    ef
    c# 采集 获取网页数据内容 一会超时的问题
    entity4.1
    逐渐约束
    entity4.1
    ObjectContext.Refresh
    使用内存表
    MVCdropdownlist
  • 原文地址:https://www.cnblogs.com/magicdlf/p/1446526.html
Copyright © 2020-2023  润新知