java - 蛇是怎么用这些代码移动的?
问题描述
我刚刚看了一个 youtuber 制作蛇游戏,我无法理解这些代码是如何让蛇移动的。这里的 x[] 是 x 坐标,而 y[] 是 y 坐标。youtube并没有真正解释太多,所以我希望我能在这里得到答案。
for(int i=bodyParts;i>0;i--) {
x[i]=x[i-1];
y[i]=y[i-1];
}
switch(direction) {
case 'U':
y[0] = y[0]-UNIT_SIZE;
break;
case 'D':
y[0] = y[0]+UNIT_SIZE;
break;
case 'L':
x[0] = x[0]-UNIT_SIZE;
break;
case 'R':
x[0] = x[0]+UNIT_SIZE;
break;
default:
break;
}
解决方案
我们这里没有太多的上下文可以继续,但我猜 ( x[0]
, y[0]
) 是蛇头的坐标, ( x[i]
, ) 是蛇的y[i]
每个剩余身体部位的坐标。
switch 语句的主体根据向内移动的方向调整头部的坐标。例如向下移动 ( case 'D'
),y 坐标y[0]
增加UNIT_SIZE
in y[0] = y[0]+UNIT_SIZE;
。
for 循环遍历蛇的每个身体部位,将其移动到下一个身体部位之前的位置。例如,如果你的蛇是
0 1 2 3
4
5 6
头在哪里0
,如果向左移动,蛇就会变成
0 1 2 3 4
5
6
哪里2
已经移动到哪里1
,3
已经移动到哪里2
,等等。这就是为什么循环
for (int i = bodyParts; i > 0; i--) {
x[i] = x[i-1];
y[i] = y[i-1];
}
将i
-th 身体部位移动到i-1
之前的 -th 身体部位。
推荐阅读
- c++ - Windows 上的 std::filesystem "root_name" 定义被破坏
- homebrew - brew --prefix libxml2 给了我一个不存在的路径
- c# - 在 Unity WebApi2 C# 中访问请求标头?
- python - 如何选择 mnist 训练集的子集
- laravel - 使用 Laravel Mix 将 JavaScript 类导入 Vue 单文件组件
- javascript - 在 Polymer 组件中没有找到 shadow-root 但可以工作,为什么?
- memcached - 在重新启动后保留 memcached (1.4.14)
- python - 如何设置 Spotipy 和访问 Spotify 的 Web API
- java - Prometheus 客户端是同步的还是异步的?
- php - 在占位符中添加按钮和链接的问题