浅析:纸牌游戏 Java算法——之重复发牌

 

                                 浅析:纸牌游戏 Java算法——之重复发牌
     “嘿!什么是‘重复发牌’呀?”
       简单说一下,如果你玩过Windows里的纸牌游戏(没玩过,现在可以试一下,我就不信你的WIN里没有!),你会发现左上角的那副牌,发完了之后,还可以重复发,直到用完为止!这就是‘重复发牌’。
       下面我来介绍一下我自己的这个(笨笨的,适于初学者)的Java算法!!
       思路:只要能解决这副牌发完之后,鼠标继续按那个位置,会让系统知道“哦,这就是最后一张啦!”
能做到这,就万事OK喽!(其实有很多方法解决, 但我只讲算法
 
       步骤:1.首先构造一副牌 F(点数【1-13】花色【1-4】都正常的),然后用LinkedList持有(因为她是“链”吗)。 关键的一步来了在这幅牌的最后添加两张点数非正常的牌(比如点数是0和100),而且这两张牌的背面要和背景颜色相似(备用)。构造函数:“发牌”(if 这副牌 !=null    removeFast)。
 
                 2.哎,还得造一副牌 F1(麻烦),空的!还用LinkedList持有!函数:“接牌”(add),“还牌”(用for循环将这副牌(指的是F发出来的)添加到新的LinkedList,然后return new F(新LinkedList)!最后别忘了 removeAll(新LinkedList)迷糊了吧!)
 
                 3.终于可以在点击鼠标处理中做文章啦!正常的发牌我就不说了,重点说一下我那两张“预备役”的作用!哈哈。我让100点的那张牌在F的最下面,而0点在100的上面。这样只要F里的第一张的点数等于100时       if(F.getLl().getFast().getDian()==100)F=null;F=F1.还牌();这样就搞定了!
      
         我根据纸牌和蜘蛛纸牌的方法,编写了一款新的游戏(自己玩的)!其中关于“重复发牌”的一段代码给大家,欢迎批评指导!!
    if (fu.AnW(mx, my) && fu!=null &&  clin==null &&  flin==null)
    {
     Zhang z=fu.fa();
     z.setZf(true);
     fu1.jie(z);
     
     if (  fu.getLl().getFirst().getDian()==100 )
     {
      fu=null;
      
      fu=fu1.Huan();
      //System.out.println(fu1.Huan().getLl().getLast().getDian());
     }    
    } 
 
 public Fu  还牌()
 {
  LinkedList<Zhang>  xl=new LinkedList<Zhang>();
  for (int i = 0; i < ll.size(); i++)
  {
   xl.add(ll.get(i));
  }
  ll.removeAll(xl);
  return new Fu(xl);
 }
 
 public Zhang 发牌()
 {
  if (ll!=null)
  {
   return ll.removeFirst();
  }
  return null;
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值