浅析:纸牌游戏 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());
}
}
{
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);
}
{
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;
}
{
if (ll!=null)
{
return ll.removeFirst();
}
return null;
}