java 蜘蛛纸牌 蜘蛛纸牌程序

您所在的位置:网站首页 java蜘蛛纸牌代码容易出现的错误有哪些 java 蜘蛛纸牌 蜘蛛纸牌程序

java 蜘蛛纸牌 蜘蛛纸牌程序

2024-07-14 18:14| 来源: 网络整理| 查看: 265

不得不说,做游戏是会上瘾的,这次带来的是win系统上的经典游戏《蜘蛛纸牌》,不能完美,但求一玩

关于蜘蛛纸牌

规则请打开win系统的蜘蛛纸牌,然后点击帮助

这里要实现的同样是两副牌,一共104张同一种花色的低难度游戏需要解决的问题1、洗牌2、判断点击牌所在序列是否符合可移动条件3、判断目标位置是否符合可移动条件4、移动符合条件的纸牌序列到目标位置5、完成一个完整序列时的清除6、发牌

综合起来,《蜘蛛纸牌》基本上就这么6个问题,解决了,也就完成了。下面一个一个来实现

1、洗牌

光洗牌,不难。如果要做到每次洗牌都有解就不是我能解决的问题了(win系统里的蜘蛛纸牌是不是每次都有解,我确实不知道)。这里就随便洗洗,没解也没办法,即使有解,你也不一定能解完,是吧。

这里是同色,所以不用去考虑4个花色,那一副牌,从A-K,是13张,有4组,就是13*4=52张牌。两副就是104张。先初始化一组牌

var _cards_init=['1','2','3','4','5','6','7','8','9','10','J','Q','K'];

 

跟着把它变成1副牌

_cards_init=_cards_init.concat(_cards_init,_cards_init,_cards_init); //使用concat来链接数组

 

这里自己链接自己3次,就变成了4组,一副牌。再接着链接自己一次,就变成两副牌

_cards_init=_cards_init.concat(_cards_init);

 

两副牌有了,接着就洗牌,这里简单的使用随机数来洗。

//洗牌 function shuffle(){ var len=_cards_init.length; if(len>0){ var i=random(len); _cards.push(_cards_init[i]); _cards_init.splice(i,1); shuffle(); } }

 

这是一个递归,每次从初始化的剩余牌序列里随机取一个,放到新牌的数组里,然后将取走的牌从初始化的数组里移除,重计长度,只要长度不小于1,那么重复这个操作,至到全部取完为止。这样生成的新牌数组里的牌基本上就是乱序了,达到洗牌的效果。

牌洗好之后,就得将最开始的牌面放到界面上。win7的蜘蛛纸牌是10列,前4列5张扣牌,1张明牌,后6列4张扣牌,1张明牌。这里也按这样的方式开始。

因为是按列为基础进行摆牌,所以程序在确定牌所在位置的时候,需要分别记录,每一列等于是一个序列,有牌移进来,要增加它的长度,有牌移走的时候,要减少它的长度。所以这里使用了一个数组来分别记录牌的信息

var _cards_table=new Array();

 

接着确定位置,按照初始化的界面,一共要放54张牌到牌面上,其中44张是扣牌,10张是明牌,所以,先从新牌数组里取54张牌出来,其中前10张,也就是0-9,是个位数,直接将下标做了牌的参数

for(var i=0;i=0&&i=13){ for(var i in comNum){ obj.eq(comNum[i]).remove(); if(i==0){ obj.eq(comNum[i]-1).removeClass('back'); obj.eq(comNum[i]-1).attr('action-t',''); var len=_cards_table[line].length; _cards_table[line].splice(comNum[i],len); } } _left_group--; if(_left_group==0){ alert('你赢了,共移动'+$('#scores').html()+'次'); $("#re").click(); } } } }

 

6、发牌

发牌其实和初始化牌面没什么区别,只是每次只发10张,也就是向0-9列分别增加一张牌,发出去后,剩于牌就减去这些牌

function post(){ $("#post").click(function(){ if(_cards.length


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3