2017-01-03 89 views
0

編輯:包括在後富文本框中的WPF。在框中查找或選擇文本?

我想提出一個一擲千金的遊戲,我所擁有的一切,除了消除對雙方的數字,因爲他們猜測工作的結束了我的整個程序代碼。希望有人能指導我...

Here is what my GUI looks like

GUI after first round. Box 1 is "my" box, bolded boxes are ones I've already opened

我有一個WPF在這2個富文本框。我有一組數字,我把一半放在一個文本框中,一半放在另一個文本框中。我將這些值顯示爲適合遊戲主題的貨幣。

這是我對陣列碼,並顯示在文本框中:

//initialize array with dollar values 
     displayNumbers = new int[] {0, 1, 5, 10, 25, 50, 75, 100, 200, 300, 400, 500, 750, 
      1000, 5000, 10000, 25000, 50000, 75000, 100000, 200000, 300000, 400000, 500000, 750000, 1000000}; 

     //initialize usedNumbers array with a length 
     usedNumbers = new int[displayNumbers.Length]; 

     //display amounts in 1st textblock. boxSize = 26 (size of array) 
     for(int i = 0; i<(boxSize/2); i++) 
     { 
      textBox1.AppendText(displayNumbers[i].ToString("C0") + " \n"); 
     } 

     //display amounts in 2nd textblock 
     for(int i = boxSize/2; i < boxSize; i++) 
     { 
      textBox2.AppendText(displayNumbers[i].ToString("C0") + "\n"); 
     } 

我的遊戲目前的工作方式是,該陣列洗牌無論你按下一步的按鈕,該值將是下一個隨機數值在數組中。在我洗牌之前,我會在側面顯示數值。

如何獲取我在數組中的索引的當前值,然後在我的富文本框中查找該數字,然後更改顏色或背景等,以便用戶知道該值不在板上?

我已經在使用按鈕的內容來顯示與該按鈕相關的值,但我也應該從側邊框中消除該值。

從我在網上找到的,我認爲指針可能是我的答案?但我不知道如何使用這些...

我還是一個初學者,所以如果這可以用初學者的條件回答,我真的很感激它。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Data; 
using System.Windows.Documents; 
using System.Windows.Input; 
using System.Windows.Media; 
using System.Windows.Media.Imaging; 
using System.Windows.Navigation; 
using System.Windows.Shapes; 

namespace DealorNoDeal 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window 
    { 
     int[] displayNumbers; 
     int[] usedNumbers; 
     Random random = new Random(); 
     int boxSize = 26; 
     Button button; 
     int turns = 0; 
     int boxesToChoose; 
     int boxesLeft = 26; 
     int bankOffer; 
     bool isOffer = false; 
     bool deal = false; 
     private Button firstChoice; 
     int round = 0; 

     public MainWindow() 
     { 
      InitializeComponent(); 

      //initialize array with dollar values 
      displayNumbers = new int[] {0, 1, 5, 10, 25, 50, 75, 100, 200, 300, 400, 500, 750, 
       1000, 5000, 10000, 25000, 50000, 75000, 100000, 200000, 300000, 400000, 500000, 750000, 1000000}; 

      //initialize usedNumbers array with a length 
      usedNumbers = new int[displayNumbers.Length]; 

      //display amounts in 1st textblock 
      for(int i = 0; i<(boxSize/2); i++) 
      { 
       textBox1.AppendText(displayNumbers[i].ToString("C0") + " \n"); 
      } 

      //display amounts in 2nd textblock 
      for(int i = boxSize/2; i < boxSize; i++) 
      { 
       textBox2.AppendText(displayNumbers[i].ToString("C0") + "\n"); 
      } 

      //deal/nodeal buttons disabled on startup only enabled when deal is offered 
      buttonDeal.IsEnabled = false; 
      buttonNoDeal.IsEnabled = false; 

      //randomize dollar values for boxes now that they have been displayed in order 
      ShuffleDecks(); 
     } 

     private void ShuffleDecks() 
     { 
      //fisher-yates shuffle algorithm 
      int index; 
      string temp; 

      for (int i = 0; i < boxSize; i++) 
      { 
       index = random.Next(boxSize); 
       temp = Convert.ToString(displayNumbers[i]); 
       displayNumbers[i] = displayNumbers[index]; 
       displayNumbers[index] = Convert.ToInt32(temp); 
      } 
     } 

     private void button_Click(object sender, RoutedEventArgs e) 
     { 
      button = sender as Button; 
      if (deal == true) 
      { 
       if (bankOffer > displayNumbers[0]) 
       { 
        textBlockDisplay.Text = "You made a good deal! Your winnings: " + bankOffer.ToString("C0"); 
       } 
       else 
       { 
        textBlockDisplay.Text = "Better luck next time! Your winnings: " + bankOffer.ToString("C0"); 
       } 

       firstChoice.Content = displayNumbers[0].ToString("C0"); 
       firstChoice.IsEnabled = false; 
      } 

      else 
      { 
       if (isOffer == false) 
       { 
        //first turn is to pick a box, not opening a box 
        if (turns == 0) 
        { 
         button.IsEnabled = false; 
         firstChoice = button; 
         boxesToChoose = BoxesToOpen(); 
         textBlockDisplay.Text = "Now choose " + boxesToChoose + " box(es)"; 
        } 

        //opening boxes 
        else 
        { 
         button.FontWeight = FontWeights.Bold; 
         button.Content = displayNumbers[turns].ToString("C0"); 
         usedNumbers[turns] = displayNumbers[turns]; 
         boxesToChoose--; 
         textBlockDisplay.Text = "Now choose " + boxesToChoose + " box(es)"; 
         //FindText(textBox1,Convert.ToString(button.Content),Brushes.Red); 
        } 
        boxesLeft--; 
        CheckTurns(); 
        turns++; 
       } 
      } 
     } 

     //see what turn we are on and make an offer 
     private void CheckTurns() 
     { 
      if(turns == 6 || turns == 11 || turns == 15 || turns == 18 || turns == 20 || turns == 21 || turns == 22 || turns == 23 || turns == 24 || turns == 25) 
      { 
       //enable deal/nodeal buttons 
       buttonDeal.IsEnabled = true; 
       buttonNoDeal.IsEnabled = true; 

       isOffer = true; //disable the other boxes you haven't opened yet 

       //calculate the offer 
       bankOffer = CalculateOffer(boxesLeft); 

       textBlockDisplay.Text = "The bank offers you: " + bankOffer.ToString("C0") +" Deal?"; 
       round++; 
      } 
     } 

     private void buttonDeal_Click(object sender, RoutedEventArgs e) 
     { 
      if (turns < 25) 

      { 
       deal = true; 
       GreyAllBoxes(); 
       firstChoice.IsEnabled = true; 
       textBlockDisplay.Text = "Game Over! You walk away with " + bankOffer.ToString("C0") + " Click your first box to see if you made a good deal."; 
      } 
      else 
      { 
       textBlockDisplay.Text = "Game Over! You walk away with " + bankOffer.ToString("C0") + " Click your first box to see if you made a good deal."; 
      } 
     } 

     private void buttonNoDeal_Click(object sender, RoutedEventArgs e) 
     { 
      if (turns < 25) 
      { 
       isOffer = false; 
       boxesToChoose = BoxesToOpen(); 
       textBlockDisplay.Text = "Now choose " + boxesToChoose + " box(es)"; 
      } 
      else 
      { 
       //stick with first box or take last box 
       textBlockDisplay.Text = "Do you choose your 1st box, or " + bankOffer.ToString("C0") + "?"; 

       buttonDeal.Content = bankOffer.ToString("C0"); 
       buttonNoDeal.IsEnabled = false; 

       firstChoice.IsEnabled = true; 
      } 
     } 

     private int CalculateOffer(int boxes) 
     { 
      int offer; 
      int mainSum = displayNumbers.Sum(); 
      int usedSum = usedNumbers.Sum(); 

      //offer = sum of boxes left, divided by number of boxes left 
      offer = (mainSum - usedSum)/boxes; 

      return offer; 
     } 

     private void GreyAllBoxes() 
     { 
      buttonDeal.IsEnabled = false; 
      buttonNoDeal.IsEnabled = false; 
      button1.IsEnabled = false; 
      button2.IsEnabled = false; 
      button3.IsEnabled = false; 
      button4.IsEnabled = false; 
      button5.IsEnabled = false; 
      button6.IsEnabled = false; 
      button7.IsEnabled = false; 
      button8.IsEnabled = false; 
      button9.IsEnabled = false; 
      button10.IsEnabled = false; 
      button11.IsEnabled = false; 
      button12.IsEnabled = false; 
      button13.IsEnabled = false; 
      button14.IsEnabled = false; 
      button15.IsEnabled = false; 
      button16.IsEnabled = false; 
      button17.IsEnabled = false; 
      button18.IsEnabled = false; 
      button19.IsEnabled = false; 
      button20.IsEnabled = false; 
      button21.IsEnabled = false; 
      button22.IsEnabled = false; 
      button23.IsEnabled = false; 
      button24.IsEnabled = false; 
      button25.IsEnabled = false; 
      button26.IsEnabled = false; 
     } 

     private void UnGreyAllBoxes() 
     { 
      button1.IsEnabled = true; 
      button2.IsEnabled = true; 
      button3.IsEnabled = true; 
      button4.IsEnabled = true; 
      button5.IsEnabled = true; 
      button6.IsEnabled = true; 
      button7.IsEnabled = true; 
      button8.IsEnabled = true; 
      button9.IsEnabled = true; 
      button10.IsEnabled = true; 
      button11.IsEnabled = true; 
      button12.IsEnabled = true; 
      button13.IsEnabled = true; 
      button14.IsEnabled = true; 
      button15.IsEnabled = true; 
      button16.IsEnabled = true; 
      button17.IsEnabled = true; 
      button18.IsEnabled = true; 
      button19.IsEnabled = true; 
      button20.IsEnabled = true; 
      button21.IsEnabled = true; 
      button22.IsEnabled = true; 
      button23.IsEnabled = true; 
      button24.IsEnabled = true; 
      button25.IsEnabled = true; 
      button26.IsEnabled = true; 
     } 

     private int BoxesToOpen() 
     { 
      if (round == 0) 
      { 
       boxesToChoose = 6; 
      } 
      else if(round == 1) 
      { 
       boxesToChoose = 5; 
      } 
      else if (round == 2) 
      { 
       boxesToChoose = 4; 
      } 
      else if (round == 3) 
      { 
       boxesToChoose = 3; 
      } 
      else if(round == 4) 
      { 
       boxesToChoose = 2; 
      } 
      else 
      { 
       boxesToChoose = 1; 
      } 

      return boxesToChoose; 
     } 
    } 
+0

你能告訴你想從你的富文本框中提取什麼嗎?是143,066還是別的什麼? –

+0

它是我的數組中的一個值。它們是隨機的,所以我不知道它會是什麼數字。基本上無論displayNumbers [我]目前是。 – ayocom

+0

顯示您嘗試提取值的代碼? –

回答

0

對您的問題的回答需要多個代碼塊。既然你沒有展示太多的部分,我只是引導你完成任務的建議和參考。

  1. 不需要跟蹤指數,因爲按鈕有你需要的RichTextBox和處理搜索量,即文本。

  2. 從文本框中刪除所選數量。

    a。點擊按鈕後,首先在富文本框中搜索數量"$" + searchAmount + " \n"。請參閱link1link2的解決方案。一個接一個地搜索文本框。如果在第一個發現不需要在第二個文本框中的seacrh。

    b。選擇搜索量並裝飾它。

    c。我的建議是用StrikeThrough裝飾它,而不是從文本框中刪除它。你也可以用紅色來突出顯示。刪除選定的文本很簡單,使用textBox1.SelectedText = "";。紅色突出顯示可以使用textBox1.SelectionColor = Color.Red;完成。對於刪除線,您必須使用TextRangeTextDecorationCollection。請參閱link3

+0

是否有一個庫需要包含在WPF中用於.Find方法?當我嘗試鍵入「textBox1.Find」時,我總是得到一個錯誤,因爲它不是intellisense給我的選項之一。它似乎只包含在表單中。你給我的link1中的例子正是我想要做的。 – ayocom

+0

你必須編寫自己的函數來查找文本框文本中的按鈕文本。請參閱http://stackoverflow.com/questions/22229741/wpf-richtextbox-application-find-text-spanning-multiple-runs。看看它是如何完成的。 –