Ajout du pseudo, abstraction de la création de deck en vue de l'implémentation de nouveau jeu de carte et du choix du jeu de carte et ajout de l'affichage en landscape forcer

master
cldupland 6 years ago
parent 93108c4350
commit d3b4fafd0a

@ -9,7 +9,7 @@ using Android.OS;
namespace TheGameExtreme.Droid namespace TheGameExtreme.Droid
{ {
[Activity(Label = "TheGameExtreme", Icon = "@mipmap/icon", Theme = "@style/MainTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)] [Activity(Label = "TheGameExtreme", Icon = "@mipmap/icon", Theme = "@style/MainTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation, ScreenOrientation = ScreenOrientation.Landscape)]
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{ {
protected override void OnCreate(Bundle savedInstanceState) protected override void OnCreate(Bundle savedInstanceState)
@ -30,4 +30,4 @@ namespace TheGameExtreme.Droid
base.OnRequestPermissionsResult(requestCode, permissions, grantResults); base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
} }
} }
} }

@ -1,6 +1,6 @@
<?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="1" android:versionName="1.0" package="com.uca.thegameextreme"> <manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.uca.thegameextreme">
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="28" /> <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="28" />
<application android:label="TheGameExtreme.Android"></application> <application android:label="TheGameExtreme.Android"></application>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
</manifest> </manifest>

@ -2,37 +2,36 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0"> <plist version="1.0">
<dict> <dict>
<key>UIDeviceFamily</key> <key>UIDeviceFamily</key>
<array> <array>
<integer>1</integer> <integer>1</integer>
<integer>2</integer> <integer>2</integer>
</array> </array>
<key>UISupportedInterfaceOrientations</key> <key>UISupportedInterfaceOrientations</key>
<array> <array>
<string>UIInterfaceOrientationPortrait</string> <string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeLeft</string> <string>UIInterfaceOrientationLandscapeRight</string>
<string>UIInterfaceOrientationLandscapeRight</string> </array>
</array> <key>UISupportedInterfaceOrientations~ipad</key>
<key>UISupportedInterfaceOrientations~ipad</key> <array>
<array> <string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationPortrait</string> <string>UIInterfaceOrientationPortraitUpsideDown</string>
<string>UIInterfaceOrientationPortraitUpsideDown</string> <string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeLeft</string> <string>UIInterfaceOrientationLandscapeRight</string>
<string>UIInterfaceOrientationLandscapeRight</string> </array>
</array> <key>MinimumOSVersion</key>
<key>MinimumOSVersion</key> <string>8.0</string>
<string>8.0</string> <key>CFBundleDisplayName</key>
<key>CFBundleDisplayName</key> <string>TheGameExtreme</string>
<string>TheGameExtreme</string> <key>CFBundleIdentifier</key>
<key>CFBundleIdentifier</key> <string>com.uca.TheGameExtreme</string>
<string>com.uca.TheGameExtreme</string> <key>CFBundleVersion</key>
<key>CFBundleVersion</key> <string>1.0</string>
<string>1.0</string> <key>UILaunchStoryboardName</key>
<key>UILaunchStoryboardName</key> <string>LaunchScreen</string>
<string>LaunchScreen</string> <key>CFBundleName</key>
<key>CFBundleName</key> <string>TheGameExtreme</string>
<string>TheGameExtreme</string> <key>XSAppIconAssets</key>
<key>XSAppIconAssets</key> <string>Assets.xcassets/AppIcon.appiconset</string>
<string>Assets.xcassets/AppIcon.appiconset</string>
</dict> </dict>
</plist> </plist>

@ -1,10 +1,18 @@
using System; using System;
using TheGameExtreme.model.card;
namespace TheGameExtreme.model.deck namespace TheGameExtreme.model.deck
{ {
public class ClassicDeck public class ClassicDeck : Deck
{ {
public ClassicDeck() public ClassicDeck()
{ {
Card card;
for (int i = 2; i <= 99; i++)
{
card = new ClassicCard(i);
deck.Add(card);
}
} }
} }
} }

@ -1,16 +0,0 @@
using System;
using System.Collections.Generic;
using TheGameExtreme.model.card;
namespace TheGameExtreme.model
{
public abstract class CreationDack
{
private List<Card> deck = new List<Card>();
public CreationDack()
{
}
}
}

@ -0,0 +1,32 @@
using System;
using System.Collections.Generic;
using TheGameExtreme.model.card;
namespace TheGameExtreme.model
{
public abstract class Deck
{
protected List<Card> deck = new List<Card>();
public Deck()
{
}
public int size()
{
return deck.Count;
}
public void removeAt(int index)
{
deck.RemoveAt(index);
}
public Card getCard(int index)
{
return deck[index];
}
}
}

@ -1,10 +1,49 @@
using System; using System;
using System.Collections.Generic;
using TheGameExtreme.model.card;
namespace TheGameExtreme.model.deck namespace TheGameExtreme.model.deck
{ {
public class ExtremeDeck public class ExtremeDeck : Deck
{ {
public ExtremeDeck() public ExtremeDeck()
{ {
Random random = new Random();
List<int> endGame = new List<int>();
while (endGame.Count < 4)
{
int r = random.Next(2, 99);
if (!endGame.Contains(r))
{
endGame.Add(r);
}
}
List<int> threeCard = new List<int>();
while (threeCard.Count < 4)
{
int r = random.Next(2, 99);
if (!endGame.Contains(r) && !threeCard.Contains(r))
{
threeCard.Add(r);
}
}
Card card;
for (int i = 2; i <= 99; i++)
{
if (endGame.Contains(i))
{
card = new EndGameCard(i);
}
else if (threeCard.Contains(i))
{
card = new ThreeCard(i);
}
else
{
card = new ClassicCard(i);
}
deck.Add(card);
}
} }
} }
} }

@ -7,11 +7,13 @@ namespace TheGameExtreme.model.@event
public class PlayerChangedEventArgs : EventArgs public class PlayerChangedEventArgs : EventArgs
{ {
public String Pseudo;
public List<Card> NewCurrentHand; public List<Card> NewCurrentHand;
public PlayerChangedEventArgs(List<Card> newCurrentHand) public PlayerChangedEventArgs(List<Card> newCurrentHand, string pseudo)
{ {
NewCurrentHand = newCurrentHand; NewCurrentHand = newCurrentHand;
Pseudo = pseudo;
} }
} }
} }

@ -1,6 +1,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using TheGameExtreme.model.card; using TheGameExtreme.model.card;
using TheGameExtreme.model.deck;
using TheGameExtreme.model.@event; using TheGameExtreme.model.@event;
namespace TheGameExtreme.model.manager namespace TheGameExtreme.model.manager
@ -13,7 +14,7 @@ namespace TheGameExtreme.model.manager
protected int currentIndexPlayer; protected int currentIndexPlayer;
protected List<Player> playerList = new List<Player>(); protected List<Player> playerList = new List<Player>();
public List<Stack<Card>> ListOrderedStacks { get; set; } public List<Stack<Card>> ListOrderedStacks { get; set; }
protected List<Card> deck = new List<Card>(); protected Deck deck;
protected bool win = true; protected bool win = true;
public String EndMessage { get; set; } public String EndMessage { get; set; }
public event EventHandler<TopRangeChangedEventArgs> TopRangeChanged; public event EventHandler<TopRangeChangedEventArgs> TopRangeChanged;
@ -60,41 +61,15 @@ namespace TheGameExtreme.model.manager
protected void createDeck() protected void createDeck()
{ {
Random random = new Random(); switch (true)
List<int> endGame = new List<int>();
while (endGame.Count < 4)
{ {
int r = random.Next(2, 99); case false:
if (!endGame.Contains(r)) deck = new ClassicDeck();
{ break;
endGame.Add(r);
} default:
} deck = new ExtremeDeck();
List<int> threeCard = new List<int>(); break;
while (threeCard.Count < 4)
{
int r = random.Next(2, 99);
if (!endGame.Contains(r) && !threeCard.Contains(r))
{
threeCard.Add(r);
}
}
Card card;
for (int i = 2; i <= 99; i++)
{
if (endGame.Contains(i))
{
card = new EndGameCard(i);
}
else if (threeCard.Contains(i))
{
card = new ThreeCard(i);
}
else
{
card = new ClassicCard(i);
}
deck.Add(card);
} }
} }
@ -119,9 +94,9 @@ namespace TheGameExtreme.model.manager
for (int i = 0; i < nbMaxCard; i++) for (int i = 0; i < nbMaxCard; i++)
{ {
playerList.ForEach(player => { playerList.ForEach(player => {
int r = new Random().Next(0, deck.Count - 1); int r = new Random().Next(0, deck.size() - 1);
player.pioche(deck[r]); player.pioche(deck.getCard(r));
deck.RemoveAt(r); deck.removeAt(r);
}); });
} }
} }

@ -26,7 +26,7 @@ namespace TheGameExtreme.model.manager
currentIndexPlayer = 0; currentIndexPlayer = 0;
} }
CurrentHand = playerList[currentIndexPlayer].getCardList(); CurrentHand = playerList[currentIndexPlayer].getCardList();
OnPlayerChanged(new PlayerChangedEventArgs(CurrentHand)); OnPlayerChanged(new PlayerChangedEventArgs(CurrentHand, playerList[currentIndexPlayer].Pseudo));
nbCardAtBeginOfTurn = CurrentHand.Count; nbCardAtBeginOfTurn = CurrentHand.Count;
CurrentCardPlayed.Clear(); CurrentCardPlayed.Clear();
@ -85,13 +85,13 @@ namespace TheGameExtreme.model.manager
int nbPickedCard = nbMaxCard - CurrentHand.Count; int nbPickedCard = nbMaxCard - CurrentHand.Count;
for (int i = 0; i < nbPickedCard; i++) for (int i = 0; i < nbPickedCard; i++)
{ {
if (deck.Count == 0) if (deck.size() == 0)
{ {
return; return;
} }
int random = new Random().Next(0, deck.Count - 1); int random = new Random().Next(0, deck.size() - 1);
playerList[currentIndexPlayer].pioche(deck[random]); playerList[currentIndexPlayer].pioche(deck.getCard(random));
deck.RemoveAt(random); deck.removeAt(random);
} }
} }

@ -1,164 +0,0 @@
using System;
using System.Collections.Generic;
using TheGameExtreme.model.card;
using TheGameExtreme.model.@event;
namespace TheGameExtreme.model.manager
{
public class SoloGameManager : GameManager
{
public SoloGameManager(int nbPlayer, List<String> players)
: base(nbPlayer, players)
{
}
public override bool endTurn()
{
<<<<<<< HEAD
verifyNbCardPlay();
=======
// Vérifie que l'utilisateur a bien joué deux cartes
>>>>>>> c1e072686aecc6833e1faf062739820e55484d86
pioche();
currentIndexPlayer += 1;
if (currentIndexPlayer == playerList.Count)
{
currentIndexPlayer = 0;
}
CurrentHand = playerList[currentIndexPlayer].getCardList();
OnPlayerChanged(new PlayerChangedEventArgs(CurrentHand));
nbCardAtBeginOfTurn = CurrentHand.Count;
CurrentCardPlayed.Clear();
if (isEndGame()) // Ajouter le score en calculant les cartes restantes dans la pile et dans les mains des joueurs
{
displayWinner();
return true;
}
return false;
}
protected void verifyNbCardPlay()
{
foreach (Card cardPlayed in CurrentCardPlayed)
{
if (cardPlayed.GetType() == typeof(ThreeCard))
{
if ((nbCardAtBeginOfTurn - CurrentHand.Count) < 3) // Penser à vérifier s'il a joué une ThreeCard pour regarder s'il a bien joué 3 cartes
{
testIsEndGame();
}
return;
}
}
if ((nbCardAtBeginOfTurn - CurrentHand.Count) < 2) // Penser à vérifier s'il a joué une ThreeCard pour regarder s'il a bien joué 3 cartes
{
testIsEndGame();
}
}
protected void testIsEndGame()
{
if (isEndGame())
{
displayWinner();
}
else
{
throw new Exception("Vous n'avez pas joué assez de carte!");
}
}
protected void displayWinner()
{
if (win)
{
EndMessage = "Le jeu est terminé!\n Bravo vous avez gagné!";
}
}
protected override void pioche()
{
int nbPickedCard = nbMaxCard - CurrentHand.Count;
for (int i = 0; i < nbPickedCard; i++)
{
if (deck.Count == 0)
{
return;
}
int random = new Random().Next(0, deck.Count - 1);
playerList[currentIndexPlayer].pioche(deck[random]);
deck.RemoveAt(random);
}
}
protected override bool isEndGame()
{
if (CurrentHand.Count != 0)
{
List<Card> playableCard = new List<Card>();
tryToFindSoluce(playableCard);
return testEndGame(playableCard);
}
return false;
}
protected override void tryToFindSoluce(List<Card> playableCard)
{
CurrentHand.ForEach(card =>
{
if (card.Value > ListOrderedStacks[0].Peek().Value || card.Value > ListOrderedStacks[1].Peek().Value || card.Value < ListOrderedStacks[2].Peek().Value || card.Value < ListOrderedStacks[3].Peek().Value)
{
playableCard.Add(card);
}
});
}
protected override bool testEndGame(List<Card> playableCard)
{
if (playableCard.Count == 2)
{
foreach (Card c in playableCard)
{
if (c.Equals(typeof(ThreeCard)))
{
win = false;
EndMessage = "Le jeu est terminé!\n Désolé, vous avez perdu... Vous deviez jouer trois cartes à cause de l'effet \"Trois cartes joué\" hors votre jeu ne permet pas d'en jouer autant! Essayez encore!";
return true;
}
}
}
else if (playableCard.Count < 2)
{
win = false;
EndMessage = "Le jeu est terminé!\n Désolé, vous avez perdu... Essayez encore!";
return true;
}
else if (effectLose())
{
win = false;
EndMessage = "Désolé, vous n'avez pas recouvert la tête de mort... Réessayez ;)";
return true;
}
return false;
}
protected override bool effectLose()
{
foreach (Stack<Card> orderedStack in ListOrderedStacks)
{
if (orderedStack.Peek().GetType() == typeof(EndGameCard))
{
return true;
}
}
return false;
}
}
}

@ -16,6 +16,7 @@
<StackLayout <StackLayout
Orientation="Vertical" Orientation="Vertical"
Margin="10,20,10,20"> Margin="10,20,10,20">
<Label x:Name="pseudo" Text="Pseudo" />
<Label Text="Selectionner la pile sur laquel vous souhaitez poser la carte:" /> <Label Text="Selectionner la pile sur laquel vous souhaitez poser la carte:" />
<StackLayout <StackLayout
Orientation="Horizontal" Orientation="Horizontal"

@ -40,6 +40,7 @@ namespace TheGameExtreme
viewmodel.BindingChanged += OnBindingChanged; viewmodel.BindingChanged += OnBindingChanged;
Alert.SetBinding(Label.TextProperty, new Binding("Alert", source: viewmodel)); Alert.SetBinding(Label.TextProperty, new Binding("Alert", source: viewmodel));
pseudo.SetBinding(Label.TextProperty, new Binding("Pseudo", source: viewmodel));
inflateHand(); inflateHand();
@ -148,6 +149,7 @@ namespace TheGameExtreme
viewmodel.BindingChanged += OnBindingChanged; viewmodel.BindingChanged += OnBindingChanged;
Alert.SetBinding(Label.TextProperty, new Binding("Alert", source: viewmodel)); Alert.SetBinding(Label.TextProperty, new Binding("Alert", source: viewmodel));
pseudo.SetBinding(Label.TextProperty, new Binding("Pseudo", source: viewmodel));
inflateHand(); inflateHand();

@ -23,6 +23,16 @@ namespace TheGameExtreme.viewmodel
OnPropertyChanged("Alert"); OnPropertyChanged("Alert");
} }
} }
private string pseudo = "Pseudo";
public String Pseudo
{
get { return pseudo; }
set
{
pseudo = value;
OnPropertyChanged("Pseudo");
}
}
protected virtual void OnPropertyChanged(string info) protected virtual void OnPropertyChanged(string info)
{ {
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(info)); PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(info));
@ -30,7 +40,7 @@ namespace TheGameExtreme.viewmodel
private GameManager gameManager; private GameManager gameManager;
public List<Card> CurrentHand { get; set; } public List<Card> CurrentHand { get; set; }
private ObservableCollection<Stack<Card>> ListOrderedStacks; //private ObservableCollection<Stack<Card>> ListOrderedStacks;
public Main() public Main()
@ -43,12 +53,13 @@ namespace TheGameExtreme.viewmodel
CurrentHand = gameManager.CurrentHand; CurrentHand = gameManager.CurrentHand;
ListOrderedStacks = new ObservableCollection<Stack<Card>>(gameManager.ListOrderedStacks); //ListOrderedStacks = new ObservableCollection<Stack<Card>>(gameManager.ListOrderedStacks);
} }
protected internal void OnPlayerChanged(object source, PlayerChangedEventArgs args) protected internal void OnPlayerChanged(object source, PlayerChangedEventArgs args)
{ {
CurrentHand = args.NewCurrentHand; CurrentHand = args.NewCurrentHand;
Pseudo = args.Pseudo;
} }
public void OnTopRangeChanged(object source, TopRangeChangedEventArgs args) public void OnTopRangeChanged(object source, TopRangeChangedEventArgs args)

Loading…
Cancel
Save