using QwirkleClassLibrary.Games; using QwirkleClassLibrary.Players; using QwirkleClassLibrary.Tiles; using QwirkleClassLibrary.Events; using QwirkleClassLibrary.Boards; using System.Collections.ObjectModel; using System.Windows.Input; using System.ComponentModel; using Cell = QwirkleClassLibrary.Boards.Cell; using Color = Microsoft.Maui.Graphics.Color; using System.Drawing; namespace Qwirkle.Pages; public partial class Gameboard : ContentPage { public ICommand OnDrop => new Command(OnDropTile); private Game game = ((App)Application.Current!).Game; private Tile? tiledrag; public Color ColorBC1 { get; set; } = Colors.White; public Color ColorBC2 { get; set; } = Colors.Transparent; public Color ColorBC3 { get; set; } = Colors.Transparent; public Color ColorBC4 { get; set; } = Colors.Transparent; public Gameboard() { InitializeComponent(); BindingContext = game; } private void OnDragStarting(object sender, DragStartingEventArgs e) { var tile = (sender as Element).BindingContext as Tile; e.Data.Text = tile?.ToString(); tiledrag = tile; } private void OnDragOver(object sender, DragEventArgs e) { e.AcceptedOperation = DataPackageOperation.Copy; } private void OnDropTile(Cell cell) { game.PlaceTileNotified += Game_PlaceTileNotified; int x = cell.GetX; int y = cell.GetY; game.PlaceTile(game.GetPlayingPlayer(), tiledrag!, x, y); game.PlaceTileNotified -= Game_PlaceTileNotified; } private void Game_PlaceTileNotified(object? sender, PlaceTileNotifiedEventArgs args) { if(args.Tile != null) { DisplayAlert("Tile place notified", args.Tile.ToString() + " : " + args.Reason, "<3"); return; } DisplayAlert("Tile place notified", args.Reason, "<3"); } private void OnButtonSkipClicked(object sender, EventArgs e) { game.NextPlayerNotified += Game_NextPlayerNotified; game.GetPlayerScore(game.GetPlayingPlayer(), game.CellsUsed, game.GetBoard()!); game.EmptyCellUsed(); game.DrawTiles(game.GetPlayingPlayer()); game.CheckGameOver(game.GetPlayingPlayer()); game.SetNextPlayer(); game.NextPlayerNotified -= Game_NextPlayerNotified; ChangeColorBC(); } private void ChangeColorBC() { if (game.GetPlayingPlayerPosition() == 0) { ColorBC1 = Colors.White; ColorBC4 = Colors.Transparent; OnPropertyChanged(nameof(ColorBC1)); OnPropertyChanged(nameof(ColorBC4)); } if (game.GetPlayingPlayerPosition() == 1) { ColorBC2 = Colors.White; ColorBC1 = Colors.Transparent; OnPropertyChanged(nameof(ColorBC1)); OnPropertyChanged(nameof(ColorBC2)); } if (game.GetPlayingPlayerPosition() == 2) { ColorBC3 = Colors.White; ColorBC2 = Colors.Transparent; OnPropertyChanged(nameof(ColorBC3)); OnPropertyChanged(nameof(ColorBC2)); } if (game.GetPlayingPlayerPosition() == 3) { ColorBC4 = Colors.White; ColorBC3 = Colors.Transparent; OnPropertyChanged(nameof(ColorBC4)); OnPropertyChanged(nameof(ColorBC3)); } } private void Game_NextPlayerNotified(object? sender, NextPlayerNotifiedEventArgs args) { DisplayAlert("Player switch !", "It's your turn : " + args.Player.NameTag, "<3"); } private void OnTileClickedP1(object? sender, EventArgs args) { } }