



























平时有人问我业余时间会做点儿什么?
我说:用WPF写个游戏玩玩。
:写的什么?
我:扫雷。
:……
我:想想都写了快两年了。
:orz
单纯地讲扫雷游戏都会觉得很简单,都不好意思当个事儿,我一开始也是这样觉得。写着写着才发现,事情其实没有想象中的那么简单。先给大家上个图看看效果吧。
写这个扫雷程序的主要目的,并不是练习WPF,也不是用WPF复刻Windows自带的这个游戏。这两件事儿其实都不至于做两年。(当然不是持续的两年,连续讲的话,是三个月的晚上吧。)
写这个扫雷程序,是想探究桌面应用程序开发的最佳实践和模式,也能成为自己这几年WPF工作的一个沉淀。而扫雷,只因为其功能相对简单却比较齐全而被我选为一个载体。
回想起自己刚刚学习WPF第一个年头,单是日历控件就先后做了三遍。从第一遍的拿Button当日期,翻月都卡;到最后考虑使用者的便利度、主题的支持、模板的使用。真的是一个很明显的成长的过程。这个扫雷程序,虽然是我工作的沉淀,但是我并不追求一开始的完美,反而我会希望他一开始并不完美,从而能展现出越变越好的一个过程。而这个过程,才是最宝贵的。如果有时间,也许我会写个系统博客,讲述自己开发这个游戏的心路历程。
虽然从大学开始就开始看设计模式这样的书,但是我不得不承认,那个时候看了也是白看。没有直面过严峻的问题的考验,没有自己摸索着真正使用模式,是不可能真正理解模式的。也许能认识这个模式,但是不知道这个模式应该在什么时候用,用在什么地方,用的合适不合适。而开始开发扫雷这个程序的时候,我排空了自己所有的模式、设计上的知识,基本靠感觉写。希望可以再次体验那种,发现问题、解决问题、抽象成模式的美妙感觉。所以在这个项目里,你看不到任何第三方的库,第三方库在帮我们解决问题同时,也带走了我们自己学习、发现的机会。这个扫雷做到现在,已经先后两年时间,都是在期间有了新的灵感,又重新开始了这个项目的开发。比如学习完Android开发之后,觉得里面的Intent和Broadcast都是不错的设计,就引入了这个扫雷项目里。
既然把这个扫雷当成是工作的沉淀,当然还要保留它应有的功能。在这个程序里,我尽可能多地引入一些WPF的特性或功能。比如自定义Effect什么的。希望自己在以后有机会再用到WPF的时候,在这个扫雷游戏的帮助下,能够回忆起这些细节,并能把里面的代码或是框架进行征用。
这个游戏还没有写完,按这个进度,要完成我想象中的功能可能还要5年时间吧。目前已经实现的功能包括。
下面是插件对话框的截图。
下面是改进的英雄榜。
在这个英雄榜上可以看到每次游戏的结果。
以后如果有时间,我是希望这个扫雷可以支持如下的几个功能。
这个项目现在放在了codeplex上,大家有兴趣可以玩玩看啊。不过编译起来可能会比较麻烦,里面的自定义Effect可能会默认Build不过,除非你安装了Shader Build Task。不过Effect里面有Readme,介绍了两种Build的方法,一步步来应该没有问题的。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。