0

私のC#ゲームTextQuestでは、戦闘システムが現在進行中であり、問​​題が発生しました。プレイヤーがミスした場合、モンスターもミスし​​ます(常に同時に)。使用されるコードは次のとおりです。

private void button1_Click(object sender, EventArgs e)
    {
        Monster_Class mc = new Monster_Class();
        Account_Class ac = new Account_Class();
        if (hitOrMiss())
        {
            int hit = -1;
            hit = mc.hitAmount(ac.getAtk(Properties.Settings.Default.CurrentUser), mc.getDef(monster));
            mhealth -= hit;
            if (hit == -1)
            {
                setText("You missed.");
            }
            else
            {
                setText("You hit " + hit + ".");
            }
            monsterHit();
            update();
        }
        else
        {
            setText("You missed.");
            monsterHit();
        }
    }

private void monsterHit()
{
    Monster_Class mc = new Monster_Class();
    Account_Class ac = new Account_Class();
    if (hitOrMiss())
    {
        int hit = -1;
        hit = mc.hitAmount(mc.getAtk(monster), ac.getDef(Properties.Settings.Default.CurrentUser));
        phealth -= hit;
        if (hit == -1)
        {
            addText(monster + " missed.");
        }
        else
        {
            addText(monster + " hit " + hit + ".");
        }
    }
    else
    {
        addText(monster + " missed.");
    }
}

private bool hitOrMiss()
{
    bool hit = true;
    Random rand = new Random();
    if (rand.Next(101) < 15)
    {
        hit = false;
    }
    return hit;
}

public int hitAmount(int Atk, int Def)
{
    int hit = -1;
    Random rand = new Random();
    int deturm = rand.Next(6);
    try
    {
        hit = ((Atk + deturm * 3) / Def + 1) / 2;
        if (hit == 0)
        {
            hit = 1;
        }
    }
    catch { }
    return hit;
}

また、与えられたダメージの量についてより良いアイデアがあれば、私に知らせてください。数字と記号を一緒に投げただけなので

4

2 に答える 2

5

乱数が必要になるたびに新しいランダムオブジェクトを作成する必要はありません。そうでなければ、あなたはいつも同じ番号を得るだろうと私は思う!グローバルランダムオブジェクトを一度定義し、それを乱数のすべての要求で使用します。

于 2013-01-23T01:25:39.833 に答える
0

補足として、次のようにデザインを少し変更します。

bool hitOrMiss(Entity attacker, Entity defender)
{
  // do your calcs
}

int doAttack(Entity attacker, Entity defender)
{
  if (hitOrMiss(attacker, defender)) {
    // calculate damage
    return dmg;
  }
  else
    return 0;
}

private void attachPhase(object sender, EventArgs e)
{
  Player player = ...
  Monster monster = ...

  int playerDmg = doAttack(player, monster);
  int monsterDmg = doAttack(monster, player);

  if (playerDmg > 0) {

  }

  if (monsterDmg > 0) {

  }
}
于 2013-01-23T01:31:11.953 に答える