Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Tile
- {
- public Card C;
- //(Wind | Daradon)
- public IWindDaradon IWD;
- public Tile(Card C, Wind W)
- {
- this.C = C;
- this.IWD = W;
- }
- public Tile(Card C, Daradon D)
- {
- this.C = C;
- this.IWD = D;
- }
- public int SortIndex
- {
- get { return C.SortIndex * IWD.SortIndex; }
- }
- public override string ToString()
- {
- return String.Format("Tile SI={0} {1} {2}", SortIndex, C, IWD);
- }
- }
- class Card
- {
- // 3 масти
- public enum Suit { Tr, Ch, Pk }
- public Card.Suit S;
- // 1-9 номинал
- public int Nominal;
- public Card(Suit S, int N)
- {
- this.S = S;
- this.Nominal = N;
- if (Nominal > 9) Nominal = 9;
- if (Nominal < 1) Nominal = 1;
- }
- public static int SortOrder = 0;
- public int SortIndex
- {
- get { return (((int)S + 1) * Nominal) + (Card.SortOrder * 1000); }
- }
- public override string ToString()
- {
- return String.Format("Card {0}-{1}", S, Nominal);
- }
- }
- // Что общего между Драконом и Ветром? Яхз.
- // Лучше абстрактный класс. Но потом.
- interface IWindDaradon
- {
- int SortIndex { get; }
- }
- class Wind : IWindDaradon
- {
- // 4 вида
- public enum Kind { W = 0, S, E, N, }
- public Wind.Kind K;
- public Wind(Wind.Kind K)
- {
- this.K = K;
- }
- public static int SortOrder = 1;
- public int SortIndex
- {
- get { return ((int)K + 1) + (Wind.SortOrder * 1000); }
- }
- public override string ToString()
- {
- return String.Format("Wind {0}", K);
- }
- }
- class Daradon : IWindDaradon
- {
- // 3 вида
- public enum Kind { Red = 10, Green, Black }
- public Daradon.Kind K;
- public Daradon(Daradon.Kind K)
- {
- this.K = K;
- }
- public static int SortOrder = 2;
- public int SortIndex
- {
- get { return ((int)K + 1) + (Daradon.SortOrder * 1000); }
- }
- public override string ToString()
- {
- return String.Format("Daradon {0}", K);
- }
- }
- static class TileComparator
- {
- public static void CompareByCard()
- {
- Card.SortOrder = 0;
- Wind.SortOrder = 1;
- Daradon.SortOrder = 1;
- }
- public static void CompareByWindCard()
- {
- Wind.SortOrder = 0;
- Card.SortOrder = 1;
- Daradon.SortOrder = 2;
- }
- public static void CompareByDaradonCardWind()
- {
- Daradon.SortOrder = 0;
- Card.SortOrder = 1;
- Wind.SortOrder = 2;
- }
- public static int CompareTiles(Tile T1, Tile T2)
- {
- return T1.SortIndex - T2.SortIndex;
- }
- }
- public static class TestTile
- {
- private static List<Tile> mTiles = new List<Tile>();
- public static void MainSortTest()
- {
- Console.WindowWidth = Console.LargestWindowWidth;
- Console.WriteLine("Init Colection:");
- mTiles.Add(new Tile(new Card(Card.Suit.Ch, 2), new Wind(Wind.Kind.W)));
- mTiles.Add(new Tile(new Card(Card.Suit.Pk, 3), new Wind(Wind.Kind.W)));
- mTiles.Add(new Tile(new Card(Card.Suit.Ch, 4), new Wind(Wind.Kind.N)));
- mTiles.Add(new Tile(new Card(Card.Suit.Ch, 4), new Wind(Wind.Kind.E)));
- mTiles.Add(new Tile(new Card(Card.Suit.Ch, 2), new Wind(Wind.Kind.E)));
- mTiles.Add(new Tile(new Card(Card.Suit.Pk, 8), new Wind(Wind.Kind.E)));
- mTiles.Add(new Tile(new Card(Card.Suit.Tr, 3), new Daradon(Daradon.Kind.Green)));
- mTiles.Add(new Tile(new Card(Card.Suit.Ch, 4), new Daradon(Daradon.Kind.Black)));
- mTiles.Add(new Tile(new Card(Card.Suit.Pk, 9), new Daradon(Daradon.Kind.Green)));
- mTiles.Add(new Tile(new Card(Card.Suit.Ch, 2), new Daradon(Daradon.Kind.Red)));
- mTiles.Add(new Tile(new Card(Card.Suit.Tr, 3), new Daradon(Daradon.Kind.Red)));
- PrintTiles();
- Console.WriteLine();
- Console.WriteLine("Sort by card: order [Tr 1-9, Ch 1-9, Pk 1-9]");
- TileComparator.CompareByCard();
- mTiles.Sort(TileComparator.CompareTiles);
- PrintTiles();
- Console.WriteLine();
- Console.WriteLine("Sort by WindCard: order [W, S, E, N], [Tr 1-9, Ch 1-9, Pk 1-9]");
- TileComparator.CompareByWindCard();
- mTiles.Sort(TileComparator.CompareTiles);
- PrintTiles();
- Console.WriteLine();
- Console.WriteLine("Sort by DaradonCardWind: order [Red, Green, Black], [Tr 1-9, Ch 1-9, Pk 1-9], [W, S, E, N]");
- TileComparator.CompareByDaradonCardWind();
- mTiles.Sort(TileComparator.CompareTiles);
- PrintTiles();
- Console.ReadKey();
- }
- public static void PrintTiles()
- {
- Console.WriteLine();
- for (int i = 0; i < mTiles.Count; i++)
- {
- Console.WriteLine(mTiles[i]);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment