微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JavaScript学习笔记整理_简单实现枚举类型,扑克牌应用

如下所示:

rush:js;"> //实现枚举类型,扑克牌应用 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修改了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学习笔记整理_简单实现枚举类型,扑克牌应用的全部内容了,希望对大家有所帮助,多多支持编程之家~

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐