Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@fangzhen51236
Last active March 30, 2020 01:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save fangzhen51236/14434c5ec06b34c35a79154c52986bf4 to your computer and use it in GitHub Desktop.
Save fangzhen51236/14434c5ec06b34c35a79154c52986bf4 to your computer and use it in GitHub Desktop.
YouChain可验证发牌demo规则公示
洗牌随机数生成规则:
洗牌随机数由三个玩家的公钥、预言机随机数、牌局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