2017-10-16 77 views
2

我跟着YouTube視頻,並且有一部分代碼我無法理解。希望你們能幫助我。貪吃蛇遊戲繪製數組功能

該陣列用於蛇體。

Public void Draw() 
{ 
    for (int i = Body.length - 1; i > 0; i- -) 
     Body[i] = Body[i - 1]; 
} 

這段代碼做了什麼?

回答

3

我假設Body是一個數組,指示蛇的所有位置,從第一個開始。該循環表示,對於數組中表示蛇位置的每個位置(從最前端移動到前端開始),將其設置爲前一個。最終的結果是與之前完全相同的數組,除了每個位置都沿着第一行移動。

注意訂單在這裏很重要。如果從數組中的位置1開始,可以將Body [1]分配給Body [0]的值,並在下一步將Body [2]分配給Body [1]的值,直到整個數組被Body [0]中的初始值覆蓋。

事實上,在這種情況下,「繪製」對於某種方法來說有點誤導性,因爲它更新了蛇,而不是「繪製」蛇,因爲它會引導您思考。

+0

恰恰相反。 'Body [i] = Body [i - 1]'意味着_you會將Body [99]分配給Body [100],並且在下一步中,Body [98] to Body [99]等等。你的回答也錯過了** for循環的減少**,這使得你的例子在這裏變得不太適用,並且使你的最終結論無效(「直到整個數組被覆蓋了Body [0]中的初始值」)是不正確的,代碼正確地移動所有點的一個索引,它不會覆蓋所有具有相同值的所有內容) – Flater

+0

@Flater通過「assign Body [1] to Body [0]」我的意思是「將Body [1]賦值爲Body [ 0]」。此外,「直到整個數組被覆蓋在Body [0]中的初始值」的結論是,如果順序顛倒,會發生什麼。請重新閱讀以前的更正。爲清晰起見進行編輯。我對任何誤解表示歉意。 – Neil

+0

爲什麼你要回答會發生什麼**如果** for循環未被逆轉?問題在於OP的代碼片段完成了什麼,而不是稍微不同的代碼片段。對於這種特定情況,操作順序對於正常for循環無意義的點很重要。 – Flater