斗地主算法之牌的定义及排序

</pre>第一次自己写博客,如有没说清楚的地方,请大家多多指出交流。<p>最近用html5写了个联机斗地主游戏,</p><p><img src="https://img-blog.csdn.net/20141003085622734?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWluaGFpeGlhbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" /></p><p>做完后总结一下主要的技术要点:</p>1.牌的定义及排序。2.牌型大小判断,就是例如上家出了33344479,判断你选中的牌是否大过对方。3.提示算法,例如上家出了33344479,从你手中的牌中选出能大过对方的牌。本篇讲的是斗地主算法之牌的定义及排序,牌型大小判断和提示算法将在下两篇中讲到。1.首先先定义牌类:牌有些什么属性,大家一开始能想到的肯定是花色和分值,为了简化,我把四种花色用ABCD表示,其中A='方块', B='梅花', C='红桃', D='黑桃'因此 var card = new Card(7, 'C');就表示一张红桃7的诞生。设计牌类还要考虑的一个问题是牌的排序,应该还有个属性来决定牌数组的排序,正因为要考虑排序问题,因此我将牌的分值这样定义:3-10之间的分值rank就是3-10,J,Q,K的分值rank为11,12,13A因为比K大,而且能和K形成顺子:10JQKA,因此将A的分值设为14,而2因为不能形成顺子,所以将2的分值设为17(16,18都可以,只要不为15)大小王:大王:var dw = new Card(1000, 'DW');小王:var xw = new Card(800, 'XW');这样不同分值间的排序问题其实依靠rank就可以解决了,但是相同分值,不同花色的排序情况还是没法解决,例如:B7,A7,D7,C7因此我设计了一个value属性,<span style="white-space:pre"></span>if(this.suit == 'DW' || this.suit == 'XW') {        this.value = this.rank;    } else {        this.value = this.rank * 20 + (this.suit.charCodeAt(0) - 65);    }这样的话,B7,A7,D7,C7就能根据value排序了。还要设计一个sheet属性: this.sheet = this.suit + this.rank;sheet主要用来和每张牌的图片对应上最后有一个selected属性,表示这张牌是否点选状态,用于出牌时候使用。最后牌类定义如下:<span style="white-space:pre"> </span><pre name="code" class="javascript">var Card = function(rank, suit) {
    this.rank = parseInt(rank);
    this.suit = suit;
    this.selected = false;
    this.sheet = this.suit + this.rank;
    if(this.suit == 'DW' || this.suit == 'XW') {
        this.value = this.rank;
    } else {
        this.value = this.rank * 20 + (this.suit.charCodeAt(0) - 65);
    }
}

Card.prototype.toString = function () {
    return this.suit + this.rank;
};

Card.prototype.equals = function (card) {
    return this.value == card.value;
};



第一篇牌的定义及排序讲好了,欢迎大家多多交流,后面我讲继续写牌型大小判断和提示算法。







  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值