Guest User

ДраконоВетер

a guest
Aug 5th, 2015
295
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.89 KB | None | 0 0
  1. class Tile
  2. {
  3.     public Card C;
  4.  
  5.     //(Wind | Daradon)
  6.     public IWindDaradon IWD;
  7.  
  8.     public Tile(Card C, Wind W)
  9.     {
  10.         this.C = C;
  11.         this.IWD = W;
  12.     }
  13.     public Tile(Card C, Daradon D)
  14.     {
  15.         this.C = C;
  16.         this.IWD = D;
  17.     }
  18.  
  19.     public int SortIndex
  20.     {
  21.         get { return C.SortIndex * IWD.SortIndex; }
  22.     }
  23.  
  24.     public override string ToString()
  25.     {
  26.         return String.Format("Tile SI={0} {1} {2}", SortIndex, C, IWD);
  27.     }
  28. }
  29.  
  30. class Card
  31. {
  32.     // 3 масти
  33.     public enum Suit { Tr, Ch, Pk }
  34.  
  35.     public Card.Suit S;
  36.     // 1-9 номинал
  37.     public int Nominal;
  38.  
  39.     public Card(Suit S, int N)
  40.     {
  41.         this.S = S;
  42.         this.Nominal = N;
  43.         if (Nominal > 9) Nominal = 9;
  44.         if (Nominal < 1) Nominal = 1;
  45.     }
  46.  
  47.     public static int SortOrder = 0;
  48.     public int SortIndex
  49.     {
  50.         get { return (((int)S + 1) * Nominal) + (Card.SortOrder * 1000); }
  51.     }
  52.  
  53.     public override string ToString()
  54.     {
  55.         return String.Format("Card {0}-{1}", S, Nominal);
  56.     }
  57. }
  58.  
  59. // Что общего между Драконом и Ветром? Яхз.
  60. // Лучше абстрактный класс. Но потом.
  61. interface IWindDaradon
  62. {
  63.     int SortIndex { get; }
  64. }
  65.  
  66. class Wind : IWindDaradon
  67. {
  68.     // 4 вида
  69.     public enum Kind { W = 0, S, E, N, }
  70.  
  71.     public Wind.Kind K;
  72.  
  73.     public Wind(Wind.Kind K)
  74.     {
  75.         this.K = K;
  76.     }
  77.  
  78.     public static int SortOrder = 1;
  79.     public int SortIndex
  80.     {
  81.         get { return ((int)K + 1) + (Wind.SortOrder * 1000); }
  82.     }
  83.  
  84.     public override string ToString()
  85.     {
  86.         return String.Format("Wind {0}", K);
  87.     }
  88. }
  89.  
  90. class Daradon : IWindDaradon
  91. {
  92.     // 3 вида
  93.     public enum Kind { Red = 10, Green, Black }
  94.  
  95.     public Daradon.Kind K;
  96.  
  97.     public Daradon(Daradon.Kind K)
  98.     {
  99.         this.K = K;
  100.     }
  101.  
  102.     public static int SortOrder = 2;
  103.     public int SortIndex
  104.     {
  105.         get { return ((int)K + 1) + (Daradon.SortOrder * 1000); }
  106.     }
  107.  
  108.     public override string ToString()
  109.     {
  110.         return String.Format("Daradon {0}", K);
  111.     }
  112. }
  113.  
  114. static class TileComparator
  115. {
  116.     public static void CompareByCard()
  117.     {
  118.         Card.SortOrder = 0;
  119.         Wind.SortOrder = 1;
  120.         Daradon.SortOrder = 1;
  121.     }
  122.     public static void CompareByWindCard()
  123.     {
  124.         Wind.SortOrder = 0;
  125.         Card.SortOrder = 1;
  126.         Daradon.SortOrder = 2;
  127.     }
  128.     public static void CompareByDaradonCardWind()
  129.     {
  130.         Daradon.SortOrder = 0;
  131.         Card.SortOrder = 1;
  132.         Wind.SortOrder = 2;
  133.     }
  134.  
  135.     public static int CompareTiles(Tile T1, Tile T2)
  136.     {
  137.         return T1.SortIndex - T2.SortIndex;
  138.     }
  139. }
  140.  
  141. public static class TestTile
  142. {
  143.     private static List<Tile> mTiles = new List<Tile>();
  144.  
  145.     public static void MainSortTest()
  146.     {
  147.         Console.WindowWidth = Console.LargestWindowWidth;
  148.         Console.WriteLine("Init Colection:");
  149.  
  150.         mTiles.Add(new Tile(new Card(Card.Suit.Ch, 2), new Wind(Wind.Kind.W)));
  151.         mTiles.Add(new Tile(new Card(Card.Suit.Pk, 3), new Wind(Wind.Kind.W)));
  152.         mTiles.Add(new Tile(new Card(Card.Suit.Ch, 4), new Wind(Wind.Kind.N)));
  153.         mTiles.Add(new Tile(new Card(Card.Suit.Ch, 4), new Wind(Wind.Kind.E)));
  154.         mTiles.Add(new Tile(new Card(Card.Suit.Ch, 2), new Wind(Wind.Kind.E)));
  155.         mTiles.Add(new Tile(new Card(Card.Suit.Pk, 8), new Wind(Wind.Kind.E)));
  156.         mTiles.Add(new Tile(new Card(Card.Suit.Tr, 3), new Daradon(Daradon.Kind.Green)));
  157.         mTiles.Add(new Tile(new Card(Card.Suit.Ch, 4), new Daradon(Daradon.Kind.Black)));
  158.         mTiles.Add(new Tile(new Card(Card.Suit.Pk, 9), new Daradon(Daradon.Kind.Green)));
  159.         mTiles.Add(new Tile(new Card(Card.Suit.Ch, 2), new Daradon(Daradon.Kind.Red)));
  160.         mTiles.Add(new Tile(new Card(Card.Suit.Tr, 3), new Daradon(Daradon.Kind.Red)));
  161.  
  162.         PrintTiles();
  163.  
  164.         Console.WriteLine();
  165.         Console.WriteLine("Sort by card: order [Tr 1-9, Ch 1-9, Pk 1-9]");
  166.  
  167.         TileComparator.CompareByCard();
  168.         mTiles.Sort(TileComparator.CompareTiles);
  169.  
  170.         PrintTiles();
  171.  
  172.         Console.WriteLine();
  173.         Console.WriteLine("Sort by WindCard: order [W, S, E, N], [Tr 1-9, Ch 1-9, Pk 1-9]");
  174.  
  175.         TileComparator.CompareByWindCard();
  176.         mTiles.Sort(TileComparator.CompareTiles);
  177.  
  178.         PrintTiles();
  179.  
  180.         Console.WriteLine();
  181.         Console.WriteLine("Sort by DaradonCardWind: order [Red, Green, Black], [Tr 1-9, Ch 1-9, Pk 1-9], [W, S, E, N]");
  182.  
  183.         TileComparator.CompareByDaradonCardWind();
  184.         mTiles.Sort(TileComparator.CompareTiles);
  185.  
  186.         PrintTiles();
  187.  
  188.         Console.ReadKey();
  189.     }
  190.  
  191.     public static void PrintTiles()
  192.     {
  193.         Console.WriteLine();
  194.         for (int i = 0; i < mTiles.Count; i++)
  195.         {
  196.             Console.WriteLine(mTiles[i]);
  197.         }
  198.     }
  199.  
  200. }
Advertisement
Add Comment
Please, Sign In to add comment