You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
sae201_qwirkle/Qwirkle/QwirkleViews/Pages/GameBoard.xaml.cs

128 lines
3.6 KiB

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<Cell>(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)
{
}
}