比较字符统计信息以产生预定的第三值

时间:2012-02-08 22:25:32

标签: c# .net visual-studio-2010 c#-4.0

我正在尝试创建一个工具,当输入角色名称时,它会将其“武器技能”与其他输入的角色进行比较。

我正在使用一个密钥对来表示此刻的角色及其统计数据并通过一系列条件检查来运行它。我想我可以通过添加电子表格来规避所有这些,但我的COM列表中没有“Excel 12.0对象库”,我看不到任何替换。

有更好的方法吗?如果陈述似乎不优雅。

我搜索过对象,DataGridView和Chart听起来很有希望,但据我看到的例子我可以看到,有点小提琴他们不能用我喜欢的方式。

非常感谢您提出任何建议或事项!

数据。

    1   2   3   4   5   6   7   8   9   10
1   4   4   5   6   6   6   6   6   6   6
2   3   4   4   4   5   5   6   6   6   6
3   2   3   4   4   4   4   5   5   6   6
4   2   3   3   4   4   4   4   4   5   5
5   2   2   3   3   4   4   4   4   4   4
6   2   2   3   3   3   4   4   4   4   4
7   2   2   2   3   3   3   4   4   4   4
8   2   2   2   3   3   3   3   4   4   4
9   2   2   2   2   3   3   3   3   4   4
10  2   2   2   2   3   3   3   3   3   4

我的代码。

namespace ThereIsOnlyRules
{
public partial class Calculator : Form
{
    public Calculator()
    {
        InitializeComponent();
    }

    StoreVariables test = new StoreVariables();

    private void Form1_Load(object sender, EventArgs e)
    {

        test.doWork();
    }
    private void button1_Click(object sender, EventArgs e)
    {

        lblwinner.Text = "";
        string attackCharacter = attackBox.Text;
        string opponentCharacter = opponentBox.Text;
        string toHitRoll = test.ToHit(attackCharacter, opponentCharacter);
        lblwinner.Text = toHitRoll;

    }
}
public class StoreVariables
{
    public Dictionary<string, int> attacker = new Dictionary<string, int>();
    public Dictionary<string, int> opponent = new Dictionary<string, int>();
    //string attackUnit { get; set; }
    //string opponentUnit { get; set; }
    int weaponSkill { get; set; }
    public void doWork()
    {
        Attacker();
        Opponent();
        //ToHit();
    }
    private void Attacker()             
    {
        attacker.Add("Warrior", 3);
        attacker.Add("Destroyer", 4);
        attacker.Add("Reaver", 9);
        attacker.Add("Killer", 10);
    }
    private void Opponent()
    {
        opponent.Add("Warrior", 3);
        opponent.Add("Destroyer", 4);
        opponent.Add("Reaver", 9);
        opponent.Add("Killer", 10);
    }
    public string ToHit(string attackerName, string opponentName)
    {
        string toHit = "0";

        int value;
        int AWS = 0;
        int OWS = 0;
        if (attacker.TryGetValue(attackerName, out value))
        {
            AWS = value;
        }
        if (opponent.TryGetValue(opponentName, out value))
        {
            OWS = value;
        }

        if (OWS == 10)
        {
            if (AWS >= 5)
            {
                toHit = "4+";
                return toHit;
            }
            else if (AWS <= 4)
            {
                toHit = "5+";
                return toHit;
            }
            else
            {
                return null;
            }
        }
        else if (OWS == 9)
        {
            if (AWS == 10)
            {
                toHit = "3+";
                return toHit;
            }
            else if (AWS >= 5)
            {
                toHit = "4+";
                return toHit;
            }
            else if (AWS <= 4)
            {
                toHit = "5+";
                return toHit;
            }
            else
            {
                return "I haven't implemented the rest yet, choose Killer as opponent";
            }
        }
        else
        {
            return null;
        }
    }
}
}

1 个答案:

答案 0 :(得分:1)

Excel,DataGrid和Chart与您的问题没有任何共同之处!你必须编码。你遇到的问题是,你的程序中的玩家没有逻辑。

你应该使用OOP。只是一个非常简单的示例向您展示这个想法(您必须执行OWS-stuff或Player-class中的任何其他内容):

public abstract class Player : IComparable
{

    public abstract int Skill { get; }

    public int CompareTo(object obj)
    {
        if (obj is Player)
            return this.Skill.CompareTo(((Player) obj).Skill);
        throw new ArgumentException();
    }
}

public class Warrior : Player
{
    public override int Skill
    {
        get { return 3; }
    }
}

public class Destroyer : Player
{
    public override int Skill
    {
        get { return 4; }
    }
}

public class Game
{

    public Player Attacker { get; set; }

    public Player Opponent { get; set; }

    public bool AttackerWins
    {
        get { return Attacker.CompareTo(Opponent) == 1; }
    }

    public bool OpponentWins
    {
        get { return Opponent.CompareTo(Attacker) == 1; }
    }
}

Game-class只显示用法。通常你会实现比较运算符或进行其他比较。