diff --git a/Qwirkle/QwirkleClassLibrary/Games/Game.cs b/Qwirkle/QwirkleClassLibrary/Games/Game.cs index 5ba5c3d..ad12627 100644 --- a/Qwirkle/QwirkleClassLibrary/Games/Game.cs +++ b/Qwirkle/QwirkleClassLibrary/Games/Game.cs @@ -28,7 +28,8 @@ namespace QwirkleClassLibrary.Games [DataMember] private Board board = new Board(15, 12); - + + public bool PlayerSwapping { get; set; } public Board Board => board; public ReadOnlyCollection PlayerList => players.AsReadOnly(); @@ -325,9 +326,14 @@ namespace QwirkleClassLibrary.Games /// bool public bool PlaceTile(Player player, Tile tile, int x, int y) { + if (PlayerSwapping) + { + OnPlaceTile(new PlaceTileNotifiedEventArgs(tile, "you are swapping, you can't place tile !")); + return false; + } if(!TileInbag(player, tile)) { - OnPlaceTile(new PlaceTileNotifiedEventArgs(tile, "you cant play")); + OnPlaceTile(new PlaceTileNotifiedEventArgs(tile, "you can't play")); return false; } if (!IsMoveCorrect(tile, x, y, board!)) return false; diff --git a/Qwirkle/QwirkleViews/Pages/GameBoard.xaml.cs b/Qwirkle/QwirkleViews/Pages/GameBoard.xaml.cs index b92f2ae..9e9260d 100644 --- a/Qwirkle/QwirkleViews/Pages/GameBoard.xaml.cs +++ b/Qwirkle/QwirkleViews/Pages/GameBoard.xaml.cs @@ -15,11 +15,14 @@ namespace Qwirkle.Pages; public partial class Gameboard : ContentPage { public ICommand OnDrop => new Command(OnDropTile); + public ICommand OnDropB => new Command(OnDropBag); private Game game = ((App)Application.Current!).Game; private Tile? tiledrag; + private List tilesSwap = []; + public Color ColorBC1 { get; set; } = Colors.White; public Color ColorBC2 { get; set; } = Colors.Transparent; public Color ColorBC3 { get; set; } = Colors.Transparent; @@ -44,6 +47,11 @@ public partial class Gameboard : ContentPage e.AcceptedOperation = DataPackageOperation.Copy; } + private void OnDragOverBag(object sender, DragEventArgs e) + { + e.AcceptedOperation = DataPackageOperation.Copy; + } + private void OnDropTile(Cell cell) { @@ -71,14 +79,21 @@ public partial class Gameboard : ContentPage { game.NextPlayerNotified += Game_NextPlayerNotified; + if (game.PlayerSwapping) + { + game.SwapTiles(game.GetPlayingPlayer(), tilesSwap); + tilesSwap.Clear(); + game.PlayerSwapping = false; + } + else + { + game.GetPlayerScore(game.GetPlayingPlayer(), game.CellsUsed, game.GetBoard()!); + game.EmptyCellUsed(); + game.DrawTiles(game.GetPlayingPlayer()); + } - 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(); @@ -89,6 +104,8 @@ public partial class Gameboard : ContentPage if (game.GetPlayingPlayerPosition() == 0) { ColorBC1 = Colors.White; + ColorBC2 = Colors.Transparent; + ColorBC3 = Colors.Transparent; ColorBC4 = Colors.Transparent; OnPropertyChanged(nameof(ColorBC1)); OnPropertyChanged(nameof(ColorBC4)); @@ -97,20 +114,26 @@ public partial class Gameboard : ContentPage { ColorBC2 = Colors.White; ColorBC1 = Colors.Transparent; + ColorBC3 = Colors.Transparent; + ColorBC4 = Colors.Transparent; OnPropertyChanged(nameof(ColorBC1)); OnPropertyChanged(nameof(ColorBC2)); } if (game.GetPlayingPlayerPosition() == 2) { ColorBC3 = Colors.White; + ColorBC1 = Colors.Transparent; ColorBC2 = Colors.Transparent; + ColorBC4 = Colors.Transparent; OnPropertyChanged(nameof(ColorBC3)); OnPropertyChanged(nameof(ColorBC2)); } if (game.GetPlayingPlayerPosition() == 3) { ColorBC4 = Colors.White; + ColorBC1 = Colors.Transparent; ColorBC3 = Colors.Transparent; + ColorBC2 = Colors.Transparent; OnPropertyChanged(nameof(ColorBC4)); OnPropertyChanged(nameof(ColorBC3)); } @@ -121,8 +144,31 @@ public partial class Gameboard : ContentPage DisplayAlert("Player switch !", "It's your turn : " + args.Player.NameTag, "<3"); } - private void OnTileClickedP1(object? sender, EventArgs args) + private void OnButtonSwapClicked(object sender, EventArgs e) + { + game.PlaceTileNotified += Game_PlaceTileNotified; + game.SwapTilesNotified += Game_SwapTilesNotified; + + if(game.CellsUsed.Count == 0 && game.PlayerSwapping==false) + { + DisplayAlert("Swap system", "\r\nWelcome to the swap system! To use the system, take the tiles you wish to swap and place them in the bag (you will not see the tiles disappear). Then, click on the skip button. /!\\ Attention, during the swap phase, you cannot play /!\\", "Copy !"); + game.PlayerSwapping = true; + } + + game.SwapTilesNotified -= Game_SwapTilesNotified; + game.PlaceTileNotified -= Game_PlaceTileNotified; + } + + private void Game_SwapTilesNotified(object? sender, SwapTilesNotifiedEventArgs args) { + DisplayAlert("Swap system", args.Reason, "<3"); + } + private void OnDropBag() + { + if (game.PlayerSwapping) + { + tilesSwap.Add(tiledrag!); + } } } \ No newline at end of file diff --git a/Qwirkle/QwirkleViews/Pages/Gameboard.xaml b/Qwirkle/QwirkleViews/Pages/Gameboard.xaml index 10670e3..44e1155 100644 --- a/Qwirkle/QwirkleViews/Pages/Gameboard.xaml +++ b/Qwirkle/QwirkleViews/Pages/Gameboard.xaml @@ -17,7 +17,19 @@ - + + + + + + + + + @@ -38,7 +50,7 @@ - + @@ -122,7 +134,7 @@ DropCommand="{Binding OnDrop, Source={x:Reference root}}" DropCommandParameter="{Binding .}"/> - + diff --git a/Qwirkle/QwirkleViews/Resources/Images/bag.png b/Qwirkle/QwirkleViews/Resources/Images/bag.png new file mode 100644 index 0000000..1034fb6 Binary files /dev/null and b/Qwirkle/QwirkleViews/Resources/Images/bag.png differ