private void TilesMethod() { tileWidth = viewGameWidth / 4; tileArr = new ArrayList(); coordsTile = new ArrayList(); int counter = 1; for (int rows = 0; rows < 4; rows++) { for (int colls = 0; colls < 4; colls++) { MyTextView txtTile = new MyTextView(this); txtTile.Text = counter.ToString(); txtTile.SetTextColor(Color.White); txtTile.Gravity = GravityFlags.Center; txtTile.TextSize = 30; GridLayout.Spec rowSpec = GridLayout.InvokeSpec(txtTile.xPos); GridLayout.Spec collSpec = GridLayout.InvokeSpec(txtTile.yPos); GridLayout.LayoutParams tileLayoutParams = new GridLayout.LayoutParams(rowSpec, collSpec); tileLayoutParams.Width = tileWidth - 10; tileLayoutParams.Height = tileWidth - 10; tileLayoutParams.SetMargins(6, 6, 6, 6); txtTile.LayoutParameters = tileLayoutParams; txtTile.SetBackgroundColor(Color.Green); Point point = new Point(colls, rows); coordsTile.Add(point); txtTile.xPos = point.X; txtTile.yPos = point.Y; txtTile.Touch += TxtTile_Touch; tileArr.Add(txtTile); gridLayout.AddView(txtTile); counter++; } } gridLayout.RemoveView((MyTextView)tileArr[15]); tileArr.RemoveAt(15); }
private void TxtTile_Touch(object sender, View.TouchEventArgs e) { if (e.Event.Action == MotionEventActions.Up) { if (tileArr.Contains(sender)) { MyTextView thisTile = (MyTextView)sender; float xDifference = (float)Math.Pow(thisTile.xPos - emptyTile.X, 2); float yDifference = (float)Math.Pow(thisTile.yPos - emptyTile.Y, 2); float distanceXY = (float)Math.Sqrt(xDifference + yDifference); //Tile can move if (distanceXY == 1) { //Memorize where the tile use to be Point currentPoint = new Point(thisTile.xPos, thisTile.yPos); //take the empty tile GridLayout.Spec rowSpec = GridLayout.InvokeSpec(emptyTile.Y); GridLayout.Spec collSpec = GridLayout.InvokeSpec(emptyTile.X); GridLayout.LayoutParams newLayoutParams = new GridLayout.LayoutParams(rowSpec, collSpec); thisTile.xPos = emptyTile.X; thisTile.yPos = emptyTile.Y; newLayoutParams.Width = tileWidth - 10; newLayoutParams.Height = tileWidth - 10; newLayoutParams.SetMargins(6, 6, 6, 6); thisTile.LayoutParameters = newLayoutParams; emptyTile = currentPoint; } //#region Test positions touch tile and empty tile //Console.WriteLine($"tile position\nx: {thisTile.xPos}\ny: {thisTile.yPos} "); //Console.WriteLine($"empty tile position\nx: {emptyTile.X}\ny: {emptyTile.Y} "); //#endregion } } }