2014-05-20 60 views
0

我正在創造一個交易或不交易的遊戲。我有22個圖片框。一方11人,另一方11人。用戶可以在中間選擇框。當包含該數量的框被選中時,我不想刪除或禁用相關的圖片框。包含的金額是隨機創建的。所以說例如框15包含100000.我想刪除圖片框,其中包含100,000英鎊的圖像。有什麼辦法可以做到這一點?選取該號碼時,禁止/禁用圖片框。交易或沒有交易遊戲C#

這裏是我的全局數組等:

double[] box = new double[22]; 
    double[] values = new double[22] {0.01, 0.10, 0.50, 1, 5, 10, 50, 100, 250, 500, 750, 1000, 3000, 5000, 10000, 15000, 20000, 35000, 50000, 75000, 100000, 250000}; 
    //PictureBox[] picturbox = new PictureBox[22]; 
    Random myrand = new Random(); 
    bool start = true; 
    //bool pick = true; 
    int count = 0; 

這裏是我創建的隨機值碼:

private void frm_dealornodeal_Shown(object sender, EventArgs e) 
    { 
     txt_bankersOffer.Hide();   // hiding text until box is picked 
     txt_offer.Hide();     // hiding text until box is picked 
     bool Found = false;    
     int Rand_Loc = myrand.Next(22); //random number generator for the boxes 

     box[0] = values[Rand_Loc]; 
     values[Rand_Loc] = 0; 

     for (int x = 1; x < 22; x++) 
     { 
      Found = true; 
      while (Found) 
      { 
       Found = false; 
       Rand_Loc = myrand.Next(22); 
       if (values[Rand_Loc] != 0) 
       { 
        box[x] = values[Rand_Loc]; 
        values[Rand_Loc] = 0; 
       } 
       else 
       { 
        Found = true; 
       } 
      } 

     } 



    } 

&終於在這裏的是,我有一個按鈕單擊事件時的代碼他們正在挑選他們的盒子。所有其他框的代碼是相同的。

private void btn_box_2_Click(object sender, EventArgs e) 
    { 
     if (start == true) 
     { 
      start = false;    
      pic_pick.Hide(); 
      btn_box_2.Location = new Point(584, 543); 

     } 
     else 
     { 
      txt_boxContentsText.Show(); 
      txt_boxcontentsnuber.Show(); 
      txt_bankersOffer.Hide(); 
      txt_offer.Hide(); 
      txt_boxcontentsnuber.Text = Convert.ToString(box[2 - 1]); 
      btn_box_2.Enabled = false; 
      btn_box_2.BackColor = Color.Gray; 
      count++; 
     } 

     if (count == 5 || count == 8 || count == 11 || count == 14 || count == 17 || count == 20) 
     { 
      txt_boxContentsText.Show(); 
      txt_boxcontentsnuber.Show(); 
      txt_bankersOffer.Show(); 
      txt_offer.Show(); 
      txt_offer.Text = Convert.ToString(1000); 
     } 

    } 

雖然我在這裏任何人都可以想出一個好的公式,我可以用它來給他們提供的銀行家?

乾杯。

圖片形式: (你不能看到左手邊£750或右側£250,000的最後一張照片框,但它們的存在)

You cant see the last picture box for the left hand side £750 or the right hand side £250,000 but they are there.

+0

看起來你已經擁有它了:'btn_box_2.Enabled = false'應該會導致點擊事件不被接受(如果是這樣,只需檢查處理程序是否已被點擊!)你的問題是什麼? – BradleyDotNET

+0

我覺得我很困惑你說一些圖畫盒和盒子。我知道美國節目使用手提箱。所以病得這樣解釋。我在左邊有11個圖片框,另外11個圖片框的圖片顯示值爲0.01p到25萬英鎊。它們之間的中間是22個代表「行李箱」的按鈕。這些「行李箱」內的值是從22個數字列表中隨機生成的。當選擇這些行李箱中的一個時,玩家將在文本框中看到該值,並且同時我想要那些有價值的重複圖片從上面消失的圖片。 – COYG

回答

1

您可以利用Control.Tag財產。每個按鈕的標籤可以包含相應的名稱PictureBox。然後,您可以在點擊事件中禁用圖片框。你也不需要22個獨立的點擊事件,因爲object sender參數告訴你哪個按鈕被點擊,並且Tag屬性會告訴你哪個PictureBox禁用。

爲解決按鍵值的隨機分配,這裏有一個解決方案:

  1. 值賦給表示值(因爲PictureBoxes不會改變,只是按鈕的功能,在我的理解每個PictureBox.Tag財產)。因此,如果值爲0.01,則將其設置爲標籤值;如果它是0.50,則將0.5設置爲標籤值; 1.0應該設置爲1,依此類推。

  2. 微分「旅行箱」的名字按鈕,如「Suitcase1」,「Suitcase2」等

  3. 使用以下技術將這些值隨機分配給您的按鈕(你可以致電本的Form_Load功能事件):

    private void assignButtonValues() 
    { 
        Random random = new Random(); 
        List<double> values = new List<Double>(new[] {0.01, 0.10, 0.50, 1, 5, 10, 50, 100, 250, 500, 750, 1000, 3000, 5000, 10000, 15000, 20000, 35000, 50000, 75000, 100000, 250000}); 
    
        foreach (Button button in Controls.OfType<Button>()) 
        { 
         //Is this a suitcase or just some button in the game? 
         if (button.Name.Contains("Suitcase")) 
         { 
          //select random value and remove it from the list of values to ensure it's assigned to only one button 
          double buttonValue = values[random.Next(0, values.Count)]; 
          values.Remove(buttonValue); 
    
          //TODO: Your code to save the value in an array, etc, for later processing, etc. 
    
          //Assign corresponding picture to this button's tag 
          button.Tag = Controls.OfType<PictureBox>() 
               .Where<PictureBox>(p => p.Tag.ToString() == buttonValue.ToString()) 
               .First<PictureBox>().Name; 
         } 
        }  
    } 
    
  4. 使用processButtons函數作爲事件處理程序,所有的按鈕:

    private void processButtons(object sender, EventArgs e) 
    { 
        //Get the clicked button 
        Button clickedButton = (Button)sender; 
        string correspondingPictureBoxName = clickedButton.Tag.ToString(); 
    
        //Get the corresponding PictureBox 
        PictureBox correspondingPictureBox = (PictureBox)Controls.Find(correspondingPictureBoxName, true).First<Control>(); 
    
        //Hide the PictureBox 
        correspondingPictureBox.Visible = false; 
    } 
    
+0

如果數字是隨機的,我仍然可以用標籤做這件事嗎?例如,1號按鈕可能有一個遊戲10p,但下一個可能有10萬英鎊。你的建議是否仍然有效?歡呼另一個提示! – COYG

+0

我改變了我的原始答案,以解決按鈕值的隨機分配問題。看看是否有幫助你。謝謝! – CoolBots

+0

歡呼你的幫助,生病嘗試實施它吧! – COYG