// -------------------------------------------------------------------------------------------------------------------- // <copyright file="Program.cs" company="Chimomo's Company"> // Respect the work. // </copyright> // <summary> // Defines the Program type. // </summary> // -------------------------------------------------------------------------------------------------------------------- namespace Poker { using System.Collections.Generic; /// <summary> /// The program. /// </summary> public static class Program { /// <summary> /// The main. /// </summary> public static void Main() { Utility.GenerateRandomPokers(); string pokerFile = "Pokers.txt"; SuitSortTest(pokerFile); RankSortTest(pokerFile); } /// <summary> /// The suit sort test. /// </summary> /// <param name="pokerFile"> /// The poker file. /// </param> private static void SuitSortTest(string pokerFile) { string sortedPokerFile = "SuitSortedPokers.txt"; List<string> pokers = Utility.ReadPokersFromFile(pokerFile); SuitSort suitSort = new SuitSort(pokers); suitSort.Sort(); Utility.WritePokersToFile(sortedPokerFile, suitSort.PokerList); } /// <summary> /// The rank sort test. /// </summary> /// <param name="pokerFile"> /// The poker file. /// </param> private static void RankSortTest(string pokerFile) { string sortedPokerFile = "RankSortedPokers.txt"; List<string> pokers = Utility.ReadPokersFromFile(pokerFile); RankSort rankSort = new RankSort(pokers); rankSort.Sort(); Utility.WritePokersToFile(sortedPokerFile, rankSort.PokerList); } } }
// -------------------------------------------------------------------------------------------------------------------- // <copyright file="RankSort.cs" company="Chimomo's Company"> // Respect the work. // </copyright> // <summary> // Defines the RankSort type. // </summary> // -------------------------------------------------------------------------------------------------------------------- namespace Poker { using System; using System.Collections.Generic; /// <summary> /// The rank sort. /// </summary> public class RankSort { /// <summary> /// Initializes a new instance of the <see cref="RankSort"/> class. /// </summary> /// <param name="pokerList"> /// The poker list. /// </param> public RankSort(List<string> pokerList) { this.PokerList = pokerList; } /// <summary> /// Gets the poker list. /// </summary> public List<string> PokerList { get; private set; } /// <summary> /// The sort. /// </summary> public void Sort() { this.PokerList.Sort(RankComparer); } /// <summary> /// The rank comparer. /// </summary> /// <param name="pokerA"> /// The poker a. /// </param> /// <param name="pokerB"> /// The poker b. /// </param> /// <returns> /// The <see cref="int"/>. /// </returns> private static int RankComparer(string pokerA, string pokerB) { int a = GetPokerValue(pokerA); int b = GetPokerValue(pokerB); return a - b; } /// <summary> /// The get poker value. /// </summary> /// <param name="poker"> /// The poker. /// </param> /// <returns> /// The <see cref="int"/>. /// </returns> private static int GetPokerValue(string poker) { if (string.IsNullOrEmpty(poker)) { return 0; } int pokerValue; string rank = poker.Substring(1); // 给rank赋予相应的权值。 switch (rank) { case "A": pokerValue = 14; break; case "K": pokerValue = 13; break; case "Q": pokerValue = 12; break; case "J": pokerValue = 11; break; default: pokerValue = Convert.ToInt32(rank); break; } pokerValue *= 100; // 给suit赋予相应的权值。花色的排列顺序为:黑、红、梅、方。 char suit = poker[0]; switch (suit) { case '?': pokerValue += 1; break; case '?': pokerValue += 2; break; case '?': pokerValue += 3; break; case '?': pokerValue += 4; break; } return pokerValue; } } }
// -------------------------------------------------------------------------------------------------------------------- // <copyright file="SuitSort.cs" company="Chimomo's Company"> // Respect the work. // </copyright> // <summary> // Defines the SuitSort type. // </summary> // -------------------------------------------------------------------------------------------------------------------- namespace Poker { using System; using System.Collections.Generic; /// <summary> /// The suit sort. /// </summary> public class SuitSort { /// <summary> /// Initializes a new instance of the <see cref="SuitSort"/> class. /// </summary> /// <param name="pokerList"> /// The poker list. /// </param> public SuitSort(List<string> pokerList) { this.PokerList = pokerList; } /// <summary> /// Gets the poker list. /// </summary> public List<string> PokerList { get; private set; } /// <summary> /// The sort. /// </summary> public void Sort() { this.PokerList.Sort(SuitComparer); } /// <summary> /// The suit comparer. /// </summary> /// <param name="pokerA"> /// The poker a. /// </param> /// <param name="pokerB"> /// The poker b. /// </param> /// <returns> /// The <see cref="int"/>. /// </returns> private static int SuitComparer(string pokerA, string pokerB) { int a = GetPokerValue(pokerA); int b = GetPokerValue(pokerB); return a - b; } /// <summary> /// The get poker value. /// </summary> /// <param name="poker"> /// The poker. /// </param> /// <returns> /// The <see cref="int"/>. /// </returns> private static int GetPokerValue(string poker) { if (string.IsNullOrEmpty(poker)) { return 0; } int suitValue = 0; char suit = poker[0]; // Suit排序首先考虑的是花色,先把花色赋予相应的权值以区分开来。花色的排列顺序为:黑、红、梅、方。 switch (suit) { case '?': suitValue = 100; break; case '?': suitValue = 200; break; case '?': suitValue = 300; break; case '?': suitValue = 400; break; } int rankValue; string rank = poker.Substring(1); // 给rank赋予相应的权值。 switch (rank) { case "A": rankValue = 14; break; case "K": rankValue = 13; break; case "Q": rankValue = 12; break; case "J": rankValue = 11; break; default: rankValue = Convert.ToInt32(rank); break; } return suitValue + rankValue; } } }
// -------------------------------------------------------------------------------------------------------------------- // <copyright file="Utility.cs" company="Chimomo's Company"> // Respect the work. // </copyright> // <summary> // Defines the Utility type. // </summary> // -------------------------------------------------------------------------------------------------------------------- namespace Poker { using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; /// <summary> /// The utility. /// </summary> public static class Utility { /// <summary> /// The read pokers from file. /// </summary> /// <param name="pokerFile"> /// The poker file. /// </param> /// <returns> /// The poker list. /// </returns> public static List<string> ReadPokersFromFile(string pokerFile) { List<string> pokerList = new List<string>(); using (StreamReader streamReader = new StreamReader(pokerFile, Encoding.UTF8)) { string poker; while ((poker = streamReader.ReadLine()) != null) { pokerList.Add(poker); } } return pokerList; } /// <summary> /// The write pokers to file. /// </summary> /// <param name="pokerFile"> /// The poker file. /// </param> /// <param name="pokerList"> /// The poker list. /// </param> public static void WritePokersToFile(string pokerFile, List<string> pokerList) { using (StreamWriter streamWriter = new StreamWriter(pokerFile, true, Encoding.UTF8)) { foreach (var poker in pokerList) { streamWriter.WriteLine(poker); } } } /// <summary> /// The generate random pokers. /// </summary> public static void GenerateRandomPokers() { string[] suits = { "?", "?", "?", "?" }; string[] ranks = { "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A" }; List<string> pokerList = new List<string>(); foreach (string suit in suits) { pokerList.AddRange(ranks.Select(rank => string.Format("{0}{1}", suit, rank))); } using (StreamWriter streamWriter = new StreamWriter("Pokers.txt", false, Encoding.UTF8)) { Random random = new Random(); while (pokerList.Count > 0) { int i = random.Next(0, pokerList.Count - 1); streamWriter.WriteLine(pokerList[i]); pokerList.RemoveAt(i); } } } } }
时间: 2024-10-13 08:58:57