最近用silverlight做个拼图游戏,找到一个参考网站http://www.silverlightshow.net/items/Silverlight-n-Puzzle-Game.aspx感觉介绍的非常不错,可惜没有源码参考,所以按照其主题思想做个。
1.开发环境vs2008+Microsoft Expression Blend 2,vs2008得安装sp1才会有有silverlight模板工程
2.先新建个silverlight工程,其会附加一个web测试的工程,然后再建个wcf的图像服务工程
解决方案结构:
3.下面开始讲讲原理了,先看看各个类的结构图
首先有个PuzzlePiece类,其主要是拼图中每个块的类(当时受上面文章介绍的影响,其实主要作用的应该是那个用户控件uctrlPuzzlePiece),该类有个静态成员NullPuzzlePieceInstance表示拼图中那个空白块,该类主要是个实体类没什么;然后创建一个IPuzzleModel接口,其主要负责整个游戏的逻辑,包括游戏的拼图打乱、重置、判断输赢、玩家事件等,PuzzleModel实现PuzzleModel接口,下面讲讲PuzzleModel中的方法实现
1)CheckForWin,很简单,先检查空白块是否在右下角,然后foreach所有块,看其number是否等于(row-1)*拼图维度+column
2)GetMoveStatus,就是被检查的块和NullPuzzlePieceInstance的位置比较,然后得出其能移动的方向
3)IsEmptyCell,受上面文章影响,好像没用到
4)MixPuzzle,为了使拼图可解,不能随意打乱,因为有些情况是无解的,所以这里采用模拟打乱的方法,主要就是从完整的拼图随即一个方向(x或y),把空白块朝某个方向连续移动随机个位置,就可以模拟打乱了
5)MovePiece,就是将一个块移动,其会根据其可以状态移动
6)PieceMoveEvent+OnPieceMoved,触发移动事件
7)ResetPuzzle,使游戏中的所有块位置重置 就是Number=(row-1)*拼图维度+column,并使移动计数器清零
其中有些渐隐的效果,主要是用Storyboard来做
如放上去的效果:
然后就是用wcf获取游戏图片和分割图片,wcf跨域访问得需要一个clientaccesspolicy.xml配置文件,具体内容:
运行效果:
最后想说的是,我刚做出来后,刚才那个网站就把源码发布了,真晕。。。。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。