科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件网络在线游戏开发心得(服务器端)(四)

网络在线游戏开发心得(服务器端)(四)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

游戏中需要为用户生成随机的扑克牌,首先我们需要初始化一副牌,放到一个Hashmap中,每张牌以一个字节表示。

作者:bromon 来源:CSDN 2008年3月24日

关键字: 服务器端 在线游戏 网络 游戏 Linux

  • 评论
  • 分享微博
  • 分享邮件
四、扑克牌的生成


  
游戏中需要为用户生成随机的扑克牌,首先我们需要初始化一副牌,放到一个Hashmap中,每张牌以一个字节表示,高为代表花色,的为代表数字,生成整副牌:

 

private static HashMap cards = new HashMap();

 

int tmp=0;

for (int i = 0; i <4; i++) {

for (int m = 0; m < 13; m++) {

tmp=((byte)(i)<<4)|((byte)m);  //使用位操作构造一张牌

cards.put(new Integer(i * 13 + m),new Byte((byte)tmp));

}

}

cards.put(new Integer(53), new Byte((byte)0x4d));    //大王

cards.put(new Integer(54), new Byte((byte)0x4e));     //小王


  
如何随机地得到其中的N张牌呢?我们的做法是生成一个0-55的随机数,用这个随机数作主键从Hashmap中获得对象,取得之后,把该对象从队列中删除,以免重复取得。由于java中的随机数是根据时间生成的,所以有可能导致用户得到的牌不够散,每个用户都摸到一条龙岂不是笑话?所以在生成随机数的时候我们加入了一个大素数来作运算:

 

long cardId=new Long((Math.round(Math.random() * 87) % 55)).intValue();

 

通过修改这个大素数,可以控制某个用户的牌比较好。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章