您好,登錄后才能下訂單哦!
制作斗地主的時候,發完牌還有一個牌的排序是要考慮的問題之一,這里的排序并不是一般的簡單的冒泡排序,我的思想是將牌排成0-51,以13作為一個基準分類,例如0-12分別對應的是紅桃A-K,13-25對應的是黑桃A-K,26-38對應的是方塊A-K,39-51是梅花A-K。然后服務器將分給每個玩家的17個數轉化成牌的數組進行排序,下面給出算法,這里感謝@灰太龍的指點!
Code:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 隨機排序 { class Program { static void Main(string[] args) { int[] array = { 1, 2, 6, 33, 44, 23, 36, 5, 9, 14,0,14,15 }; //洗牌從大到小 //int[] array = { 1, 2, 3, 4, 5, 6,0 }; BubbleSortFunction(array); foreach (int i in array) { Console.Write(i + ","); } } //冒泡排序(從數組的起始位置開始遍歷,以大數為基準:大的數向下沉一位) private static void BubbleSortFunction(int[] array) { int length = array.Length; int temp; bool hasExchangeAction; //記錄此次大循環中相鄰的兩個數是否發生過互換(如果沒有互換,則數組已經是有序的) for (int i = 0; i < length - 1; i++) //數組有N個數,那么用N-1次大循環就可以排完 { hasExchangeAction = false; //每次大循環都假設數組有序 for (int j = 0; j < length - i - 1; j++) //從數組下標0處開始遍歷,(length - i - 1 是刨除已經排好的大數) { int p1 = array[j] % 13; int p2 = array[j + 1] % 13; if (p1 == 0) p1 = 14; if (p2 == 0) p2 = 14; if (p1 == 1) p1 = 15; if (p2 == 1) p2 = 15; if (array[j] == 52) p1 = 16; if (array[j + 1] == 52) p2 = 16; if (array[j] == 53) p1 = 17; if (array[j + 1] == 53) p2 = 17; if (p1 < p2) //相鄰兩個數進行比較,如果前面的數大于后面的數,則將這相鄰的兩個數進行互換 { temp = array[j]; array[j] = array[j + 1]; array[j + 1] = temp; hasExchangeAction = true; //發生過互換 } } if (!hasExchangeAction) //如果沒有發生過互換,則數組已經是有序的了,跳出循環 { break; } } } } }
說明:按照我上面所說的規則,會發現其實轉化成牌其實是從大到小排序的,最左邊是紅桃2,然后是黑桃2,然后是紅桃A,這樣依次類推!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。