pre 前一个节点内存地址
body 你的body 的解释是错误的... 中间这个是 屏幕位置
next 后一个节点内存地址
第一次内存分布是这样的
pre 屏幕位置 next[这部分没有用到]
0 160*10+40*2 6 头 0 内存偏移位置
0 160*10+40*2 -2 12 身体 6 内存偏移位置
6 160*10+40*2 - 4 18 尾巴 12 内存偏移位置
你移动的时候自己手动算一下
我的代码表示的是 什么意思 next 其实没有用到......
允许移动的时候
我们先把 SNAKE_STERN 的内容 到 当前的 头内存pre 这个位置 为什么? 因为 我们开始的时候是
内存 中的分布是
头 身体 尾巴
经过一次移动后
身体 尾巴 头
头内存中的 pre 要变成尾巴的内存位置 尾巴会变成新的头 而 原来的头 会变成身体 而原来的身体 要变成 尾巴...
pre 屏幕位置 next
12[修改=SANKE_STERN] 160*10+40*2 6 头
0 160*10+40*2 -2 12 身体
0[修改] 新的头的位置[修改] 0[修改=SNAKE_HEAD 其实这里无所谓 我根本没用到...] 尾巴
然后我们第一个拿到的是 尾巴的内存 位置 用 SNAKE_STERN 记录 然后修改后 它里面的内容是 新的头部
观察内存!
pre 屏幕位置 next[这部分没有用到]
0(1) 160*10+40*2 6 头 -> 变成身体
0 160*10+40*2 -2 12 身体 ->变成尾巴
6(4) 160*10+40*2 - 4(2) 18(3) 尾巴 -> 新的头
修改的顺序
尾巴内存修改情况
push pre 保存 前一个位置 6 因为6 这个内存位置 也就是当前的身体 会变成 新的 尾巴
然后呢?得到屏幕位置 删掉 尾巴的颜色 在新的移动的屏幕位置 放上颜色
然后呢?
push SNAKE_HEAD
pop ds:[bx+4] 这个是修改 next 虽然没用...
尾巴变成新的脑袋
push SANKE_STERN
pop SANKE_HEAD
身体变成 新的尾巴
pop SNAKE_STERN -> 6
每次都这样循环的做修改
每次用头内存的 屏幕位置进行判断是否允许移动
头->身体
身体->尾巴
尾巴->头
循环
别急 先看看 我回复的也比较仓促