2011-06-09 66 views
-4

我已经编程了大约3年,并且对我的技能感到自信。但是最近我开始与嵌入式系统一起工作,并在其他人的代码上工作,并开始质疑我的代码有多好。专业代码

我看到了所有这些复杂的答案,并认为我会用矢量和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; 
} 

编辑:如果你没有时间或精力给我看的例子,我将不胜感激一本好书,一个初级/中级能理解。

+7

属于上http://codereview.stackexchange.com – 2011-06-09 14:25:30

+0

-1这是一个非常模糊的问题,很多的代码函数/变量的样本中失踪。 – 2011-06-09 14:26:02

+0

@Charles这只是我能力的一个例子,所以人们可以提出更好的建议。也不知道对其他网站,但现在将使用它,谢谢 – Skeith 2011-06-09 14:27:05

回答

0

啊哈,因为没有人提到这个问题,让我点这一个出:

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

    ... 
    return 0 
} 

to rough此外,由于不知道代码应该做什么(以及'aimPoint'如何与团队有关;猜测并没有帮助,因为使用没有它,瞄准点被丢弃?),我没有任何东西比固定破损明显,这是上面

从评论

---- 编辑

random的处理似乎被误导了。有人建议你可能意思是random %3 + 1;

我注意的是太多,但决定没有什么基础上的假设。也许随机已经是一个整数在范围[3, 12)

此外,正确地使用时random % 3将不会产生的均匀分布,所以you'd need to do something else

对于许多应用,兰特()将极好执行,但与事务的当前状态悲伤,兰特( )很少正确使用。

的问题是分配

2

这是毫无意义的;这不是一个循环,而是一次通过。

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

是怎么回事? - “我<= 5” 不是 “我<= 0” – Geoffrey 2011-06-09 14:48:56

+0

@gnif的OP [编辑它](http://stackoverflow.com/posts/6294340/revisions) – 2011-06-09 14:59:07

+0

啊哈:)应该检查它我评论之前: ) – Geoffrey 2011-06-09 15:01:05

4
  • 评论#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; 
0

这是我会怎么写。

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]; 
    } 
} 
+0

我与您的转换来切换(在推定,强与弱的不一定是唯一的价值永远......如果他们对布尔彼此我会用其他无资质)同意。你错过了OP错过的东西 - 虽然你使用aimPoint作为数字,但它被定义为一个数组。 – mah 2011-06-09 14:38:01

+0

@abelenky - 是的,你是正确的,这就是一个明显的错误 – Geoffrey 2011-06-09 14:40:27

+0

@mah - 固定:),我没有注意到,只是复制和粘贴,然后重新制定自己的代码 – Geoffrey 2011-06-09 14:42:26

0

这一段代码:

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

没有得到你1和3之间的随机数,试试这个:

aimPoint[i] = random % 3 + 1 
+0

不能为此+1奖励你。我也注意到了这一点,但决定没有什么可以依据你的假设。也许随机在'[3,12]'范围内已经是一个整数。另外,随机%3不会产生均匀分布,所以** [你需要做其他事情](http://eternallyconfuzzled.com/arts/jsw_art_rand.aspx)** – sehe 2011-06-09 15:03:41