定义方块的类:

View Code

public class Block : Canvas{private Uri _baseUri = new Uri("ms-appx:///");/// <summary>/// 宝石的图片/// </summary>public string ImageSource{set{BitmapImage bitmap = new BitmapImage(new Uri(_baseUri, value));ImageBrush ib = new ImageBrush();ib.ImageSource = bitmap;this.Background = ib;}}private int _type;public int Type{get{return _type;}set{this._type = value;this.ImageSource = string.Format("Images/{0}/{0}_{1}.png", value, 1);}}DispatcherTimer dispactherTimer = new DispatcherTimer();/// <summary>/// 当前播放帧数/// </summary>int count = 1;private int _column;private int _row;public int Column{get {return _column;}set{_column = value;Grid.SetColumn(this, value);}}public int Row{get{return _row;}set{_row = value;Grid.SetRow(this, value);}}public bool isMouseLeftButtonDown { get; set; }public Block(int type, int column, int row){this.Type = type;this.Column = column;this.Row = row;this.PointerPressed += Block_PointerPressed;this.PointerReleased += Block_PointerReleased;this.PointerEntered += Block_PointerEntered;this.PointerExited += Block_PointerExited;isMouseLeftButtonDown = false;dispactherTimer.Tick += dispactherTimer_Tick;dispactherTimer.Interval = TimeSpan.FromMilliseconds(25);}public Block(int column, int row){this.Column = column;this.Row = row;this.Type = 0;}void dispactherTimer_Tick(object sender, object e){BitmapImage bitmap = new BitmapImage(new Uri(_baseUri, string.Format("Images/{0}/{0}_{1}.png", Type, count)));ImageBrush ib = new ImageBrush();ib.ImageSource = bitmap;this.Background = ib;count = count == 20 ? 1 : count + 1;}void Block_PointerExited(object sender, Windows.UI.Xaml.Input.PointerRoutedEventArgs e){RollStop();}void Block_PointerEntered(object sender, Windows.UI.Xaml.Input.PointerRoutedEventArgs e){Roll();}void Block_PointerReleased(object sender, Windows.UI.Xaml.Input.PointerRoutedEventArgs e){isMouseLeftButtonDown = false;this.ReleasePointerCapture(e.Pointer);}void Block_PointerPressed(object sender, Windows.UI.Xaml.Input.PointerRoutedEventArgs e){isMouseLeftButtonDown = true;this.ReleasePointerCapture(e.Pointer);}public void Hint(){Roll();}private void Roll(){dispactherTimer.Start();}private void RollStop(){dispactherTimer.Stop();count = 1;this.Type = this.Type;}}

画布Xaml:

View Code

<UserControlx:Class="Win8_Bejeweled.Controls.BlockMainGame"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="using:Win8_Bejeweled.Controls"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"mc:Ignorable="d"Width="512" Height="512"><UserControl.Resources><Storyboard x:Name="sbAll" Completed="sbAll_Completed_1"></Storyboard></UserControl.Resources><Grid x:Name="LayoutRoot"PointerPressed="LayoutRoot_PointerPressed_1"PointerMoved="LayoutRoot_PointerMoved_1"PointerReleased="LayoutRoot_PointerReleased_1"><Grid.RowDefinitions><RowDefinition/><RowDefinition/><RowDefinition/><RowDefinition/><RowDefinition/><RowDefinition/><RowDefinition/><RowDefinition/></Grid.RowDefinitions><Grid.ColumnDefinitions><ColumnDefinition/><ColumnDefinition/><ColumnDefinition/><ColumnDefinition/><ColumnDefinition/><ColumnDefinition/><ColumnDefinition/><ColumnDefinition/></Grid.ColumnDefinitions><Grid.Background><!--   注意路劲前面加 /--><ImageBrush ImageSource="/Images/board.png" /></Grid.Background></Grid>
</UserControl>

cs:

View Code

 public sealed partial class BlockMainGame : UserControl{/// <summary>/// 动画是否正在播放/// </summary>public bool AnimationIsPlaying { get; set; }/// <summary>/// 点击坐标/// </summary>private PointerPoint mouseUpBeforePoint;/// <summary>/// 宝石矩阵/// </summary>public Block[,] blocks = new Block[MaxColumn, MaxRow];const int MaxColumn = 8;const int MaxRow = 8;/// <summary>/// 更新分数/// </summary>public Action<int> UpdateScore;/// <summary>/// 获得分数/// </summary>public Func<int> GetScore;Random random = new Random();public Block this[int column, int row]{get{return blocks[column, row];}set{if (value != null){value.Column = column;value.Row = row;blocks[column, row] = value;if (!this.LayoutRoot.Children.Contains(value)){this.LayoutRoot.Children.Add(value);}}else{blocks[column, row] = null;}}}public BlockMainGame(){this.InitializeComponent();}public void InitGame(){this.Visibility = Visibility.Collapsed;for (int row = 0; row < MaxRow; row++){for (int column = 0; column < MaxColumn; column++){int type = GetRandomNum();Block block = new Block(type, column, row);this[column, row] = block;}}#region 替换可以消除的石头while (true){var nearBlock = GetErasableBlock();if (nearBlock != null){foreach (Block block in nearBlock){int type = GetRandomNum();this.LayoutRoot.Children.Remove(block);this[block.Column, block.Row] = new Block(type, block.Column, block.Row);}}else{break;}}#endregion#region 初始化动画Storyboard sbDown = new Storyboard();Resources.Add("sbDown", sbDown);sbDown.Completed += (object sender, object e) =>{var sb = sender as Storyboard;sb.Stop();Resources.Remove("sbDown");foreach (var item in blocks){item.RenderTransform.SetValue(TranslateTransform.YProperty, 0.0);}AnimationIsPlaying = false;};for (int column = 0; column < MaxColumn; column++){for (int row = 0; row < MaxRow; row++){Block block = this[column, row];block.RenderTransform = new TranslateTransform();block.RenderTransform.SetValue(TranslateTransform.YProperty, -1024.0);AddAnimationToStoryboard(sbDown, block.RenderTransform, "Y", 0.0, TimeSpan.FromMilliseconds(2500 - row * 200));}}this.Visibility = Visibility.Visible;BeginAnimation(sbDown);#endregion}public int GetRandomNum(){long tick = DateTime.Now.Ticks;Random r = new Random((int)(tick & 0xffffffffL) | (int)(tick >> 32));return r.Next(1, 8);}private void sbAll_Completed_1(object sender, object e){Storyboard sb = sender as Storyboard;sb.Stop();AnimationIsPlaying = false;}/// <summary>/// 向Storyboard添加动画/// </summary>/// <param name="dobj">动画目标</param>/// <param name="property">被改变的值</param>/// <param name="to">动画完毕后的最终值</param>/// <param name="Duration">动画持续时间</param>/// <param name="eh">动画的完成事件处理程序</param>public void AddAnimationToStoryboard(DependencyObject dobj, string property, double to, TimeSpan Duration, EventHandler<object> eh){DoubleAnimation da = new DoubleAnimation();Storyboard.SetTarget(da, dobj);Storyboard.SetTargetProperty(da, property);da.To = to;da.Duration = new Duration(Duration);da.Completed += eh;sbAll.Children.Add(da);}/// <summary>/// 向Storyboard添加动画/// </summary>/// <param name="dobj">动画目标</param>/// <param name="property">被改变的值</param>/// <param name="to">动画完毕后的最终值</param>/// <param name="Duration">动画持续时间</param>public void AddAnimationToStoryboard(DependencyObject dobj, string property, double to, TimeSpan Duration){DoubleAnimation da = new DoubleAnimation();Storyboard.SetTarget(da, dobj);Storyboard.SetTargetProperty(da, property);da.To = to;da.Duration = new Duration(Duration);sbAll.Children.Add(da);}/// <summary>/// 向Storyboard添加动画/// </summary>/// <param name="sb">目标Storyboard</param>/// <param name="dobj">动画目标</param>/// <param name="property">被改变的值</param>/// <param name="to">动画完毕后的最终值</param>/// <param name="Duration">动画持续时间</param>/// <param name="eh">Storyboard完成事件处理程序</param>public void AddAnimationToStoryboard(Storyboard sb, DependencyObject dobj, string property, double to, TimeSpan Duration){DoubleAnimation da = new DoubleAnimation();Storyboard.SetTarget(da, dobj);Storyboard.SetTargetProperty(da, property);da.To = to;da.Duration = new Duration(Duration);sb.Children.Add(da);}/// <summary>/// 开始动画,使用默认的sbAll/// </summary>public void BeginAnimation(){AnimationIsPlaying = true;sbAll.Begin();}/// <summary>/// 开始指定的Storyboard动画/// </summary>public void BeginAnimation(Storyboard sb){AnimationIsPlaying = true;sb.Begin();}/// <summary>/// 获得可以被消除的宝石列表/// </summary>/// <returns>可以被消除的宝石列表,返回值为null表示不可消除</returns>public List<Block> GetErasableBlock(){List<Block> columnSameBlock = new List<Block>();List<Block> rowSameBlock = new List<Block>();#region 检测横着排列的是否可消除并保存可消除的宝石到columnSameBlockfor (int row = 0; row < MaxRow; row++){int sameNum = 0;bool find = false;for (int column = 0; column < MaxColumn; column++){while (true){if (column < MaxColumn - 1 && this[column, row].Type == this[column + 1, row].Type){sameNum++;column++;}else{if (sameNum >= 2){for (; sameNum >= 0; sameNum--){columnSameBlock.Add(this[column - sameNum, row]);}find = true;break;}else{sameNum = 0;}break;}}if (find)break;}if (find)break;}#endregion#region 检测竖着排列的是否可消除并保存可消除的宝石到rowSameBlockfor (int column = 0; column < MaxColumn; column++){int sameNum = 0;bool find = false;for (int row = 0; row < MaxRow; row++){while (true){if (row < MaxRow - 1 && this[column, row].Type == this[column, row + 1].Type){sameNum++;row++;}else{if (sameNum >= 2){for (; sameNum >= 0; sameNum--){rowSameBlock.Add(this[column, row - sameNum]);}find = true;break;}else{sameNum = 0;}break;}}if (find)break;}if (find)break;}#endregion//if (columnSameBlock.Count >= 3)//{//    Block lastBlock = null;//    foreach (var tempBlock in columnSameBlock)//    {//        if (lastBlock == null)//        {//            lastBlock = tempBlock;//        }//        if (tempBlock.Row != lastBlock.Row)//        {//            columnSameBlock.Clear();//            break;//        }//        lastBlock = tempBlock;//    }//}if (rowSameBlock.Count >= 3){foreach (var tempBlock in columnSameBlock){if (tempBlock.Column == rowSameBlock[0].Column){columnSameBlock.Clear();break;}}}#region 合并两个集合并返回if (columnSameBlock.Count >= 3 || rowSameBlock.Count >= 3){List<Block> returnBlocks = new List<Block>();foreach (var tempBlock in columnSameBlock){returnBlocks.Add(tempBlock);}foreach (var tempBlock in rowSameBlock){if (!columnSameBlock.Contains(tempBlock)) //不允许重复添加
                    {returnBlocks.Add(tempBlock);}}return returnBlocks;}else{return null;}#endregion}/// <summary>/// 调换两个Block的位置/// </summary>/// <param name="block1">第一个Block</param>/// <param name="block2">第二个Block</param>public void ExChangeLocation(Block block1, Block block2){int block1Column = block1.Column;int block1Row = block1.Row;int block2Column = block2.Column;int block2Row = block2.Row;this[block1Column, block1Row] = block2;this[block2Column, block2Row] = block1;}/// <summary>/// 让第一个Block的Zindex值比第二个大/// </summary>/// <param name="addedBlock">被加Zindex值的Block</param>/// <param name="referenceBlock">参考值</param>public void AddingZIndex(Block addedBlock, Block referenceBlock){Canvas.SetZIndex(addedBlock, Canvas.GetZIndex(referenceBlock) + 1);}/// <summary>/// 获取指定Block的指定方向的相邻Block/// </summary>/// <param name="movedBlock">指定的Block</param>/// <param name="direction">方向</param>/// <returns>相邻的Block</returns>public Block GetBlockByDirection(Block movedBlock, Direction direction){Block returnBlock = null;switch (direction){case Direction.Up:if (movedBlock.Row != 0){returnBlock = this[movedBlock.Column, movedBlock.Row - 1];}break;case Direction.Down:if (movedBlock.Row != MaxRow - 1){returnBlock = this[movedBlock.Column, movedBlock.Row + 1];}break;case Direction.Left:if (movedBlock.Column != 0){returnBlock = this[movedBlock.Column - 1, movedBlock.Row];}break;case Direction.Right:if (movedBlock.Column != MaxColumn -1){returnBlock = this[movedBlock.Column + 1, movedBlock.Row];}break;}return returnBlock;}/// <summary>/// 从LayoutRoot.Children中移除Block列表/// </summary>/// <param name="Block">要移除的Block列表</param>public void RemoveListBlock(List<Block> removeblock){Storyboard sb = new Storyboard();sb.Completed += (object sender, object e) => {var sb2 = sender as Storyboard;sb.Stop();AnimationIsPlaying = false;foreach (var block in removeblock){block.Opacity = 0.0;this.LayoutRoot.Children.Remove(block);this[block.Column, block.Row] = null;}Resources.Remove("RemoveBlock");FillNull();UpdateScore(45 + (removeblock.Count - 3) * 45);};Resources.Add("RemoveBlock", sb);foreach (var item in removeblock){AddAnimationToStoryboard(sb, item, "Opacity", 0.0, TimeSpan.FromMilliseconds(200));   }BeginAnimation(sb);}private void FillNull(){List<Block> changedBlock = new List<Block>();Storyboard sb = new Storyboard();sb.Completed += (object sender, object e) =>{var sb2 = sender as Storyboard;sb2.Stop();AnimationIsPlaying = false;foreach (var tempBlock in changedBlock){tempBlock.RenderTransform.SetValue(TranslateTransform.YProperty, 0.0);}Resources.Remove("sbFill");var erasableBlocks = GetErasableBlock();if (erasableBlocks != null){RemoveListBlock(erasableBlocks);}};Resources.Add("sbFill", sb);for (int i = 0; i < MaxColumn; i++){int nullNum = 0;int row = 0;for (int j = 0; j < MaxRow; j++){if (this[i, j] == null){if (j > row) row = j;nullNum++;}}for (int k = row - nullNum; k >= 0 && nullNum != 0; k--) //添加被删除Block上面的Block下落动画
                {DoubleAnimation da = new DoubleAnimation();Block tempBlock = this[i, k];tempBlock.RenderTransform = new TranslateTransform();tempBlock.RenderTransform.SetValue(TranslateTransform.YProperty, (double)-64 * nullNum);AddAnimationToStoryboard(sb, tempBlock.RenderTransform, "Y", 0.0, TimeSpan.FromMilliseconds(300 * nullNum));this[tempBlock.Column, tempBlock.Row + nullNum] = tempBlock;changedBlock.Add(tempBlock);}for (int l = nullNum - 1; l >= 0 && nullNum != 0; l--)  //创建新的Block填充已消除的
                {int randomNum = GetRandomNum();Block tempBlock = new Block(randomNum, i, l);tempBlock.RenderTransform = new TranslateTransform();tempBlock.RenderTransform.SetValue(TranslateTransform.YProperty, (double)-64 * nullNum);AddAnimationToStoryboard(sb, tempBlock.RenderTransform, "Y", 0.0, TimeSpan.FromMilliseconds(300 * nullNum));this[tempBlock.Column, tempBlock.Row] = tempBlock;changedBlock.Add(tempBlock);}}BeginAnimation(sb);}/// <summary>/// 将指定的宝石向上移动一格/// </summary>/// <param name="Block">要移动的宝石</param>public void Up(Block block, bool isRollBack){var near = GetBlockByDirection(block, Direction.Up);this.ExChangeLocation(block, near);block.RenderTransform = new TranslateTransform();block.RenderTransform.SetValue(TranslateTransform.YProperty, 64.0);near.RenderTransform = new TranslateTransform();near.RenderTransform.SetValue(TranslateTransform.YProperty, -64.0);EventHandler<object> neareh = new EventHandler<object>((object sender, object e) => {var da = sender as DoubleAnimation;sbAll.Children.Remove(da);block.RenderTransform.SetValue(TranslateTransform.YProperty, 0.0);near.RenderTransform.SetValue(TranslateTransform.YProperty, 0.0);});EventHandler<object> blockeh = new EventHandler<object>((object sender, object e) =>{var da = sender as DoubleAnimation;sbAll.Children.Remove(da);block.RenderTransform.SetValue(TranslateTransform.YProperty, 0.0);near.RenderTransform.SetValue(TranslateTransform.YProperty, 0.0);var nearableBlocks = GetErasableBlock();if (nearableBlocks == null){Up(near, false);}else{RemoveListBlock(nearableBlocks);}});this.AddAnimationToStoryboard(near.RenderTransform, "Y", 0.0, TimeSpan.FromMilliseconds(300), neareh);if (isRollBack){this.AddAnimationToStoryboard(block.RenderTransform, "Y", 0.0,TimeSpan.FromMilliseconds(300), blockeh);}else {this.AddAnimationToStoryboard(block.RenderTransform, "Y", 0.0, TimeSpan.FromMilliseconds(300), neareh);}this.BeginAnimation();}/// <summary>/// 将指定的宝石向下移动一格/// </summary>/// <param name="Block">要移动的宝石</param>public void Down(Block block, bool isRollBack){var near = GetBlockByDirection(block, Direction.Down);this.ExChangeLocation(block, near);AddingZIndex(block, near);block.RenderTransform = new TranslateTransform();block.RenderTransform.SetValue(TranslateTransform.YProperty, -64.0);near.RenderTransform = new TranslateTransform();near.RenderTransform.SetValue(TranslateTransform.YProperty, 64.0);EventHandler<object> neareh = new EventHandler<object>((object sender, object e) =>{var da = sender as DoubleAnimation;sbAll.Children.Remove(da);block.RenderTransform.SetValue(TranslateTransform.YProperty, 0.0);near.RenderTransform.SetValue(TranslateTransform.YProperty, 0.0);});EventHandler<object> blockeh = new EventHandler<object>((object sender, object e) =>{var da = sender as DoubleAnimation;sbAll.Children.Remove(da);block.RenderTransform.SetValue(TranslateTransform.YProperty, 0.0);near.RenderTransform.SetValue(TranslateTransform.YProperty, 0.0);var nearableBlocks = GetErasableBlock();if (nearableBlocks == null){Down(near, false);}else{RemoveListBlock(nearableBlocks);}});this.AddAnimationToStoryboard(near.RenderTransform, "Y", 0.0, TimeSpan.FromMilliseconds(300), neareh);if (isRollBack){this.AddAnimationToStoryboard(block.RenderTransform, "Y", 0.0, TimeSpan.FromMilliseconds(300), blockeh);}else{this.AddAnimationToStoryboard(block.RenderTransform, "Y", 0.0, TimeSpan.FromMilliseconds(300), neareh);}this.BeginAnimation();}/// <summary>/// 将指定的宝石向上移动一格/// </summary>/// <param name="Block">要移动的宝石</param>public void Left(Block block, bool isRollBack){var near = GetBlockByDirection(block, Direction.Left);this.ExChangeLocation(block, near);AddingZIndex(block, near);block.RenderTransform = new TranslateTransform();block.RenderTransform.SetValue(TranslateTransform.XProperty, 64.0);near.RenderTransform = new TranslateTransform();near.RenderTransform.SetValue(TranslateTransform.XProperty, -64.0);EventHandler<object> neareh = new EventHandler<object>((object sender, object e) =>{var da = sender as DoubleAnimation;sbAll.Children.Remove(da);block.RenderTransform.SetValue(TranslateTransform.XProperty, 0.0);near.RenderTransform.SetValue(TranslateTransform.XProperty, 0.0);});EventHandler<object> blockeh = new EventHandler<object>((object sender, object e) =>{var da = sender as DoubleAnimation;sbAll.Children.Remove(da);block.RenderTransform.SetValue(TranslateTransform.XProperty, 0.0);near.RenderTransform.SetValue(TranslateTransform.XProperty, 0.0);var nearableBlocks = GetErasableBlock();if (nearableBlocks == null){Left(near, false);}else{RemoveListBlock(nearableBlocks);}});this.AddAnimationToStoryboard(near.RenderTransform, "X", 0.0, TimeSpan.FromMilliseconds(300), neareh);if (isRollBack){this.AddAnimationToStoryboard(block.RenderTransform, "X", 0.0, TimeSpan.FromMilliseconds(300), blockeh);}else{this.AddAnimationToStoryboard(block.RenderTransform, "X", 0.0, TimeSpan.FromMilliseconds(300), neareh);}this.BeginAnimation();}/// <summary>/// 将指定的宝石向右移动一格/// </summary>/// <param name="Block">要移动的宝石</param>public void Right(Block block, bool isRollBack){var near = GetBlockByDirection(block, Direction.Right);this.ExChangeLocation(block, near);AddingZIndex(block, near);block.RenderTransform = new TranslateTransform();block.RenderTransform.SetValue(TranslateTransform.XProperty, -64.0);near.RenderTransform = new TranslateTransform();near.RenderTransform.SetValue(TranslateTransform.XProperty, 64.0);EventHandler<object> neareh = new EventHandler<object>((object sender, object e) =>{var da = sender as DoubleAnimation;sbAll.Children.Remove(da);block.RenderTransform.SetValue(TranslateTransform.XProperty, 0.0);near.RenderTransform.SetValue(TranslateTransform.XProperty, 0.0);});EventHandler<object> blockeh = new EventHandler<object>((object sender, object e) =>{var da = sender as DoubleAnimation;sbAll.Children.Remove(da);block.RenderTransform.SetValue(TranslateTransform.XProperty, 0.0);near.RenderTransform.SetValue(TranslateTransform.XProperty, 0.0);var nearableBlocks = GetErasableBlock();if (nearableBlocks == null){Right(near, false);}else{RemoveListBlock(nearableBlocks);}});this.AddAnimationToStoryboard(near.RenderTransform, "X", 0.0, TimeSpan.FromMilliseconds(300), neareh);if (isRollBack){this.AddAnimationToStoryboard(block.RenderTransform, "X", 0.0, TimeSpan.FromMilliseconds(300), blockeh);}else{this.AddAnimationToStoryboard(block.RenderTransform, "X", 0.0, TimeSpan.FromMilliseconds(300), neareh);}this.BeginAnimation();}/// <summary>/// 下一关/// </summary>public void NextLevel(){#region 下一关动画var sbLeave = new Storyboard();Resources.Add("sbLeave", sbLeave);sbLeave.Completed += (object sender1, object ea1) =>{var sb = sender1 as Storyboard;Resources.Remove("sbLeave");sb.Stop();this.LayoutRoot.Children.Clear();this.InitGame();AnimationIsPlaying = false;};for (int column = 0; column < MaxColumn; column++){for (int row = 0; row < MaxRow; row++){var tempBlock = this[column, row];tempBlock.RenderTransform = new TranslateTransform();AddAnimationToStoryboard(sbLeave, tempBlock.RenderTransform, "Y", +700, TimeSpan.FromMilliseconds(2000 - row * 150));}}BeginAnimation(sbLeave);#endregion}private void LayoutRoot_PointerPressed_1(object sender, PointerRoutedEventArgs e){if (e.OriginalSource.GetType() == typeof(Block)){this.mouseUpBeforePoint = e.GetCurrentPoint(LayoutRoot);Block tempBlock = (Block)e.OriginalSource;tempBlock.CapturePointer(e.Pointer);}}private void LayoutRoot_PointerMoved_1(object sender, PointerRoutedEventArgs e){if (e.OriginalSource != null && e.OriginalSource.GetType() == typeof(Block) && !AnimationIsPlaying){Block movedBlock = (Block)e.OriginalSource;if (movedBlock.isMouseLeftButtonDown){PointerPoint mousePoint = e.GetCurrentPoint(LayoutRoot);double XCha = mousePoint.Position.X - mouseUpBeforePoint.Position.X;double YCha = mousePoint.Position.Y - mouseUpBeforePoint.Position.Y;double absXCha = Math.Abs(XCha);double absYCha = Math.Abs(YCha);#region 判断移动方向if (absXCha > 10 || absYCha > 10){if (XCha > 10 && YCha < 10){if (absXCha > absYCha){this.Right(movedBlock, true);}else{this.Up(movedBlock, true);}}else if (XCha > 10 && YCha > 10){if (absXCha > absYCha){this.Right(movedBlock, true);}else{this.Down(movedBlock, true);}}else if (XCha < 10 && YCha > 10){if (absXCha > absYCha){this.Left(movedBlock, true);}else{this.Down(movedBlock, true);}}else if (XCha < 10 && YCha < 10){if (absXCha > absYCha){this.Left(movedBlock, true);}else{this.Up(movedBlock, true);}}}#endregion}}}private void LayoutRoot_PointerReleased_1(object sender, PointerRoutedEventArgs e){if (e.OriginalSource != null && e.OriginalSource.GetType() == typeof(Block)){Block tempBlock = (Block)e.OriginalSource;tempBlock.ReleasePointerCapture(e.Pointer);}}}public enum Direction{Up = 1,Down = 2,Left = 3,Right = 4}

转载于:https://www.cnblogs.com/Jusoc/archive/2012/11/22/2783424.html

Windows 8 系列 --Block Game --随笔相关推荐

  1. Windows Mobile系列手机操作系统

    与其它掌上型电子设备的操作系统不同的是,Windows Mobile系列操作系统是在微软计算机的Windows操作系统上变化而来的,因此,它们的操作界面非常相似,熟悉计算机Windows系列操作系统的 ...

  2. .NET Windows编程系列笔记(一)

    1._.NET Windows编程系列课程(1):.NET Windows编程概述 小结: Visual C# 2005 新增功能 • 代码段:通过提供可填写的模板,代码段加速了通用代码构造的输入.代 ...

  3. TechNet 晒文 - Windows 7 系列汇总

    最近关于Windows 7 方面的博文写了不少,今天收到微软TechNet 邮件,告知有几篇文章已经通过审核发布在TechNet技术资源库中,欣喜之余感觉微软确实为社区技术人员开辟了很广阔的交流空间. ...

  4. 【Windows 问题系列第 7 篇】电脑卡跟C盘容量有关系吗?

    这是[Windows 问题系列第 7 篇],如果觉得有用的话,欢迎关注专栏. 你有没有遇到过这样的情况? 你电脑最近很卡,然后你请教一个懂点电脑常识的同事帮你看,他过来一看,然后说,你C盘容量就剩下3 ...

  5. 【Windows 问题系列第 8 篇】如何查看电脑磁盘属于固态盘还是机械硬盘?

    这是[Windows 问题系列第 8 篇],如果觉得有用的话,欢迎关注专栏. 第一步: 按下 Win + E 组合键 打开 " 此电脑" ,然后右击任意磁盘,点击 "属性 ...

  6. 实用 Windows 软件系列分享(七)

    苏生不惑第324篇原创文章,将本公众号设为星标,第一时间看最新文章. 之前分享过Windows系列软件,这里继续分享第7篇,在公众号后台对话框回复 Windows 获取以下软件: 新买了台笔记本电脑, ...

  7. 【Windows 问题系列第 14 篇】如何删除 Win10 系统自带的微软拼音输入法

    这是[Windows 问题系列第 14 篇],如果觉得有用的话,欢迎关注专栏. 第一步:点击任务栏上的输入法图标,在弹出的窗口中选择[语言首选项] 第二步:在弹出的窗口中,依下图所示,按顺序点击两个按 ...

  8. 实用 Windows 软件系列分享(五)

    苏生不惑第286 篇原创文章,将本公众号设为星标,第一时间看最新文章. 之前分享过Windows软件系列文章: 新买了台笔记本电脑,分享些实用的Windows软件 实用 Windows 软件系列分享( ...

  9. 【Windows 问题系列第 2 篇】如何让显示的窗口在桌面的最上面,而不被其它窗口遮挡?

    这是[Windows 问题系列第 2 篇],如果觉得有用的话,欢迎关注专栏. 有时候我们打开了一窗口,比如文本框 ,里面记了一些数据,但是一点其它窗口,要么文本框被其它窗口遮挡,要么直接就最小化了. ...

最新文章

  1. mysql5.6.37驱动_MySql (mysql-5.6.37) 在Windows的安装及使用
  2. 动易SiteFactory CMS自动采集器 V2.0
  3. 适合vue的富文本框
  4. powerdesigner显示工具面板_10分钟看懂Photoshop 绘画(画笔面板1-3)
  5. STM32F103构建固件库模板(PS固件库文件树介绍)
  6. ASP.NET CORE WEBAPI文件下载
  7. 【渝粤教育】电大中专就业指导 (3)作业 题库
  8. 16进制加法 keil_C/C++编程笔记:C语言进制详解,二进制、八进制和十六进制
  9. 初识java中数组、数组在内存中、越界异常、空指针异常
  10. security中的@EnableGlobalMethodSecurity注解详解
  11. 数学建模——摘要写作
  12. python 爬取句子迷,多好的一个网站(哭~~)
  13. 第三方登录mysql表_浅谈数据库用户表结构设计,第三方登录
  14. # 7-45 航空公司VIP客户查询 (25 分)
  15. 小a与星际探索(dp)
  16. 【原创】Jlink在ADS下的配置说明及常见问题解决办法
  17. 《Python深度学习》Chapter 2——神经网络的数学基础
  18. AndroidStudio运行app,会装上多个app
  19. 《富爸爸 穷爸爸》读书笔记
  20. C++中const的作用(至少要说出3个)

热门文章

  1. 共模电感适用的频率_电感选型详解及设计规范
  2. 如何选择最优路径完成云原生上云?听这场阿里云特别分享【云原生技术与最佳实践】
  3. 基于 KubeVela 与 Kubernetes 打造“无限能力”的开放 PaaS
  4. 课时 21:Kubernetes 存储架构及插件使用(阚俊宝)
  5. Dubbo 3.0 前瞻之:常用协议对比及 RPC 协议新形态探索
  6. python 字符串去重从小到大排列_110道题整理(1-60)
  7. 2012秋江苏省计算机二级上机试题,江苏省高校计算机等级考试二级2012秋资料.doc...
  8. 七牛上传图片html,使用七牛云上传图片
  9. feign返回null_109、Feign的服务降级和Turbine
  10. linux只剩 目录挂载,linux(centOS7)的基本操作(五) 磁盘、分区、挂载、卸载