用于桌面赌台的积分购买系统

时间:2016-02-04 17:19:04

标签: c# winforms visual-studio-2013 numericupdown

我试图使用数字上/下来制作积分购买系统。以下是这个想法: 有六个数字上/下,每个特征一个(力量,敏捷,体质,智力,智慧和魅力)。每个特征从10点开始。你不能把性能低于7或高于18。

我是一个总菜鸟,但我设法做到了这一点:

private void numericUpDown1_ValueChanged(object sender, EventArgs e)

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

我做了六次。在我的表单中,现在有六个数字上/下。现在,我试图做一些对我的小知识来说太过分的事情。

我想要一个系统,其中六个数字上升的值被组合并且不能超过,这意味着在这种情况下,我们将有60个点并且不能增加任何分数,除非我们减少一个。我会在那个" Point pool"上添加15分,所以用户不必立即减少一个数据,以增加另一个。

  

示例:我还有1分,我的分数如下:15分,15分,14分,10分,10分,10分。我将第三分增加1分。我现在有这个:

     

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

     
    

现在我什么都没有留下,但我希望我的第四个得分为15分。为了达到这个目的,我必须减少第五和第六的分数,直到我获得5分。我现在有这个:

         

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

  

Lil'我的表格中的方框显示剩下多少点将是一个樱桃。

我尽力解释这一点。请注意,英语不是我的母语,我有时也会挣扎。

我对如何实现这一点毫无头绪,因为我几乎不了解C#。缺少什么代码?

4 个答案:

答案 0 :(得分:1)

如果你创建一个Character类

会更容易

您可以为构造函数中的每个属性定义默认值,并使用单个方法来增加或减少其点。

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())

希望这会有所帮助......

答案 1 :(得分: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个统计框重复使用相同的事件方法numericUpDown1_ValueChanged

答案 2 :(得分:0)

如果我是你,我会选择一个角色课,因为它会大大简化你未来的工作,不过如果你是新手,一开始可能会更难。 不过,您可以按照以下方式跟进基本方法:

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();
    }
}
}

答案 3 :(得分: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了解详情。