现在小弟有个作业,一个卡牌类游戏,在洗牌发牌阶段遇到了二维数组的问题,请各位大大不吝赐教,先谢谢了。
问题描述如下:
这是一个8人玩的游戏,每人手上在游戏开始时会发3张牌,由于该牌为4张一组,即共6组,牌由二维数组储存(牌面信息由hashmap存放,例如ley是黑红梅方,value是1234):
String [][] cards= new String[6][];
那么每张牌的信息就是cards[0][]= new String []{hashmap存的牌面信息0}
...
以此类推
直至
cards[5][]= new String []{hashmap存的牌面信息5}现在我应该怎样随机的把这些数组里的牌洗开之后发出去?util.random能用肯定最方便啦~~~~我现在总是会出现因为随机数是重复出现而导致某张牌被重复发出的情况最惨的就是一次随机了6个1。然后我现在对于怎么才能对应发牌也想不通。其实问题被我描述的麻烦了,就是怎么样把二维数组里的内容不重复的随机排序后按每人三张发给八个人。
给点思想,能有简单例子就更好了。最后还有个小问题,如果存为
String[][] cards= new String [6][4];
是否可以?这样的话,是不是要写成
cards[6][4]={{0,1,2,3,4,5},{hashmap key value}}
如果这样做了,hashmap怎么才能给区分开?问的好多,跪求啊~~~我纯新手上路啊

解决方案 »

  1.   

    随机的话,你就先别管什么二维不二维的,跟这个没关系。总共24张牌,循环23次,第一次循环才生1~24的随机数。根据随机数取出对应的牌。第二次产生1~23的随机数,你不还剩23张吗,再取出1张。这样下去最后就随机出来一个排列了。实现起来可能有些麻烦。我就说一个方式,你能用就用。将24张牌放到一个list中,随机一次。取出对应值后,remove掉对应索引的元素。下次再随机,再取,再remove。
    关于数组cards[6][4]={{0,1,2,3,4,5},{hashmap key value}}你有点异想天开了吧。这个写法是不符合语法的,你想表达啥意思也看不出来。
    至于其他问题。你有一个随机的排列了。自己玩吧。
      

  2.   

    我不清楚关于二维数组和HashMap是不是你所面临的题目强制要求的,但如果能忽略这个的话,问题会好办得多。常规考虑问题的思路如下:
    1、用ArrayList模拟一个牌堆,假设为lstBase;
    2、初始化24张牌,放入这个牌堆;
    3、用random在牌堆中抽取卡牌,放入某个人手中(也可以用ArrayList来模拟某个人的手),注意抽出的牌必须从lstBase中删除掉;
    4、循环第三步,直到牌抽光。
    如果二维数组和HashMap之类的要求是题目强制的,那么只能逆向思维了:
    1、洗牌:把“二维数组储存(牌面信息由hashmap存放,例如ley是黑红梅方,value是1234)”这个奇怪的牌堆,先进行随机的内部牌交换,交换个100~200次,更多点就更均匀了;
    2、发牌:按顺序把已经洗好的牌堆分给每个人。
      

  3.   

    非常感谢
    二维数组非强制,但是hashmap却是强制的,牌面信息就是要用hashmap存储。我苦逼的作业啊
    所以,您看还有什么可以改的余地?