在我的游戏中玩家和怪物一起错过

Posted

技术标签:

【中文标题】在我的游戏中玩家和怪物一起错过【英文标题】:Player and Monster miss together in my game 【发布时间】:2013-01-06 09:58:49 【问题描述】:

在我的 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;

另外,如果您对造成的伤害有更好的想法,请告诉我。因为我只是把数字和符号放在一起

【问题讨论】:

他们总是同时错过。如果玩家错过了怪物不应该总是错过。如果玩家击中怪物应该仍然可以错过 有点与问题无关,但是...... try 块很糟糕。唯一可能出现的例外是除以零错误,您可以使用 if 语句 (if (Def == 0) return -1;) 进行检查 - 如果 你不是指 @987654325 @ 在/ 之前应用(假设Def >= 0)。如果你这样做了,你需要在它周围加上括号。 我把它放在那里是因为我正在改变数学,试图找到一些有用的东西,我计划稍后再改变它,所以我暂时把它放在那里 【参考方案1】:

作为一个侧面提示,我会稍微改变一下设计,比如:

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) 

  

【讨论】:

【参考方案2】:

您不希望每次需要随机数时都创建一个新的 Random 对象。否则我怀疑你会得到相同的号码!定义一个全局 Random 对象一次,并在每个随机数请求中使用它。

【讨论】:

非常感谢,我什至没有想过要尝试。

以上是关于在我的游戏中玩家和怪物一起错过的主要内容,如果未能解决你的问题,请参考以下文章

错过时代的人,庆幸赶上了BetaChain区块链

Unity技能学院——Inputsystem第一期

《怪物猎人 Rise》太刀侠最多 Steam游戏节开启 | 每日B报

区块链游戏开发 区块链游戏-CryptoBlades

为什么在我的Java游戏中,我的SmartEnemy没有跟着玩家走,而是走到了屏幕上方?

我小时候在我的玩家类中为我的玩家制作了一个碰撞箱精灵。如何在游戏场景的 didBegin 方法中访问该碰撞箱精灵?