龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > asp.net编程 >

Silverlight游戏开发系列:Silverlight实现"宝石迷阵"游戏

时间:2009-12-21 11:47来源:未知 作者:admin 点击:
分享到:
提示功能需要当前关卡所得分数超过100分才能使用。 宝石迷阵这个游戏的规则很简单,通过交换两个相连宝石的位置,使横着或竖着的相连并相同的宝石超过三个,然后消除它们,相同

提示功能需要当前关卡所得分数超过100分才能使用。

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

 

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


bijou.cs
        /// <summary>
        /// 宝石所在的列
        /// </summary>
        public int Column
        {
            get
            {
                return this._column;
            }
            set
            {
                Grid.SetColumn(this, value);
                this._column = value;
            }
        }

        private int _row;
        /// <summary>
        /// 宝石所在的行
        /// </summary>
        public int Row
        {
            get
            {
                return this._row;
            }
            set
            {
                Grid.SetRow(this, value);
                this._row = value;
            }
        }


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


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

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

 

索引器
        /// <summary>
        /// 通过列号和行号获取bijou
        /// </summary>
        /// <param name="Column">列号</param>
        /// <param name="Row">行号</param>
        /// <returns>bijou</returns>
        public bijou this[int Column, int Row]
        {
            get
            {
                return bijous[Column, Row];
            }
            set
            {
                if (value != null)
                {
                    value.Column = Column;
                    value.Row = Row;
                    bijous[Column, Row] = value;
                    if (!LayoutRoot.Children.Contains(value))
                    {
                        this.LayoutRoot.Children.Add(value);
                    }
                }
                else
                {
                    bijous[Column, Row] = null;
                }
            }
        }

 

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


精彩图集

赞助商链接