2011-06-09 56 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