时间:2021-05-26
如下所示:
//实现枚举类型,扑克牌应用function creatEnum(p){ //构造函数 var Enumeration = function(){throw 'can not Instantiate Enumerations';}; //重写原型并将原型赋值给变量proto var proto = Enumeration.prototype = { constructor:Enumeration, toString:function(){return this.name;}, valueOf:function(){return this.value;}, toJSON:function(){return this.name;} }; //添加类属性,方法 Enumeration.values = []; for(var n in p){ //将对象p的每个元素都单独转存到一个单独的对象o里面,并将这些对象o存入类属性values数组中 var o = Object.create(proto); //对象o继承了Enumeration的3个实例方法和构造函数 Enumeration.prototype.valueOf = function(){return this.value*1;}; //重写原型的valueof方法 o.name = n; o.value = p[n]; Enumeration[n] = o; //添加类属性name,值为对象o Enumeration.values.push(o); } Enumeration.foreach = function (f,c) { for(var i =0;i<this.values.length;i++){ f.call(c,this.values[i]); } }; return Enumeration;}//===var Coin = creatEnum( {Penny:1,Nickel:5,Dime:10,Quarter:25} );console.log(Coin);console.log(Coin.Dime+2); //102 Coin.Dime本身继承自枚举对象,继承并修改了valueof方法用来将value转化为数字做计算 //===使用函数creatEnum()来表示一副54张的扑克牌==function Card(suit,rank){ this.suit = suit; this.rank = rank;}Card.Suit = creatEnum( {Clubs:1,Diamonds:2,Heates:3,Spades:4,Joker:5} );Card.Rank = creatEnum( {Three:3,Four:4,Five:5,Six:6, Seven:7,Eight:8,Nine:9,Ten:10, Jack:11,Queen:12,King:13,Ace:14,Two:15,SmallJoker:16,BigJoker:17} );Card.prototype.toString = function(){ return this.rank.toString() +' of '+this.suit.toString();};Card.prototype.compareTo = function(that){ if(this.rank<that.rank) return -1; if(this.rank>that.rank) return 1; return 0;};Card.orderBySuit = function(a,b){ if(a.suit< b.suit) return -1; if(a.suit> b.suit) return 1; return 0;};Card.orderByRank = function(a,b){ if(a.rank< b.rank) return -1; if(a.rank> b.rank) return 1; return 0;};//定义一副标准扑克牌function Deck(){ var cards = this.cards = []; Card.Suit.foreach(function(s){ //对每个花色执行 if(s!=5) { Card.Rank.foreach(function (r) { if (r != 16 && r != 17) { cards.push(new Card(s, r)); } }); }else{ Card.Rank.foreach(function (r){ if(r == 16) cards.push(new Card(s, r)); if(r == 17) cards.push(new Card(s, r)); }); } });}//洗牌,并返回洗好的牌Deck.prototype.shuffle = function(){ var deck = this.cards, len = deck.length; for(var i = len-1;i>0;i--){ var r = Math.floor(Math.random()*(i+1)), temp; temp = deck[i], deck[i] = deck[r], deck[r] = temp; } return this;};//发牌,并返回牌的数组Deck.prototype.deal = function(n){ if(this.cards.length<n) throw 'Out of cards'; return this.cards.splice(this.cards.length-n, n);};//开始:var deck = new Deck();var deck1 =deck.shuffle();var n = 17;var hand1 = deck1.deal(n).sort(Card.orderByRank);for(var i = 0;i<n;i++){ var body = document.getElementById('body'); var div = document.createElement('div'); div.style.width = '50px'; div.style.height = '100px'; div.style.border = '1px solid gray'; div.style.float = 'left'; div.innerHTML = hand1[i].suit.name+' '+hand1[i].rank.name; body.appendChild(div); console.log(hand1[i].suit.name+' '+hand1[i].rank.name);}以上就是小编为大家带来的JavaScript学习笔记整理_简单实现枚举类型,扑克牌应用的全部内容了,希望对大家有所帮助,多多支持~
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
Java练习——扑克牌发牌器,供大家参考,具体内容如下声明:学习自其他博主,感谢分享实现思路构建一张扑克牌构建一套扑克牌测试构建一张扑克牌/***@author
本文实例为大家分享了java对一副扑克牌建模的具体代码,供大家参考,具体内容如下第一步:使用枚举法对一副扑克牌(52张牌,不包括大小王)进行建模:一副扑克牌共有
本文实例讲述了Java模拟扑克牌洗牌实现生成52张扑克的方法。分享给大家供大家参考,具体如下:要求:生成52张扑克,模拟扑克牌洗牌,并输出。实现代码:packa
算法思想插入排序的方式类似平时打扑克牌的时候排序自己手中的扑克牌。开始时,我们左手中没有牌,桌上有洗好的扑克牌,我们抓取一张扑克牌并放入左手的正确位置。为了找到
通过工厂函数对__init__()加以利用我们可以通过工厂函数来构建一副完整的扑克牌。这会比枚举所有52张扑克牌要好得多,在Python中,我们有如下两种常见的