2016-02-04 54 views
1

我想使點數購買系統使用數字上/下。這裏的想法是: 有六個數字上/下,每一個特點(力量,敏捷,體質,智力,智慧和魅力)。每個特質從10點開始。你不能把一個特質低於7或高於18點購買系統的桌面RPG

我是一個總的小白,但我成功地做到這一點:

private void numericUpDown1_ValueChanged(object sender, EventArgs e) 

     { 
      numericUpDown1.Maximum = 18; 
      numericUpDown1.Minimum = 7; 
     } 

我這樣做是一個六次。在我的表格中,現在有六個數字上/下。現在我正在嘗試做一些對我的微不足道的知識太多的事情。

我想要一個系統,其中六個數字升值的價值合併,不能超過,這意味着在這種情況下,我們將有60分,並不能增加任何得分,除非我們減少一個。我會給該「點池」增加15點,所以用戶不必立即減少一個數值,以增加另一個。

例如:我剩下1分,我的得分如下:15,15,14,10,10,10。我將第三分增加1分。我現在有這樣的:

15, 15, 15, 10, 10, 10.

現在我什麼都沒有留下,但我想我在15點的第四得分。爲了達到這個目標,我必須減少第五和第六的分數,直到我有5分被釋放。我現在有這樣的:

15, 15, 15, 15, 7, 8.

有一個可愛的」框在我的表單中顯示剩下多少分是在頂部的櫻桃。

我盡我所能解釋了這一點。請注意,英語不是我的母語,我有時會爲此而苦惱。

我對如何實現這一目標毫無頭緒,因爲我幾乎沒有任何C#知識。代碼會丟失什麼?

+0

如果您調用'numericUpDown1.Maximum = 18; numericUpDown1.Minimum = 7;'onvalueChanged',它會在每個項目的每次更改時執行。你可以在設計器中設置這個值,或者用'formLoaded'代替它。 – mcy

+0

你可以顯示你的aspx代碼嗎? – mikeyq6

+0

@ mikeyq6它的標籤爲WinForms。 – LarsTech

回答

0

有幾種方法可以做到這一點。

首先,將這些事件功能之外:

numericUpDown1.Maximum = 18; 
numericUpDown1.Minimum = 7; 

我的建議是設置的最大分變量:

private int MAX_POINTS = 60;

然後,當他們中的一個改變,可以調用另一種方法,將所有當前方框相加,並確定其是否超出限制:

private bool TotalOfStatsIsOverLimit() { 
    int total = GetTotalOfStats(); 
    return total > MAX_POINTS; 
} 

private int GetTotalOfStats() { 
    int total = 0; 

    // TODO: Go through each number box and add to the total 

    return total; 
} 

private void numericUpDown1_ValueChanged(object sender, EventArgs e) { 

    if(TotalOfStatsIsOverLimit()) { 
     // TODO: Decrease the value of the stat box that was updated 
    } 

} 

這樣做的一個好處是,您可以對所有6個stat箱重複使用相同的事件方法numericUpDown1_ValueChanged

1

它將更容易,如果你創建人物類

您可以定義默認的構造函數中的每個屬性,和個人的方法來增加或減少其分。

public class Character 
{ 
    private int totalPointsMax = 60; 
    private int maxPoints = 18; 
    private int minPoints = 7; 

    public int Strength { get; set; } 
    public int Dexterity { get; set; } 
    public int Constitution { get; set; } 
    public int Intelligence { get; set; } 
    public int Wisdom { get; set; } 
    public int Charisma { get; set; } 

    public Character() 
    { 
     // create new Character defaults... 
     Strength = 10; 
     Dexterity = 10; 
     Constitution = 10; 
     Intelligence = 10; 
     Wisdom = 10; 
     Charisma = 10; 
    } 

    private int GetTotalCharacterPoints() 
    { 
     return Strength + Dexterity + Constitution + Intelligence + Wisdom + Charisma; 
    } 

    //example of method to increase Strength 
    public void IncreaseStrength() 
    { 
     int availablePoints = totalPointsMax - GetTotalCharacterPoints(); 
     if (availablePoints > 0 && Strength < maxPoints) 
      Strength++; 
    } 

    //example of method to decrease Strength 
    public void DecreaseStrength() 
    { 
     if (Strength >= minPoints) 
      Strength--; 
    } 

    //missing the other increase/decrease methods for the rest of features... 

} 

你只需要在實例開始和你的UI按鈕只需要調用CharacterFoo.IncreaseStrength()或CharacterFoo.DecreaseWisdom()...等

此外,在該選項,您可以永諾重用這個在遊戲中的任何部分.. (例如:如果你的角色發現任何特殊藥水..然後CharacterFoo.IncreaseStrength())

希望這有助於...

0

如果我是你,我會和一個班級一起去做chara因爲它會大大簡化您的未來工作,但如果您是新手,那麼一開始可能會比較困難。 不過,你可以跟進的基本方法如下:

namespace WindowsFormsApplication1 
{ 
public partial class Form1 : Form 
{ 
    private const int totalPoints = 60 + 15; // sum of each trait plus the pool bonus 

    public Form1() 
    { 
     InitializeComponent(); 

     foreach (Control control in this.Controls) 
     { 
      if (control is NumericUpDown) 
      { 
       NumericUpDown numControl = control as NumericUpDown; 
       numControl.Minimum = 7; 
       numControl.Maximum = 18; 
       numControl.Value = 10; 
       numControl.ValueChanged += nud_ValueChanged; 
       lblPointsLeft.Text = "15"; // bonus points 
      } 
     } 
    } 

    private void nud_ValueChanged(object sender, EventArgs e) 
    { 
     int sum = (int)(nudCha.Value + nudCon.Value + nudDex.Value + nudInt.Value + nudStr.Value + nudWis.Value); 
     int pointsLeft = totalPoints - sum; 
     NumericUpDown nudSender = (NumericUpDown)sender; 

     if (pointsLeft < 0) 
     { 
      MessageBox.Show("No points left"); 
      // restore last change 
      // undo the last change 

      nudSender.Value = nudSender.Value - 1; 
      pointsLeft++; 



     } 
     lblPointsLeft.Text = pointsLeft.ToString(); 
    } 
} 
} 
0

下面是一些僞代碼: 你想創建一個變量來保存當前的點。創建一些標籤來保存該變量,並確保您進行AJAX調用,否則每次更新時都會再次從服務器調用該變量。這在Javascript/Jquery中可能會更好。

int pointsUsed = numericUpDown1.value + numericUpDown2.value + numericUpDown6.value; //add all 6 of your values. 

//for your textbox: 
label1.text = "points left is:" 
label2.text = 75 - pointsUsed; 

private void checkBox1_Click(Object sender, EventArgs e) 
{//to add points 
    if (pointsUsed < 75) 
    { 
     numericUpDown1.Value += 1; 
     pointsUsed += 1; 
    } 
} 

檢查MSDN NumericUpDown瞭解更多信息。