Last active
March 30, 2020 01:15
-
-
Save fangzhen51236/14434c5ec06b34c35a79154c52986bf4 to your computer and use it in GitHub Desktop.
YouChain可验证发牌demo规则公示
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
洗牌随机数生成规则: | |
洗牌随机数由三个玩家的公钥、预言机随机数、牌局id顺序拼接而成,其中玩家的公钥按照玩家进入牌局的顺序进行拼接; | |
将拼接后的字符串转为16进制得到该牌局的洗牌随机数; | |
public static String getRandSeries(String pubKey1, String pubKey2, String pubKey3, String id){ | |
SecureRandom random = new SecureRandom(); | |
String randSeries = byte2HexStr((pubKey1+pubKey2+pubKey3+random.nextInt()+id).getBytes()); | |
return randSeries; | |
} | |
public static String byte2HexStr(byte[] bytes) { | |
char[] chars = "0123456789ABCDEF".toCharArray(); | |
StringBuilder sb = new StringBuilder("0x"); | |
int bit; | |
for (int i = 0; i < bytes.length; i++) { | |
bit = (bytes[i] & 0x0f0) >> 4; | |
sb.append(chars[bit]); | |
bit = bytes[i] & 0x0f; | |
sb.append(chars[bit]); | |
} | |
return sb.toString().trim(); | |
} | |
抓牌规则: | |
洗完的牌按照玩家进入牌局顺序轮询抓给玩家,每次一张,抓完为止; | |
洗牌算法公示: | |
public static Integer[] shuffleBySeed(String shuffleSeed) { | |
//将一副新牌映射为1-54的数组 | |
Integer[] newCardsArray = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54}; | |
List<Integer> newCardsList = Arrays.asList(array); | |
//引入自定义种子 | |
SecureRandom random = SecureRandom.getInstance("SHA1PRNG"); | |
random.setSeed(shuffleSeed.getBytes()); | |
//洗牌 | |
Collections.shuffle(newCardsList, random); | |
return (Integer[])list.toArray(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment