初学Silverlight,用它写了一个小游戏“宝石迷阵”

游戏在此,鼠标右键可以安装到本地喔!
提示功能需要当前关卡所得分数超过100分才能使用
获取 Microsoft Silverlight

学习一个东西最好的办法就是去用它。这句话一点没错,通过写这个游戏,确实让我初窥了Silverlight的门径。

 

本来还有很多需要完善的地方比如音效、开始菜单动画以及一些高级玩法。不巧最近鼻炎发作,头痛难耐,实在是提不起精神来完善它了,索性就放出来吧。

 

宝石迷阵这个游戏的规则很简单,通过交换两个相连宝石的位置,使横着或竖着的相连并相同的宝石超过三个,然后消除它们,相同的越多,所得分数就越高。当交换位置后没有可消除的宝石,就把这两个相连的宝石的位置还原。

 

bijou 来表示宝石,宝石具有ColumnRow这两个属性。像这两个属性赋值时,也就修改了宝石在Grid控件里的位置:

bijou.cs

用一个二维数组来存储所有宝石的信息

private bijou[,] bijous = new bijou[MaxColumn, MaxRow];

 

现在,要实现通过bijous[Column, Row] 来得到指定行和列的宝石的引用。就要保证每一个宝石在bijous中的位置不会错误,并且在Gird中的行和列也要和bijous数组的索引值一样。为此,我实现了一个索引器


 

索引器

 

在游戏中,每一个宝石都可以上下左右移动(除了位置在边缘的宝石),所以,我写了4个方法,作用是把指定宝石向四个方向移动,并指定其在没有可消除宝石的情况下是否还原。

下面贴出Up方法的代码:

 

Up

 

检测是否可消除,我用了一个全局检测的办法,当一个宝石执行换位操作时,执行检测是否可消除的方法,如果有可消除的宝石,返回宝石的List列表,如果没有,返回null


 

GetErasablebijou


 

接下来,就是消除宝石的方法,它接受一个List<bijou>参数,删除里面所有的bijou并以动画显示出来。


 

RemoveListBijou

 

消除该消除的宝石后,并不能直接在原位上填充新的宝石,这里需要一个动画效果,简单的模拟真实物理环境:上方的宝石会因为下面的宝石的消失而下落,新填充的宝石会在被消除宝石的那一列的0行出现,为此,要实现一个方法“FillNull

 

FillNull

 

整个游戏的流程大概就是这样了。下面放出源代码。
https://files.cnblogs.com/zhubenwuzui/BejeweledRelease.rar

由于本人是学生+新手,写出的代码肯定有很多缺陷,还请大家多多指教!
QQ:234446552(加我时请注明来自博客园)
本文地址:http://www.cnblogs.com/zhubenwuzui/archive/2009/09/13/BejeweledbySilverlight.html
准备转载本文的各大网站的编辑们,在转载的同时请保留本文的链接并注明出处,谢谢!

原文地址:https://www.cnblogs.com/DreamCreator/p/BejeweledbySilverlight.html