将此代码专业化

Professionalise this code

本文关键字:专业化 代码      更新时间:2023-10-16

我已经编程大约3年了,对自己的技能充满信心。但最近,我开始与嵌入式系统合作,研究其他人的代码,并开始质疑我的代码有多好

我在SO上看到了所有这些复杂的答案,我想我会用向量和if语句来做这件事,并想知道我是否只是一个自学成才的初学者,并不真正知道自己的水平。

所以我想知道更有经验的程序员是否可以向我展示如何把事情做得更好。

这是我为rpg游戏编写的代码,用来选择攻击目标。以它为例,你可以向我展示更好/更先进/更专业的方法吗?

int FindTarget(Player &player);
{
    int aimPoint[5] = 0;
    for(int i  = 0; i <= 5; i++)
    {
        if(player.team[i].exist == true)
        {
            // set random starting point between 1 - 3 
            aimPoint[i] = random /3;
            // add a point if you hve an elemental advantage minus if not
            if(player.team[i].type == weak)
            {
                aimPoint += 1;
            }
            else if(player.team[i].type == strong)
            {
                aimPoint -= 1;
            }
                //add for front row minus for back
            if(i == 1 || i== 3)
            {
                aimPoint += 1;
            }
            else
            {
                aimPoint -= 1;
            }
        }
    }
    return 0;
}

编辑:如果你没有时间或精力给我看例子,我会很感激一本初学者/中级学生都能理解的好书。

  • 评论#1:

这行从0开始,正好走一次?为什么它是一个循环?

for(int i  = 0; i <= 0; i++)
  • 评论#2:

不要将布尔值与true进行比较。

 if(player.team[i].exist == true)

只需将其重新写入:

if(player.team[i].exist)
  • 评论#3:

专业人士很少使用硬编码的值
为什么这个值是5?

int aimPoint[5] = 0;

相反,要明确:

int aimPoint[TARGET_SIZE] = 0;

同样,更改

aimPoint[i] = random /3; 

至:

aimPoint[i] = random /INITIAL_TARGET_VALUE;

这毫无意义;这不是一个循环,这是一个单程。

for(int i  = 0; i <= 0; i++)

嗯,既然没有人提到它,让我指出这一点:

int FindTarget(Player &player);
{
   int aimPoint[5] = 0;
   ...
   return 0
}

大致

void FindTarget(const Player &player)
{
    std::vector<int> aimPoint(5, 0);
    ...
}

此外,由于不知道代码应该做什么(以及"aimPoint"与团队的关系;猜测没有帮助,因为没有使用它,aimPoints被丢弃了?),除了修复以上的明显损坏,我没有其他东西了

----从评论中编辑

random的处理似乎被误导了。有人说你可能是指random %3 + 1

我也注意到了这一点,但我认为没有什么可以作为假设的基础。也许random已经是[3, 12)范围内的int了。

此外,random % 3不会产生均匀分布,因此您需要执行其他操作

对于许多应用程序来说,如果使用得当,rand()的表现会令人钦佩,但在当前糟糕的情况下,rand)很少被正确使用。

问题是分配

以下是我将如何编写它。

void FindTarget(Player &player);
{
    int aimPoint[5];
    for(int i = 0; i <= 5; ++i)
    {
        if(!player.team[i].exist)
          continue;
        // set random starting point between 1 - 3 
        aimPoint[i] = random / 3;
        // add a point if you hve an elemental advantage minus if not
        switch(player.team[i].type) {
          case weak:
            ++aimPoint[i];
            break;
          case strong:
            --aimPoint[i];
            break;
        }
        //add for front row minus for back
        if(i == 1 || i== 3)
          ++aimPoint[i];
        else
          --aimPoint[i];
    }
}

那段代码:

 // set random starting point between 1 - 3 
             aimPoint[i] = random /3;

不要给你1到3之间的随机数,试试这个:

aimPoint[i] = random % 3 + 1