Commentaire dans le code et avancer sur le diagramme de classe

master
cldupland 5 years ago
parent 3a1d27b3af
commit fd586abfa6

File diff suppressed because it is too large Load Diff

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="5" android:versionName="3.0" package="com.uca.thegameextreme" android:installLocation="auto"> <manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="6" android:versionName="3.1" package="com.uca.thegameextreme" android:installLocation="auto">
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="28" /> <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="28" />
<application android:label="TheGameExtreme.Android" android:icon="@drawable/TrierImageB"></application> <application android:label="TheGameExtreme.Android" android:icon="@drawable/TrierImageB"></application>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

@ -5,15 +5,7 @@ namespace TheGameExtreme.model.card
{ {
public abstract class Card public abstract class Card
{ {
private decimal value; public decimal Value { get; set; }
public decimal Value
{
get { return value; }
set
{
this.value = value;
}
}
public Card(decimal value) public Card(decimal value)
{ {
@ -25,7 +17,7 @@ namespace TheGameExtreme.model.card
return Value.ToString(); return Value.ToString();
} }
public abstract String getName(); public abstract string getName();
public abstract bool rapidEffect(); public abstract bool rapidEffect();
} }

@ -5,7 +5,7 @@ namespace TheGameExtreme.model.card.cardType
public class ClassicCard : Card public class ClassicCard : Card
{ {
public static readonly String CARD_CLASSIC = "ClassicCard"; public static readonly string CARD_CLASSIC = "ClassicCard";
public ClassicCard(decimal value) public ClassicCard(decimal value)
: base(value) : base(value)
@ -17,7 +17,7 @@ namespace TheGameExtreme.model.card.cardType
return false; return false;
} }
override public String getName() override public string getName()
{ {
return CARD_CLASSIC; return CARD_CLASSIC;
} }

@ -4,7 +4,7 @@ namespace TheGameExtreme.model.card.cardType
public class FractionCard : Card public class FractionCard : Card
{ {
public static readonly String CARD_FRACTION = "FractionCard"; public static readonly string CARD_FRACTION = "FractionCard";
private Fraction fraction; private Fraction fraction;
public FractionCard(Fraction value) : base(value.Result()) public FractionCard(Fraction value) : base(value.Result())

@ -4,14 +4,14 @@ namespace TheGameExtreme.model.card.rapidCard
public class EndGameCard : RapidCard public class EndGameCard : RapidCard
{ {
public static readonly String CARD_ENDGAME = "EndGameCard"; public static readonly string CARD_ENDGAME = "EndGameCard";
public EndGameCard(int value) public EndGameCard(int value)
:base(value) :base(value)
{ {
} }
override public String getName() override public string getName()
{ {
return CARD_ENDGAME; return CARD_ENDGAME;
} }

@ -5,14 +5,14 @@ namespace TheGameExtreme.model.card.rapidCard
public class ThreeCard : RapidCard public class ThreeCard : RapidCard
{ {
public static readonly String CARD_THREE = "ThreeCard"; public static readonly string CARD_THREE = "ThreeCard";
public ThreeCard(int value) public ThreeCard(int value)
:base(value) :base(value)
{ {
} }
override public String getName() override public string getName()
{ {
return CARD_THREE; return CARD_THREE;
} }

@ -24,41 +24,41 @@ namespace TheGameExtreme.model.deck
return deck[index]; return deck[index];
} }
protected void InsertionDichotomique(List<Card> deck, int start, int end, Card card) //protected void InsertionDichotomique(List<Card> deck, int start, int end, Card card)
{ //{
int mediane = (end - start) % 2 + start; // int mediane = (end - start) % 2 + start;
if (mediane > deck.Count - 1) // if (mediane > deck.Count - 1)
{ // {
deck.Add(card); // deck.Add(card);
return; // return;
} // }
int comparateur = deck[mediane].Value.CompareTo(card.Value); // int comparateur = deck[mediane].Value.CompareTo(card.Value);
if (mediane == end) // if (mediane == end)
{ // {
if (comparateur > 0) // if (comparateur > 0)
{ // {
deck.Insert(start, card); // deck.Insert(start, card);
} // }
else // else
{ // {
deck.Insert(end, card); // deck.Insert(end, card);
} // }
return; // return;
} // }
if (comparateur == 0) // if (comparateur == 0)
{ // {
return; // return;
} // }
else if (comparateur > 0) // else if (comparateur > 0)
{ // {
InsertionDichotomique(deck, start, mediane, card); // InsertionDichotomique(deck, start, mediane, card);
return; // return;
} // }
else // else
{ // {
InsertionDichotomique(deck, mediane, end, card); // InsertionDichotomique(deck, mediane, end, card);
return; // return;
} // }
} //}
} }
} }

@ -5,6 +5,10 @@ namespace TheGameExtreme.model.deck
{ {
public class FractionDeck : Deck public class FractionDeck : Deck
{ {
/**
* Fonction permettant de créer un jeu de carte pour jouer avec les fractions
*/
public FractionDeck() public FractionDeck()
{ {
Random random = new Random(); Random random = new Random();
@ -26,6 +30,12 @@ namespace TheGameExtreme.model.deck
} }
} }
/**
* Fonction permettant de retourner le plus grand diviseur commun à deux nombres
* <param name="a">Premier nombre</param>
* <param name="b">Deuxième nombre</param>
* <returns>Plus grand diviseur commun</returns>
*/
private int PGCD(int a, int b) private int PGCD(int a, int b)
{ {
int temp = a % b; int temp = a % b;

@ -168,42 +168,5 @@ namespace TheGameExtreme.model.gameActions.classic
{ {
return deck.size().ToString(); return deck.size().ToString();
} }
#region Decaler dans un GameAction
public bool isEndGame(List<Card> currentHand)
{
if (currentHand.Count != 0)
{
List<Card> playableCard = new List<Card>();
tryToFindSoluce(playableCard, currentHand);
return testEndGame(playableCard);
}
return false;
}
protected void tryToFindSoluce(List<Card> playableCard, List<Card> currentHand)
{
currentHand.ForEach(card =>
{
if (card.Value > Piles.getStack(0).Peek().Value || card.Value > Piles.getStack(1).Peek().Value || card.Value < Piles.getStack(2).Peek().Value || card.Value < Piles.getStack(3).Peek().Value)
{
playableCard.Add(card);
}
});
}
protected bool testEndGame(List<Card> playableCard)
{
if (playableCard.Count < 2)
{
Message = "Le jeu est terminé!\n Désolé, vous avez perdu... Essayez encore!";
return true;
}
return false;
}
#endregion
} }
} }

@ -10,35 +10,5 @@ namespace TheGameExtreme.model.manager
public LocalGameManager(Parametreur parametreur) : base(parametreur) public LocalGameManager(Parametreur parametreur) : base(parametreur)
{ {
} }
//public override bool endTurn()
//{
// throw new NotImplementedException();
//}
//protected override bool effectLose()
//{
// throw new NotImplementedException();
//}
//protected override bool isEndGame()
//{
// throw new NotImplementedException();
//}
//protected override void pioche()
//{
// throw new NotImplementedException();
//}
//protected override bool testEndGame(List<Card> playableCard)
//{
// throw new NotImplementedException();
//}
//protected override void tryToFindSoluce(List<Card> playableCard)
//{
// throw new NotImplementedException();
//}
} }
} }

@ -10,35 +10,5 @@ namespace TheGameExtreme.model.manager.multiplayer
public RemoteGameManager(Parametreur parametreur) : base(parametreur) public RemoteGameManager(Parametreur parametreur) : base(parametreur)
{ {
} }
//public override bool endTurn()
//{
// throw new NotImplementedException();
//}
//protected override bool effectLose()
//{
// throw new NotImplementedException();
//}
//protected override bool isEndGame()
//{
// throw new NotImplementedException();
//}
//protected override void pioche()
//{
// throw new NotImplementedException();
//}
//protected override bool testEndGame(List<Card> playableCard)
//{
// throw new NotImplementedException();
//}
//protected override void tryToFindSoluce(List<Card> playableCard)
//{
// throw new NotImplementedException();
//}
} }
} }

@ -24,9 +24,6 @@
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<StackLayout <StackLayout
Grid.Row="0" Grid.Row="0"
Grid.Column="1"> Grid.Column="1">
@ -37,23 +34,6 @@
VerticalTextAlignment="Center" VerticalTextAlignment="Center"
TextColor="{DynamicResource WhiteColor}" TextColor="{DynamicResource WhiteColor}"
FontSize="28"/> FontSize="28"/>
<!--<Picker Title="Touch Mode"
Grid.Row="0"
SelectedIndexChanged="OnTouchModePickerSelectedIndexChanged">
<Picker.ItemsSource>
<x:Array Type="{x:Type local:TouchManipulationMode}">
<x:Static Member="local:TouchManipulationMode.None" />
<x:Static Member="local:TouchManipulationMode.PanOnly" />
<x:Static Member="local:TouchManipulationMode.IsotropicScale" />
<x:Static Member="local:TouchManipulationMode.AnisotropicScale" />
<x:Static Member="local:TouchManipulationMode.ScaleRotate" />
<x:Static Member="local:TouchManipulationMode.ScaleDualRotate" />
</x:Array>
</Picker.ItemsSource>
<Picker.SelectedIndex>
4
</Picker.SelectedIndex>
</Picker>-->
</StackLayout> </StackLayout>
@ -87,64 +67,6 @@
</StackLayout> </StackLayout>
<!--<Grid
Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="20*"/>
<ColumnDefinition Width="20*"/>
<ColumnDefinition Width="20*"/>
<ColumnDefinition Width="20*"/>
<ColumnDefinition Width="20*"/>
</Grid.ColumnDefinitions>
<StackLayout
Grid.Column="0">
<Image
x:Name="pile1"
Source="UsersExiticon.png"
HeightRequest="45"
WidthRequest="45"/>
</StackLayout>
<StackLayout
Grid.Column="1">
<Image
x:Name="pile2"
Source="UsersExiticon.png"
HeightRequest="45"
WidthRequest="45"/>
</StackLayout>
<StackLayout
Grid.Column="2">
<Image
x:Name="pioche"
Source="UsersExiticon.png"
HeightRequest="45"
WidthRequest="45"/>
</StackLayout>
<StackLayout
Grid.Column="3">
<Image
x:Name="pile4"
Source="UsersExiticon.png"
HeightRequest="45"
WidthRequest="45"/>
</StackLayout>
<StackLayout
Grid.Column="4">
<Image
x:Name="pile5"
Source="UsersExiticon.png"
HeightRequest="45"
WidthRequest="45"/>
</StackLayout>
</Grid>-->
<Grid <Grid
Grid.Row="1" Grid.Row="1"
Grid.Column="0" Grid.Column="0"
@ -160,86 +82,6 @@
</Grid> </Grid>
<!--<StackLayout>
<StackLayout
Orientation="Vertical">
<Label HorizontalTextAlignment="Center" x:Name="pile0" Text="1" />
<StackLayout
Orientation="Horizontal">
<CheckBox x:Name="checkbox0" CheckedChanged="radioButton" />
<Label VerticalTextAlignment="Center" Text="Pile Ascendante" />
</StackLayout>
</StackLayout>
<StackLayout
Orientation="Vertical">
<Label HorizontalTextAlignment="Center" x:Name="pile1" Text="1" />
<StackLayout
Orientation="Horizontal">
<CheckBox x:Name="checkbox1" CheckedChanged="radioButton" />
<Label VerticalTextAlignment="Center" Text="Pile Ascendante" />
</StackLayout>
</StackLayout>
<StackLayout
Orientation="Vertical">
<Label HorizontalTextAlignment="Center" x:Name="pile2" Text="100" />
<StackLayout
Orientation="Horizontal">
<CheckBox x:Name="checkbox2" CheckedChanged="radioButton" />
<Label VerticalTextAlignment="Center" Text="Pile Descendante" />
</StackLayout>
</StackLayout>
<StackLayout
Orientation="Vertical">
<Label HorizontalTextAlignment="Center" x:Name="pile3" Text="100" />
<StackLayout
Orientation="Horizontal">
<CheckBox x:Name="checkbox3" CheckedChanged="radioButton" />
<Label VerticalTextAlignment="Center" Text="Pile Descendante" />
</StackLayout>
</StackLayout>
<Label Text="Veuillez selectionner une carte à placer:" />
<ScrollView
Orientation="Horizontal"
Padding="0,5,0,5">
<StackLayout
Orientation="Horizontal"
x:Name="Hand">
<Button x:Name="card1" Clicked="played" />
<Button x:Name="card2" Clicked="played" />
<Button x:Name="card3" Clicked="played" />
<Button x:Name="card4" Clicked="played" />
<Button x:Name="card5" Clicked="played" />
<Button x:Name="card6" Clicked="played" />
<Button x:Name="card7" Clicked="played" />
</StackLayout>
</ScrollView>
<StackLayout
x:Name="botPanel"
Orientation="Vertical"
Margin="20">
<Label x:Name="Alert"/>
</StackLayout>
</StackLayout>-->
</Grid> </Grid>
</ContentPage> </ContentPage>

@ -2,21 +2,18 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
using Xamarin.Forms; using Xamarin.Forms;
using TheGameExtreme.model.@event;
using TheGameExtreme.viewmodel; using TheGameExtreme.viewmodel;
using SkiaSharp; using SkiaSharp;
using System.IO;
using System.Reflection;
using SkiaSharp.Views.Forms; using SkiaSharp.Views.Forms;
using TouchTracking; using TouchTracking;
using Xamarin.Essentials; using Xamarin.Essentials;
using TheGameExtreme.model.card;
namespace TheGameExtreme.view namespace TheGameExtreme.view
{ {
// Learn more about making custom code visible in the Xamarin.Forms previewer /**
// by visiting https://aka.ms/xamarinforms-previewer * Classe qui permet de gérer la vue du jeu
*/
[DesignTimeVisible(false)] [DesignTimeVisible(false)]
public partial class MainPage : ContentPage public partial class MainPage : ContentPage
{ {
@ -25,12 +22,17 @@ namespace TheGameExtreme.view
private List<string> playersNames; private List<string> playersNames;
private int nbPile; private int nbPile;
private int indexMode; private int indexMode;
List<TouchManipulationBitmap> textCollection = new List<TouchManipulationBitmap>(); List<TouchManipulationCard> textCollection = new List<TouchManipulationCard>();
List<TouchManipulationBitmap> stackCollection = new List<TouchManipulationBitmap>(); List<TouchManipulationCard> stackCollection = new List<TouchManipulationCard>();
Dictionary<long, TouchManipulationBitmap> textDictionary = new Dictionary<long, TouchManipulationBitmap>(); Dictionary<long, TouchManipulationCard> textDictionary = new Dictionary<long, TouchManipulationCard>();
private SKCanvas canvas; private SKCanvas canvas;
/**
* <param name="playersNames">Liste des pseudos des joueurs</param>
* <param name="nbPile">Nombre de piles pour jouer</param>
* <param name="indexMode">Version du jeu joué</param>
*/
public MainPage(List<string> playersNames, int nbPile, int indexMode) public MainPage(List<string> playersNames, int nbPile, int indexMode)
{ {
this.playersNames = playersNames; this.playersNames = playersNames;
@ -55,6 +57,11 @@ namespace TheGameExtreme.view
} }
/**
* Evénement permettant d'afficher les messages d'alertes générés dans le model
* <param name="sender">Instance qui envoi l'événement</param>
* <param name="args">Argument(s) de l'événement</param>
*/
private void OnAlertChanged(object sender, EventArgs args) private void OnAlertChanged(object sender, EventArgs args)
{ {
if (viewmodel.Alert != null) if (viewmodel.Alert != null)
@ -65,7 +72,11 @@ namespace TheGameExtreme.view
} }
/**
* Evénement permettant de peindre la surface du canvas
* <param name="sender">Instance qui envoi l'événement</param>
* <param name="args">Arguments de l'événement</param>
*/
public void OnCanvasViewPaintSurface(object sender, SKPaintSurfaceEventArgs args) public void OnCanvasViewPaintSurface(object sender, SKPaintSurfaceEventArgs args)
{ {
canvas = args.Surface.Canvas; canvas = args.Surface.Canvas;
@ -83,12 +94,19 @@ namespace TheGameExtreme.view
} }
} }
foreach (TouchManipulationBitmap textPaint in textCollection) foreach (TouchManipulationCard textPaint in textCollection)
{ {
textPaint.Paint(canvas, SKColors.SkyBlue); textPaint.Paint(canvas, SKColors.SkyBlue);
} }
} }
/**
* Evénement qui permet de gérer le Drag and Drop.
* Il permet de traiter le clic, le mouvement, le relachement du clic et la fin de traitement d'un clic.
* <param name="sender">Instance qui envoi l'événement</param>
* <param name="args">Arguments de l'événement</param>
*/
public void OnTouchEffectAction(object sender, TouchActionEventArgs args) public void OnTouchEffectAction(object sender, TouchActionEventArgs args)
{ {
TouchTrackingPoint pt = args.Location; TouchTrackingPoint pt = args.Location;
@ -101,11 +119,11 @@ namespace TheGameExtreme.view
case TouchActionType.Pressed: case TouchActionType.Pressed:
for (int i = textCollection.Count - 1; i >= 0; i--) for (int i = textCollection.Count - 1; i >= 0; i--)
{ {
TouchManipulationBitmap textPaint = textCollection[i]; TouchManipulationCard textPaint = textCollection[i];
if (textPaint.HitTest(point)) if (textPaint.HitTest(point))
{ {
// Move bitmap to end of collection // Move card to end of collection
textCollection.Remove(textPaint); textCollection.Remove(textPaint);
textCollection.Add(textPaint); textCollection.Add(textPaint);
@ -121,10 +139,10 @@ namespace TheGameExtreme.view
case TouchActionType.Moved: case TouchActionType.Moved:
if (textDictionary.ContainsKey(args.Id)) if (textDictionary.ContainsKey(args.Id))
{ {
TouchManipulationBitmap bitmap = textDictionary[args.Id]; TouchManipulationCard card = textDictionary[args.Id];
point.Y -= 120; point.Y -= 120;
point.X -= 50; point.X -= 50;
bitmap.ProcessTouchEvent(args.Id, args.Type, point); card.ProcessTouchEvent(args.Id, args.Type, point);
canvasView.InvalidateSurface(); canvasView.InvalidateSurface();
} }
break; break;
@ -135,19 +153,19 @@ namespace TheGameExtreme.view
case TouchActionType.Cancelled: case TouchActionType.Cancelled:
if (textDictionary.ContainsKey(args.Id)) if (textDictionary.ContainsKey(args.Id))
{ {
TouchManipulationBitmap bitmap = textDictionary[args.Id]; TouchManipulationCard card = textDictionary[args.Id];
bool find = false; bool find = false;
foreach (TouchManipulationBitmap stack in stackCollection) foreach (TouchManipulationCard stack in stackCollection)
{ {
SKPoint pointVisuCard = new SKPoint(point.X, point.Y - 120); SKPoint pointVisuCard = new SKPoint(point.X, point.Y - 120);
if (stack.HitTest(point) || stack.HitTest(pointVisuCard)) if (stack.HitTest(point) || stack.HitTest(pointVisuCard))
{ {
int indexPile = stackCollection.IndexOf(stack); int indexPile = stackCollection.IndexOf(stack);
if (played(indexPile, bitmap.Value.Value)) if (Played(indexPile, card.Value.Value))
{ {
bitmap.ProcessTouchEvent(args.Id, TouchActionType.Moved, stack.InitialPoint); card.ProcessTouchEvent(args.Id, TouchActionType.Moved, stack.InitialPoint);
bitmap.InitialPoint = stackCollection[stackCollection.IndexOf(stack)].InitialPoint; card.InitialPoint = stackCollection[stackCollection.IndexOf(stack)].InitialPoint;
stackCollection[stackCollection.IndexOf(stack)] = bitmap; stackCollection[stackCollection.IndexOf(stack)] = card;
textCollection.RemoveAt(textCollection.Count - 1); textCollection.RemoveAt(textCollection.Count - 1);
find = true; find = true;
} }
@ -156,9 +174,9 @@ namespace TheGameExtreme.view
} }
if (!find) if (!find)
{ {
bitmap.ProcessTouchEvent(args.Id, TouchActionType.Moved, bitmap.InitialPoint); card.ProcessTouchEvent(args.Id, TouchActionType.Moved, card.InitialPoint);
} }
bitmap.ProcessTouchEvent(args.Id, args.Type, point); card.ProcessTouchEvent(args.Id, args.Type, point);
textDictionary.Remove(args.Id); textDictionary.Remove(args.Id);
canvasView.InvalidateSurface(); canvasView.InvalidateSurface();
} }
@ -166,16 +184,10 @@ namespace TheGameExtreme.view
} }
} }
//public void OnTouchModePickerSelectedIndexChanged(object sender, EventArgs args)
//{
// if (textPaint != null)
// {
// Picker picker = (Picker)sender;
// textPaint.TouchManager.Mode = (TouchManipulationMode)picker.SelectedItem;
// }
//}
/**
* Fonction permettant de déployer visuellement les piles
*/
private void InflateStack() private void InflateStack()
{ {
stackCollection.Clear(); stackCollection.Clear();
@ -190,7 +202,7 @@ namespace TheGameExtreme.view
textPaint = new SKPaint(); textPaint = new SKPaint();
textPaint.TextSize = textSize; textPaint.TextSize = textSize;
stackCollection.Add(new TouchManipulationBitmap(textPaint, viewmodel.getListOrderedStacks()[i].Peek()) stackCollection.Add(new TouchManipulationCard(textPaint, viewmodel.getListOrderedStacks()[i].Peek())
{ {
Matrix = SKMatrix.MakeTranslation(position.X, position.Y), Matrix = SKMatrix.MakeTranslation(position.X, position.Y),
InitialMatrix = SKMatrix.MakeTranslation(position.X, position.Y), InitialMatrix = SKMatrix.MakeTranslation(position.X, position.Y),
@ -201,6 +213,10 @@ namespace TheGameExtreme.view
} }
} }
/**
* Fonction permettant de déployer visuellement les cartes contenues dans la main du joueur actif
*/
private void InflateHand() private void InflateHand()
{ {
SKPaint textPaint = new SKPaint(); SKPaint textPaint = new SKPaint();
@ -214,7 +230,7 @@ namespace TheGameExtreme.view
textPaint.TextSize = textSize; textPaint.TextSize = textSize;
position.X -= (float)(textWidth * 0.5); position.X -= (float)(textWidth * 0.5);
textCollection.Add(new TouchManipulationBitmap(textPaint, viewmodel.CurrentHand[i]) textCollection.Add(new TouchManipulationCard(textPaint, viewmodel.CurrentHand[i])
{ {
Matrix = SKMatrix.MakeTranslation(position.X, position.Y), Matrix = SKMatrix.MakeTranslation(position.X, position.Y),
InitialMatrix = SKMatrix.MakeTranslation(position.X, position.Y), InitialMatrix = SKMatrix.MakeTranslation(position.X, position.Y),
@ -225,18 +241,30 @@ namespace TheGameExtreme.view
} }
} }
/**
* Evénement traitant la fin du jeu
* <param name="sender">Instance qui envoi l'événement</param>
* <param name="args">Argument(s) de l'événement</param>
*/
private void OnEndGame(object sender, EventArgs args) private void OnEndGame(object sender, EventArgs args)
{ {
button = (Button)gameOption.Children[0]; button = (Button)gameOption.Children[0];
gameOption.Children.Clear(); gameOption.Children.Clear();
Button retryButton = new Button(); Button retryButton = new Button();
retryButton.Text = "Retry"; retryButton.Text = "Retry";
retryButton.Clicked += retry; retryButton.Clicked += Retry;
retryButton.BackgroundColor = (Color)Application.Current.Resources["SkyBlueColor"]; retryButton.BackgroundColor = (Color)Application.Current.Resources["SkyBlueColor"];
gameOption.Children.Add(retryButton); gameOption.Children.Add(retryButton);
} }
private bool played(int numStack, decimal value) /**
* Fonction permettant de lancer le déplacement d'une carte sur une pile
* <param name="numStack">Index de la pile joué</param>
* <param name="value">Valeur de la carte joué</param>
* <returns>Booléen qui indique si la carte a pu être joué</returns>
*/
private bool Played(int numStack, decimal value)
{ {
if (!viewmodel.played(numStack, value)) if (!viewmodel.played(numStack, value))
{ {
@ -245,7 +273,13 @@ namespace TheGameExtreme.view
return true; return true;
} }
private void retry(object sender, EventArgs args)
/**
* Evénement permettant de relancer le jeu avec les mêmes paramètres de jeu
* <param name="sender">Instance qui envoi l'événement</param>
* <param name="args">Argument de l'événement</param>
*/
private void Retry(object sender, EventArgs args)
{ {
viewmodel = new Main(playersNames, nbPile, indexMode); viewmodel = new Main(playersNames, nbPile, indexMode);
@ -263,6 +297,12 @@ namespace TheGameExtreme.view
gameOption.Children.Add(button); gameOption.Children.Add(button);
} }
/**
* Evénement permettant de lancer la fin du tour d'un joueur
* <param name="sender">Instance qui envoi l'événement</param>
* <param name="args">Argument de l'événement</param>
*/
private void EndTurn(object sender, EventArgs args) private void EndTurn(object sender, EventArgs args)
{ {
if (!viewmodel.endTurn()) if (!viewmodel.endTurn())
@ -276,6 +316,12 @@ namespace TheGameExtreme.view
} }
} }
/**
* Evénement permettant de naviguer entre les différentes pages de l'application
* <param name="sender">Instance qui envoi l'événement</param>
* <param name="args">Argument de l'événement</param>
*/
private async void PlayToHome(object sender, EventArgs args) private async void PlayToHome(object sender, EventArgs args)
{ {
await Navigation.PopToRootAsync(); await Navigation.PopToRootAsync();

@ -7,7 +7,10 @@ using Xamarin.Essentials;
namespace TheGameExtreme.view namespace TheGameExtreme.view
{ {
public class TouchManipulationBitmap /**
* Classe permettant de gérer un objet dessiné dans un canvas
*/
public class TouchManipulationCard
{ {
public SKPoint InitialPoint { get; set; } public SKPoint InitialPoint { get; set; }
SKPaint textPaint; SKPaint textPaint;
@ -17,7 +20,12 @@ namespace TheGameExtreme.view
private float width = 0.01f * (float)DeviceDisplay.MainDisplayInfo.Width; private float width = 0.01f * (float)DeviceDisplay.MainDisplayInfo.Width;
private float height = 0.01f * (float)DeviceDisplay.MainDisplayInfo.Width * 3f; private float height = 0.01f * (float)DeviceDisplay.MainDisplayInfo.Width * 3f;
public TouchManipulationBitmap(SKPaint textPaint, CardVM value)
/**
* <param name="textPaint">Objet dessiné</param>
* <param name="value">Carte qui est dessiné par le textPaint</param>
*/
public TouchManipulationCard(SKPaint textPaint, CardVM value)
{ {
this.textPaint = textPaint; this.textPaint = textPaint;
Value = value; Value = value;
@ -46,6 +54,11 @@ namespace TheGameExtreme.view
public SKMatrix InitialMatrix { set; get; } public SKMatrix InitialMatrix { set; get; }
/**
* Fonction permettant de dessiner l'objet que contient l'instance dans un canvas donné avec une couleur donnée
* <param name="canvas">Canvas où l'on souhaite dessiner l'objet contenu dans l'instance</param>
* <param name="color">Couleur qui sera prise par l'objet</param>
*/
public void Paint(SKCanvas canvas, SKColor color) public void Paint(SKCanvas canvas, SKColor color)
{ {
canvas.Save(); canvas.Save();
@ -70,11 +83,20 @@ namespace TheGameExtreme.view
} }
/**
* Fonction permettant de changer la couleur de l'objet contenu dans l'instance
* <param name="color">Nouvelle couleur que l'on souhaite attribué à l'objet contenu dans l'instance</param>
*/
public void ChangeColor(SKColor color) public void ChangeColor(SKColor color)
{ {
textPaint.Color = color; textPaint.Color = color;
} }
/**
* Fonction permettant de savoir si le point qu'on lui passe est dans la zone où l'objet est dessiné
* <param name="location">Point que l'on souhaite tester</param>
* <returns>Booléen qui indique si le point donné est dans la zone où l'objet en instance est dessiné</returns>
*/
public bool HitTest(SKPoint location) public bool HitTest(SKPoint location)
{ {
// Invert the matrix // Invert the matrix
@ -92,6 +114,13 @@ namespace TheGameExtreme.view
return false; return false;
} }
/**
* Evénement qui permet de gérer le Drag and Drop.
* Il permet de traiter le clic, le mouvement, le relachement du clic et la fin de traitement d'un objet.
* <param name="id">Index de la position que l'on souhaite traiter</param>
* <param name="type">Type d'évenement lancé</param>
* <param name="location">Nouveau point que l'on souhaite traiter</param>
*/
public void ProcessTouchEvent(long id, TouchActionType type, SKPoint location) public void ProcessTouchEvent(long id, TouchActionType type, SKPoint location)
{ {
switch (type) switch (type)
@ -119,7 +148,10 @@ namespace TheGameExtreme.view
} }
} }
void Manipulate() /**
* Fonction permettant de traiter un déplacement de l'objet en instance
*/
private void Manipulate()
{ {
TouchManipulationInfo[] infos = new TouchManipulationInfo[touchDictionary.Count]; TouchManipulationInfo[] infos = new TouchManipulationInfo[touchDictionary.Count];
touchDictionary.Values.CopyTo(infos, 0); touchDictionary.Values.CopyTo(infos, 0);

@ -1,107 +0,0 @@
//using System;
//using SkiaSharp;
//namespace TheGameExtreme.view
//{
// public class TouchManipulationManager
// {
// public TouchManipulationMode Mode { set; get; }
// //float Magnitude(SKPoint point)
// //{
// // return (float)Math.Sqrt(Math.Pow(point.X, 2) + Math.Pow(point.Y, 2));
// //}
// public SKMatrix OneFingerManipulate(SKPoint prevPoint, SKPoint newPoint, SKPoint pivotPoint)
// {
// if (Mode == TouchManipulationMode.None)
// {
// return SKMatrix.MakeIdentity();
// }
// SKMatrix touchMatrix = SKMatrix.MakeIdentity();
// SKPoint delta = newPoint - prevPoint;
// //if (Mode == TouchManipulationMode.ScaleDualRotate) // One-finger rotation
// //{
// // SKPoint oldVector = prevPoint - pivotPoint;
// // SKPoint newVector = newPoint - pivotPoint;
// // // Avoid rotation if fingers are too close to center
// // if (Magnitude(newVector) > 25 && Magnitude(oldVector) > 25)
// // {
// // float prevAngle = (float)Math.Atan2(oldVector.Y, oldVector.X);
// // float newAngle = (float)Math.Atan2(newVector.Y, newVector.X);
// // // Calculate rotation matrix
// // float angle = newAngle - prevAngle;
// // touchMatrix = SKMatrix.MakeRotation(angle, pivotPoint.X, pivotPoint.Y);
// // // Effectively rotate the old vector
// // float magnitudeRatio = Magnitude(oldVector) / Magnitude(newVector);
// // oldVector.X = magnitudeRatio * newVector.X;
// // oldVector.Y = magnitudeRatio * newVector.Y;
// // // Recalculate delta
// // delta = newVector - oldVector;
// // }
// //}
// // Multiply the rotation matrix by a translation matrix
// SKMatrix.PostConcat(ref touchMatrix, SKMatrix.MakeTranslation(delta.X, delta.Y));
// return touchMatrix;
// }
// public SKMatrix TwoFingerManipulate(SKPoint prevPoint, SKPoint newPoint, SKPoint pivotPoint)
// {
// SKMatrix touchMatrix = SKMatrix.MakeIdentity();
// //SKPoint oldVector = prevPoint - pivotPoint;
// //SKPoint newVector = newPoint - pivotPoint;
// //if (Mode == TouchManipulationMode.ScaleRotate ||
// // Mode == TouchManipulationMode.ScaleDualRotate)
// //{
// // // Find angles from pivot point to touch points
// // float oldAngle = (float)Math.Atan2(oldVector.Y, oldVector.X);
// // float newAngle = (float)Math.Atan2(newVector.Y, newVector.X);
// // // Calculate rotation matrix
// // float angle = newAngle - oldAngle;
// // touchMatrix = SKMatrix.MakeRotation(angle, pivotPoint.X, pivotPoint.Y);
// // // Effectively rotate the old vector
// // float magnitudeRatio = Magnitude(oldVector) / Magnitude(newVector);
// // oldVector.X = magnitudeRatio * newVector.X;
// // oldVector.Y = magnitudeRatio * newVector.Y;
// //}
// float scaleX = 1;
// float scaleY = 1;
// //if (Mode == TouchManipulationMode.AnisotropicScale)
// //{
// // scaleX = newVector.X / oldVector.X;
// // scaleY = newVector.Y / oldVector.Y;
// //}
// //else if (Mode == TouchManipulationMode.IsotropicScale ||
// // Mode == TouchManipulationMode.ScaleRotate ||
// // Mode == TouchManipulationMode.ScaleDualRotate)
// //{
// // scaleX = scaleY = Magnitude(newVector) / Magnitude(oldVector);
// //}
// if (!float.IsNaN(scaleX) && !float.IsInfinity(scaleX) &&
// !float.IsNaN(scaleY) && !float.IsInfinity(scaleY))
// {
// SKMatrix.PostConcat(ref touchMatrix,
// SKMatrix.MakeScale(scaleX, scaleY, pivotPoint.X, pivotPoint.Y));
// }
// return touchMatrix;
// }
// }
//}

Binary file not shown.

Binary file not shown.
Loading…
Cancel
Save