private void UpdateScore(TileControl tile) { m_multiLayerScore += tile.Layer + 1; if (tile.Layer == 0) { m_singleLayerScore += 2; } else { m_allTilesOneHigh = false; } Score = m_allTilesOneHigh ? m_singleLayerScore : m_multiLayerScore; }
private void ExchangeTile(TileControl tileToExchange) { m_tileBeingExchanged = tileToExchange; // Request tile exchange. m_localNetwork.ExchangeLetter(tileToExchange.TileData); }
private void PlaceTileOnBoard(TileControl draggedItem, int gridX, int gridY, ePlacementMode placement) { TranslateTransform tileRenderTransform = draggedItem.RenderTransform as TranslateTransform; GeneralTransform boardTransform = m_gameBoard.TransformToVisual(m_tileCanvas); Rect boardRect = boardTransform.TransformBounds(new Rect(0, 0, m_gameBoard.ActualWidth, m_gameBoard.ActualHeight)); Point positionOfBoard = boardTransform.TransformPoint(new Point(0, 0)); if (placement == ePlacementMode.UserPlacement) { // If the tile is being moved around the board then decrement the tile count in the square it left. if (draggedItem.GridY != ON_PANEL && draggedItem.GridX >= 0 && draggedItem.GridY >= 0) { m_boardSpaceFilled[draggedItem.GridX, draggedItem.GridY]--; } m_boardSpaceFilled[gridX, gridY] = Math.Max(1, Math.Min(5, m_boardSpaceFilled[gridX, gridY] + 1)); draggedItem.Layer = m_boardSpaceFilled[gridX, gridY]; } else if(placement == ePlacementMode.PlacingOpponentTile) { m_boardSpaceFilled[gridX, gridY] = draggedItem.Layer; } draggedItem.Width = m_tileSize; draggedItem.Height = m_tileSize; draggedItem.GridX = gridX; draggedItem.GridY = gridY; draggedItem.Visibility = Windows.UI.Xaml.Visibility.Visible; tileRenderTransform.X = positionOfBoard.X + (m_tileSize * gridX) - (boardRect.Width * 0.005 * draggedItem.Layer);// +boardRect.Width * 0.01 - (boardRect.Width * 0.005 * draggedItem.Layer); tileRenderTransform.Y = positionOfBoard.Y + (m_tileSize * gridY) - (boardRect.Height * 0.005 * draggedItem.Layer);// +boardRect.Height * 0.01 - (boardRect.Height * 0.005 * draggedItem.Layer); Canvas.SetZIndex(draggedItem, draggedItem.Layer); if (draggedItem.TileStatus == eTileState.OnPlayerPanel) { draggedItem.TileStatus = eTileState.ComposingNewWord; m_panelTiles.Remove(draggedItem); m_currentWordTiles.Add(draggedItem); } PlaySound(draggedItem.Layer); }
private void PlaceTileOnPanel(TileControl draggedItem, int gridX) { TranslateTransform tileRenderTransform = draggedItem.RenderTransform as TranslateTransform; draggedItem.Layer = -1; Canvas.SetZIndex(draggedItem, 1); foreach (TileControl tile in m_panelTiles) { // If a tile is dropped on an existing tile... if (tile != draggedItem && tile.GridX == gridX) { // If moving tiles that are already on the panel then shuffle up or down as appropriate if (draggedItem.GridY == ON_PANEL) { // If the tile is being moved right then shuffle all preceding tiles right if (draggedItem.GridX < tile.GridX) { foreach (TileControl tileToMove in m_panelTiles) { if (tileToMove.GridX > draggedItem.GridX && tileToMove.GridX <= tile.GridX) { tileToMove.GridX--; TranslateTransform movingTileRenderTransform = tileToMove.RenderTransform as TranslateTransform; movingTileRenderTransform.X -= m_tileSize; } } } // If the tile is being moved left then shuffle all preceding tiles right else if (draggedItem.GridX > tile.GridX) { foreach (TileControl tileToMove in m_panelTiles) { if (tileToMove.GridX < draggedItem.GridX && tileToMove.GridX >= tile.GridX) { tileToMove.GridX++; TranslateTransform movingTileRenderTransform = tileToMove.RenderTransform as TranslateTransform; movingTileRenderTransform.X += m_tileSize; } } } } else { int spacesToTheLeft = gridX; int spacesToTheRight = 6 - gridX; int gapToLeftAt = 0; int gapToRightAt = 6; bool[] existingTiles = new bool[7]; foreach (TileControl tileToMove in m_panelTiles) { existingTiles[tileToMove.GridX] = true; if (tileToMove.GridX < gridX) { spacesToTheLeft--; } else if (tileToMove.GridX > gridX) { spacesToTheRight--; } } for (int i = gridX; i >= 0; i--) { if (!existingTiles[i]) { gapToLeftAt = i; break; } } for (int i = gridX; i < 7; i++) { if (!existingTiles[i]) { gapToRightAt = i; break; } } // If there is no space on the left or simple more space on the right then shuffle right. if (spacesToTheLeft == 0 || spacesToTheRight >= spacesToTheLeft) { foreach (TileControl tileToMove in m_panelTiles) { if (tileToMove.GridX >= gridX && tileToMove.GridX < gapToRightAt) { tileToMove.GridX++; TranslateTransform movingTileRenderTransform = tileToMove.RenderTransform as TranslateTransform; movingTileRenderTransform.X += m_tileSize; } } } // Otherwise shuffle left. else if (spacesToTheRight == 0 || spacesToTheRight < spacesToTheLeft) { foreach (TileControl tileToMove in m_panelTiles) { if (tileToMove.GridX <= gridX && tileToMove.GridX > gapToLeftAt) { tileToMove.GridX--; TranslateTransform movingTileRenderTransform = tileToMove.RenderTransform as TranslateTransform; movingTileRenderTransform.X -= m_tileSize; } } } } break; } } GeneralTransform tilePanelTransform = m_tilePanel.TransformToVisual(m_tileCanvas); Point positionOfBoard = tilePanelTransform.TransformPoint(new Point(0, 0)); tileRenderTransform.X = positionOfBoard.X + m_tilePanel.ActualWidth / 2 - (m_tileSize * (3.5 - gridX)); tileRenderTransform.Y = positionOfBoard.Y + 1; if (draggedItem.GridY != ON_PANEL && draggedItem.GridX >= 0 && draggedItem.GridY >= 0) { m_boardSpaceFilled[draggedItem.GridX, draggedItem.GridY]--; } draggedItem.Width = m_tileSize; draggedItem.Height = m_tileSize; draggedItem.GridX = gridX; draggedItem.GridY = ON_PANEL; draggedItem.Visibility = Windows.UI.Xaml.Visibility.Visible; if (draggedItem.TileStatus == eTileState.ComposingNewWord) { draggedItem.TileStatus = eTileState.OnPlayerPanel; m_currentWordTiles.Remove(draggedItem); m_panelTiles.Add(draggedItem); } }
private void AddTileToPanel(string letter, int position) { TileControl tile = new TileControl(letter); tile.Visibility = Windows.UI.Xaml.Visibility.Collapsed; tile.RenderTransform = new TranslateTransform(); tile.HorizontalAlignment = Windows.UI.Xaml.HorizontalAlignment.Left; tile.VerticalAlignment = Windows.UI.Xaml.VerticalAlignment.Top; m_tileCanvas.Children.Add(tile); tile.TileStatus = eTileState.OnPlayerPanel; tile.ManipulationMode = ManipulationModes.TranslateX | ManipulationModes.TranslateY; tile.ManipulationStarting += DragLetter_ManipulationStarting; tile.ManipulationDelta += DragLetter_ManipulationDelta; tile.ManipulationCompleted += DragLetter_ManipulationCompleted; PlaceTileOnPanel(tile, position); m_panelTiles.Add(tile); }
private void AddTileToBoard(TileDetails tileData) { TileControl tile = new TileControl(tileData); tile.Visibility = Windows.UI.Xaml.Visibility.Visible; tile.RenderTransform = new TranslateTransform(); tile.HorizontalAlignment = Windows.UI.Xaml.HorizontalAlignment.Left; tile.VerticalAlignment = Windows.UI.Xaml.VerticalAlignment.Top; m_tileCanvas.Children.Add(tile); tile.TileStatus = eTileState.JustPlayed; tile.ManipulationMode = ManipulationModes.None; m_justPlayedTiles.Add(tile); m_playedTiles.Add(tile); m_boardTiles[tile.GridX, tile.GridY] = tile; PlaceTileOnBoard(tile, tileData.GridX, tileData.GridY, ePlacementMode.PlacingOpponentTile); }
void LocalNetwork_OnLettersReceived(string serverIP, GameLetters letters) { if (m_tileBeingExchanged != null) { m_panelTiles.Remove(m_tileBeingExchanged); m_tileBeingExchanged = null; if(OnChangingALetter != null) { OnChangingALetter(true); } } AddLettersToPanel(letters); }
public void PrependLetter(TileControl tile) { Word = tile.Letter + Word; UpdateScore(tile); }
public void AppendLetter(TileControl tile) { Word += tile.Letter; UpdateScore(tile); }