2011-07-27 243 views
0

這裏中訪問局部變量是我寫的代碼:另一個功能

function p_deal(id) { 
    var card1_val = Math.floor(Math.random() * deck.length); 
    var card2_val = Math.floor(Math.random() * deck.length); 
     var card1 = deck[card1_val]; 
     var card2 = deck[card2_val]; 
    var hand = card1 + ", " + card2; 
var res = card1_val + card2_val; 

document.getElementById(id).innerHTML = hand; 

function hit(id) { 
    if (bucket == 0) { 
     bucket = " "; 
    } 

    var card3_val = Math.floor(Math.random() * deck.length); 
    var nhand = deck[card3_val]; 
    bucket = bucket + " " + nhand + ", "; 
    bucket_val = bucket_val + card1_val + card2_val + card3_val; 

    if (bucket_val >= 22) { 
     var r = confirm("Bust! By " + nhand); 
     if (r == true) { 
      refresh(); 
     } 
     else { 
      refresh(); 
     } 
    } 

    document.getElementById(id).innerHTML = bucket; 

    light = light + 1; 

    if (light == 5) { 
     alert("Five Card Blackjack! You Win!"); 
     refresh(); 
    } 
} 

桶VAL內的card_val變量是從p_deal(ID)功能。爲了使程序正常工作,每次調用這兩個函數時,card_val值必須是相同的,但每次調用該函數時都需要重新生成它們(因此多個玩家可以有不同的手)。但是,作爲局部變量,我發現很難在另一個函數中使用它們。我能在這裏做什麼?

+0

您可能希望找到 「洗牌」 的甲板比'Math.floor的一種更好的方式(的Math.random()* deck.length)'。我可以建議洗牌嗎? – Eric

+0

@埃裏克 - 你能詳細說一下嗎?你有關於如何更好地洗牌的任何想法? – dopatraman

+0

「洗牌」的方法可以連續兩次選取同一張牌。相反,你應該按照隨機的順序對卡組進行排序,就像真正的洗牌一樣。這樣做的最好方法是使用[Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle)。要畫一張牌,只需['.shift()'](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/shift)即可。 – Eric

回答

1

看起來像你想的對象:

function Hand(id) { 
    this.elem = document.getElementById(id); 
    this.bucket = ""; 
    this.bucketVal = 0; 
    this.deal = function() { 
     this.card1 = Math.floor(Math.random() * deck.length); 
     this.card2 = Math.floor(Math.random() * deck.length); 
     this.elem.innerHTML = deck[this.card1] + ', ' + this.card2; 
    } 
    this.hit = function() { 

     var newCard = Math.floor(Math.random() * deck.length); 
     this.bucket += " " + deck[nhand] + ", "; 
     this.bucketVal += this.card1 + this.card2 + newCard; 

     if (this.bucketVal >= 22) { 
      var r = confirm("Bust! By " + nhand); 

      refresh(); 
     } 

     this.elem.innerHTML = this.bucket; 

     light = light + 1; 

     if (light == 5) { 
      alert("Five Card Blackjack! You Win!"); 
      refresh(); 
     } 
    } 
} 

var player1Hand = new Hand('player1Id'); 
player1Hand.deal(); 
player1Hand.hit(); 
+0

@ Eric - 我不太瞭解OOP。你能分解這種方法嗎? – dopatraman

+0

@codeninja:你在語法方面有困難,還是隻有概念? – Eric

+0

@埃裏克 - 自從我評論這篇文章以來,我已經有一段時間了,我希望你能得到這個評論。 我不明白這種方法是hit()嵌入在Hand(id)中。這並不意味着我不能單獨打電話給我嗎?請解釋。 – dopatraman

0

使它們成爲全局變量而不是局部變量。

1

簡單的辦法:讓他們的全球或通過他們的功能

困難,但更可取的辦法之間:使用對象來代替,使對象的那些變量屬性。