JavaScript纸牌游戏中玩家手的体系结构
所以,我在尝试简单的纸牌游戏。我有JavaScript纸牌游戏中玩家手的体系结构,javascript,architecture,refactoring,Javascript,Architecture,Refactoring,所以,我在尝试简单的纸牌游戏。我有player“class”和draw功能,还有公共成员deck和hand,都是数组 我需要从牌组中抽出一张牌,把它放在手上,并在玩家的“手”区域显示它。我担心我“翻转”和“播放”按钮的方式(通过闭包) 代码如下: littlegame.player.prototype.draw = function() { if (this.canDrawCard()) { var card = this.deck.draw(); // this.dec
player
“class”和draw
功能,还有公共成员deck
和hand
,都是数组
我需要从牌组中抽出一张牌,把它放在手上,并在玩家的“手”区域显示它。我担心我“翻转”和“播放”按钮的方式(通过闭包)
代码如下:
littlegame.player.prototype.draw = function() {
if (this.canDrawCard()) {
var card = this.deck.draw(); // this.deck is Array
//Create card element on the playfield
var card_object = $('<div class="card"></div>').append($('<span class="attack">' + card.attack + '</span>')).append($('<span class="defence">' + card.defence + '</span>'));
// Add controls to card
if (this.playerid == 1) {
var flipper = $('<span class="flip">Flip</span>');
flipper.click(function(){
card.flip();
});
var actuator = $('<span class="play">Play</span>');
console.log('Loading actuator closure with id ' + this.playerid + ' and name ' + this.playername);
var player = this;
var old_hand = this.hand.slice(0); // Store a copy of old hand. Stupid trick, i know. It doesn't work
actuator.click(function(){
card.play(player.playerid);
delete card;
player.hand = old_hand;
});
card_object = card_object.append(flipper).append(actuator);
}
this.element.append(card_object);
card.element = card_object;
// Put card in hand
this.hand.push(card);
}
};
littlegame.player.prototype.draw=function(){
if(this.canDrawCard()){
var card=this.deck.draw();//this.deck是数组
//在操场上创建卡片元素
var card_object=$('').append($(''+card.attack+'').append($(''+card.defence+'');
//将控件添加到卡中
如果(this.playerid==1){
变量flipper=$('Flip');
flipper.click(函数(){
card.flip();
});
var执行器=$('Play');
console.log('加载id为'+this.playerid+'和名称为'+this.playername'的致动器闭合装置);
var player=这个;
var old_hand=this.hand.slice(0);//存储一份old hand的副本。我知道这是个愚蠢的把戏。它不起作用
执行器。单击(功能(){
纸牌游戏(player.playerid);
删除卡片;
player.hand=旧手;
});
卡片对象=卡片对象。附加(翻转器)。附加(执行器);
}
this.element.append(card\u对象);
card.element=card\u对象;
//持卡
这个。手。推(卡);
}
};
我需要的是一种调用
card.play()
和card.flip()
的方法,使用card.play,在手上知道卡的位置,然后取出卡。我怎样才能做到这一点?我尝试了以下方法。我不得不在闭包中留下手牌阵列的位置以及玩家和牌本身的链接。事情是这样的:
littlegame.player.prototype.draw = function() {
if (this.hand.length < this.agility) {
var card = this.deck.draw();
// Put card in hand
this.hand.push(card);
var card_in_hand = this.hand[this.hand.length - 1];
var card_position = this.hand.length;
//Create card element on the playfield
var card_object = $('<div class="card"></div>').append($('<span class="attack">' + card.attack + '</span>')).append($('<span class="defence">' + card.defence + '</span>'));
// Add controls to card
if (this.playerid == 1) {
var flipper = $('<span class="flip">Flip</span>');
flipper.click(function(){
card_in_hand.flip();
});
var actuator = $('<span class="play">Play</span>');
console.log('Loading actuator closure with id ' + this.playerid + ' and name ' + this.playername);
var player = this;
actuator.click(function(){
card_in_hand.play(player.playerid);
player.hand.remove(card_position);
});
card_object = card_object.append(flipper).append(actuator);
}
this.element.append(card_object);
card_in_hand.element = card_object;
}
};
littlegame.player.prototype.draw=function(){
if(this.hand.length
我还使用了John Resig的Array.remove()
。littlegame.player.prototype.draw=function(){
littlegame.player.prototype.draw = function() {
if (this.canDrawCard()) {
var card = this.deck.draw(); // this.deck is Array
//Create card element on the playfield
var card_object = $('<div class="card"></div>').append($('<span class="attack">' + card.attack + '</span>')).append($('<span class="defence">' + card.defence + '</span>'));
// Add controls to card
if (this.playerid == 1) {
var flipper = $('<span class="flip">Flip</span>');
flipper.click(function(){
card.flip();
});
var actuator = $('<span class="play">Play</span>');
console.log('Loading actuator closure with id ' + this.playerid + ' and name ' + this.playername);
var player = this;
var old_hand = this.hand.slice(0); // Store a copy of old hand. Stupid trick, i know. It doesn't work
actuator.click(function(){
card.play(player.playerid);
delete card;
player.hand = old_hand;
});
card_object = card_object.append(flipper).append(actuator);
}
this.element.append(card_object);
card.element = card_object;
// Put card in hand
this.hand.push(card);
var hand = this.hand;
card.remove = function () {
var i;
for(i=0;i<hand.length;i++) {
if(hand[i]===this) {
hand.splice(i,1);
}
}
}
}
};
if(this.canDrawCard()){
var card=this.deck.draw();//this.deck是数组
//在操场上创建卡片元素
var card_object=$('').append($(''+card.attack+'').append($(''+card.defence+'');
//将控件添加到卡中
如果(this.playerid==1){
变量flipper=$('Flip');
flipper.click(函数(){
card.flip();
});
var执行器=$('Play');
console.log('加载id为'+this.playerid+'和名称为'+this.playername'的致动器闭合装置);
var player=这个;
var old_hand=this.hand.slice(0);//存储一份old hand的副本。我知道这是个愚蠢的把戏。它不起作用
执行器。单击(功能(){
纸牌游戏(player.playerid);
删除卡片;
player.hand=旧手;
});
卡片对象=卡片对象。附加(翻转器)。附加(执行器);
}
this.element.append(card\u对象);
card.element=card\u对象;
//持卡
这个。手。推(卡);
var hand=this.hand;
card.remove=函数(){
var i;
对于(i=0;哦,不走运。卡片有时只是留在手中:(为什么,哦,为什么JavaScript数组不像PHP数组?嗯。如果,比方说,我从手上拼接第三张牌,剩下的牌不会从1移到开头吗?card.delete
很酷,我现在就试试。是的,但是因为我手头没有你的设计文档,我也不知道你在玩什么纸牌游戏,我不得不猜测你想要什么t、 事实上,我没有设计文档:)问题是在数组中存储指向对象的持久链接,这样当数组元素被删除时它们不会停止工作。无论如何,您的方法似乎确实很有效。谢谢:)