Сравнение статистики персонажа для получения заданного третьего значения - PullRequest
0 голосов
/ 09 февраля 2012

Я пытаюсь создать инструмент, который при вводе имени персонажа сравнивает его «навык оружия» с другими введенными персонажами.

Я использую пару ключей, чтобы представить персонажа и его статистику на данный момент, и провожу его через ряд условных проверок. Я думал, что смогу обойти все это, добавив электронную таблицу, но «Библиотека объектов Excel 12.0» отсутствует в моем списке COM, и я не вижу никаких замен.

Есть ли лучший способ сделать это? Если заявления кажутся неэлегентными.

Я искал объекты, 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 Ответ

1 голос
/ 09 февраля 2012

Excel, DataGrid и Chart не имеют ничего общего с вашей проблемой! Вы должны закодировать это. Проблема в том, что в вашей программе нет логики для игроков.

Вы должны использовать ООП для этого. Просто очень простой пример, чтобы показать вам идею (вы должны делать OWS-вещи или что-то еще внутри класса Player):

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-класс просто показывает использование. Обычно вы используете оператор сравнения или другое сравнение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...