2017-10-16 71 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