这段时间比较空闲,所以就抽出一些时间自己做了一个扫雷的小游戏。期间深有感触,现总结如下:

1、这个是我从设计开始完全采用面向对象思想的程序,锻炼了我面向对象的设计能力。

2、其中对Observer Pattern、Adapter Pattern、Factory Pattern等设计模式进行了应用,加深了对设计模式的理解,也感受到了设计模式带来的好处。

3、熟悉了Java之中Swing的编程模式。

4、理解了面向对象设计法则之中的开放-封闭法则(OCP)的优点。

下面对其中一些感触比较深的地方进行叙述。

开闭法则:

·开闭法则认为我们应该试图是设计出永远也不需要改变的模块。

·我们可以添加新代码来扩展系统的行为。我们不能对已有的代码进行修改。

·符合OCP的模块需要满足两个标准:

1、可扩展,即“对扩展是开放的”(Open for Extension)  模块的行为可以被扩展,以需要满足新的需求。

2、不可改变,即“对更改是封闭的”(Closed for Modification)模块的源代码是不允许进行改动的。

我们如何去做呢?

·抽象(Abstraction)

·多态(Polymorphism)

·继承(Inheritance)

·接口(Interface)

一个软件系统的所有模块不可能都满足OCP,但是我们应该努力最小化这些不满足OCP的模块数量。

开闭法则是OO真正的核心。

符合该法则便意味着最高等级的复用性(reusability)和可维护性(maintainability)。

当时我在考虑做雷点的时候,没有多想就直接考虑swing的jbutton了,因为它已经设计好了事件的接受处理方法,并且可以直接调用,这个就是直接使用了开闭法则,对我们开发非常有利。

在编制过程之中如何取得panel之中的特定位置点的button也是困扰我的一个问题,也是由于自己以前对swing不是很熟的原因,后来认真看了关于swing layout方面的书之后知道了,我是用的gridlayout可以取得特定index的对象。

之后困扰我的是,如何在button响应事件之中作出相应的处理,由于新new了一个nest anonymous class this对象无法获取之上的对象。思考过后就用到了下面的Observer Pattern解决这个问题。

Observer Pattern的所有参与者:

ConcreteSubject(具体目标)参与者:

ConcreteSubject参与者表示实际“被观察的一方(目标)”的参与者。一旦状态有变化,就会立即通知已登录的Observer参与者。扮演这个角色的是MinePanel类。

Observer(观察者)参与者:

参与者是被Subject参与者通知“状态有变化”的参与者。通知的方法是update。扮演这个角色的是Observer接口。

ConcreteObserver(具体观察者)参与者

ConcreteObserver参与者是实际的Observer。一调用update方法时,既可以从该方法取得Subject的目前状态。扮演这个角色的是SweepMineWindow类。

Subject状态有变化

|

通知Observer

|

Observer调用Subject的方法

其类图如下:

在扩展空点与信息点的时候,我为了避免递归造成的低效率和高空间,使用了一个自己想出来的水波算法,其核心思想就是,扩展的时候以点击点为基点作出类似于水波扩展一样的空点与信息点的判断,这样更加有目的性,避免了大量的时空开销。在扩展的时候要分出来转角点与普通扩展点,然后再判断是否为雷点。这个算法的思想不是很难但是对于边界情况的判断比较复杂。

发表于 2007-07-10 23:18 stme 阅读(2253) 评论(3)  编辑  收藏 所属分类: 算法

Java扫雷游戏心得体会总结_扫雷心得 - stme - BlogJava相关推荐

  1. python读书心得体会范文_读书心得体会范文10篇

    <读书心得体会范文> 读书心得体会范文(一) : 书,陶冶了我的性情:书,丰富了我的知识:书,开阔了我的视野:书,给 予了我人生的启迪.以书相伴,人生就会有大不一样.生活能够清贫,但不能够 ...

  2. python读书心得体会范文_读书心得体会范文10篇完美版

    . <读书心得体会范文> 读书心得体会范文(一): 书,陶冶了我的性情:书,丰富了我的知识:书,开阔了我的视 野:书,给予了我人生的启迪.以书相伴,人生就会有大不一样.生 活能够清贫,但不 ...

  3. python语言的实验心得体会范文_实验心得体会范文

    ★精品文档★ 2016 全新精品资料 - 全新公文范文 - 全程指导写作 – 独家原创 1 / 6 实验心得体会范文 实训心得体会: 为期一周的高频电子线路实训就这样告 一段落了,我们通过这一周紧锣密 ...

  4. python读书心得体会范文_读书心得体会600字_关于读书的心得体会范文(3篇)

    读书心得体会 600 字 _ 关于读书的心得体会范文 (3 篇 ) 读书心得体会 600 字 ( 一 ) 在鲁迅的小说中,<伤逝>是最令我喟叹的一篇,看 过后很久都不能释怀.子君给了我相当 ...

  5. python读书心得体会范文_读书心得体会范文五篇-读书心得体会

    读书心得体会范文五篇 - 读书心得体会 读书心得体会 莎士比亚说过:生活里没有了书籍,就像没有了阳光 ; 智慧里没 有了书籍就像鸟儿折断了翅膀.列宁也曾说过:书籍是巨大的力量. 书籍是人类进步的阶梯. ...

  6. python读书心得体会范文_读书心得体会范文(通用3篇)

    读书心得体会范文(通用 3 篇) 读书心得体会范文 在平日里, 心中难免会有一些新的想法, 好好地写一份心得体会, 这样我们可以养成良好的总结方法. 那么如何写心得体会才能更有感 染力呢?下面是精心整 ...

  7. python语言的实验心得体会范文_实验心得体会四篇

    实验心得体会四篇 导读: 本文 实验心得体会四篇,仅供参考,如果能帮助到您,欢迎点 评和分享. 下面是整理的实验心得体会范文,欢迎阅读参考. 实验心得体会 ( 一 ) 时间过得真快,不经意间,一个学期 ...

  8. python语言的实验心得体会范文_实验心得体会-精选范文

    第 1 页 2019 年实验心得体会 我们做实验不要一成不变和墨守成规, 应该有改良创新的精 神. 实际上, 在弄懂了实验原理的基础上, 我们的时间是充分的, 做实验应该是游刃有余的,如果说创新对于我 ...

  9. python读书心得体会范文_读书心得体会范文_600字

    书是我的一只美丽的小船. 在人生的海洋里,它载着我,驶向许多奇妙的港口岛屿.甚至在险骏的礁岩. 无论在日丽还是在有风的天气里,我和它在一起,在碧波或恶浪中行进.仿佛有只看不见的手,指点着那些海市蜃楼一 ...

最新文章

  1. (ASA) Cisco Web ××× 配置详解 [三部曲之一]
  2. 如何判断一家互联网公司要倒闭了?
  3. Handler源码剖析
  4. 用批处理修复 win10 无法升级的问题
  5. MATLAB安装第三方工具箱
  6. C/C++:各类型变量占用字节
  7. gocd_如何将DangerJS集成到GoCD管道中
  8. 同步方法中的锁对象_互斥锁与读写锁:如何使用锁完成Go程同步?
  9. 语音会议源代码_线上语音群聊神器!开会开黑都好用,免注册、免安装,还免费...
  10. Oryx 2.1.2版本: src源码编译
  11. SQLServer 事务、锁、阻塞
  12. Python之logging模块
  13. java学习笔记 --- 面向对象3
  14. win8.1装载windows和linux双系统
  15. Artifact “xxx - xxxx“:war exploded:部署工件时出错。请参阅服务器日志了解详细信息
  16. Matplotlib、PIL Image如何将多张图片整合保存为一张图片
  17. HTML身份证号校验及根据身份证号获取出生日期/性别
  18. vue element-ui的嵌套dialog遮罩层
  19. JAVA静态代理与动态代理(JDK和CGLIB)
  20. ffmpeg学习(11)音视频文件muxer(2)多输入混流

热门文章

  1. 1969年图灵奖--马文·明斯基生平
  2. java中GRID_size的作用_Grid布局简介
  3. PHP empty()
  4. TX2 Install OpenCV(4.0.0)
  5. 实践是检验真理的唯一标准!!LoopBack 设置案例!
  6. 解决usb otg线系统重启的问题
  7. 海康 综合安防管理平台 对接
  8. Windows10 InsiderPreview 10074 安装体验
  9. 移动端对比后端逐渐“式微”?在互联网大环境下如何避免久当生锈的”螺丝钉”去成为一个优秀的Android开发者?
  10. 【论文阅读】Regional Semantic Contrast and Aggregation for Weakly Supervised Semantic Segmentation