玩无限消乐的设计示例(基础篇)改进拖放动画元素操作

本文介绍了一款改进版消除游戏的设计实现,重点在于拖放动画元素的操作及配合消除动画元素的功能改进。文中详细解释了游戏核心逻辑,包括元素交换、动画消除等过程,并实现了不限于相邻元素交换的游戏规则。

配合消除动画元素操作的完成,改进拖放动画操作。

        private void 玩无限消乐_DragDrop(object sender, DragEventArgs e)
        {
            Point 平面二维 = 玩无限消乐.PointToClient(new Point(e.X, e.Y));
            int 拖到行 = 玩无限消乐.HitTest(平面二维.X, 平面二维.Y).RowIndex, 拖到列 = 玩无限消乐.HitTest(平面二维.X, 平面二维.Y).ColumnIndex;
            DataGridViewCell 拖到单元 = 玩无限消乐.Rows[拖到行].Cells[拖到列];
            DataGridViewCell 选定单元 = 玩无限消乐.Rows[选定坐标[1]].Cells[选定坐标[2]];
            /*限制条件是有特殊标记的不被交换,交换元素可以选中盘的任何位置元素,而不做只能相邻才能交换的限制,这一点与其他消除规则有些不同,之下注释掉的语句就是一种限制条件。*/
            //if (Math.Abs(选定坐标[1] - 玩无限消除.HitTest(平面二维.X, 平面二维.Y).RowIndex) <= 1) if (Math.Abs(选定坐标[2] - 玩无限消除.HitTest(平面二维.X, 平面二维.Y).ColumnIndex) <= 1)
            if ((int)拖到单元.Tag != 0 && (int)选定单元.Tag != 0)
            {
                选定单元.Value = 拖到单元.Value;
                选定单元.Tag = 拖到单元.Tag;
                拖到单元.Value = 选定坐标[0] == 0 ? new Bitmap("动画素材/e136.gif") : new Bitmap("动画素材/e" + 选定坐标[0].ToString() + ".gif");
                拖到单元.Tag = 选定坐标[0];
                bool 消除行 = (消除动画(拖到行, 拖到列, (int)拖到单元.Tag)),
                     消除列 = (消除动画(拖到行, 拖到列, (int)拖到单元.Tag, true)), 复原 = true;
                if (消除行 || 消除列)/*目标处动画消除。*/
                {
                    拖到单元.Value = new Bitmap("动画素材/e136.gif");
                    拖到单元.Tag = 0;
                    复原 = false;
                    填充检测(选定坐标[4], 选定坐标[5]);
                }
                消除行 = (消除动画(选定坐标[1], 选定坐标[2], (int)选定单元.Tag));
                消除列 = (消除动画(选定坐标[1], 选定坐标[2], (int)选定单元.Tag, true));
                if (消除行 || 消除列)/*拖动处动画消除。*/
                {
                    选定单元.Value = new Bitmap("动画素材/e136.gif");
                    选定单元.Tag = 0;
                    复原 = false;
                    填充检测(选定坐标[4], 选定坐标[5]);
                }
                if (复原)/*如果拖动的动画元素没被消除则恢复原先位置。*/
                {
                    拖到单元.Value = 选定单元.Value;
                    拖到单元.Tag = 选定单元.Tag;
                    选定单元.Value = 选定坐标[0] == 0 ? new Bitmap("动画素材/e136.gif") : new Bitmap("动画素材/e" + 选定坐标[0].ToString() + ".gif");
                    选定单元.Tag = 选定坐标[0];
                    检查可消();
                }
            }
        }

至此,这个游戏的基础部分就设计完成了,也就是说可以玩了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值