C#贪吃蛇游戏调用IncreaseLen5方法无法增加蛇身长度问题求助
核心问题原因
IncreaseLen方法仅对新增蛇身的坐标做了赋值,没有更新记录蛇身总长度的全局变量snakeLen。你的绘制逻辑DrawSnake默认只会渲染0 ~ snakeLen-1索引范围内的坐标,新增的坐标永远不会被绘制出来,看起来就像没有生效。- 你当前的
IncreaseLen5循环调用IncreaseLen的逻辑,在没有修复snakeLen自增的前提下,5次循环都会给同一个索引位置赋值,完全无效。
修复代码
只需要在IncreaseLen方法末尾增加snakeLen自增逻辑即可:
private static void IncreaseLen() { snakeX[snakeLen] = snakeX[snakeLen - 1]; snakeY[snakeLen] = snakeY[snakeLen - 1]; // 新增以下行更新蛇身长度 snakeLen++; }
额外注意事项
- 要提前确认
snakeX、snakeY数组的初始化长度足够容纳最大蛇身,否则长度增长到超过数组上限时会抛出数组越界异常,更推荐用List<int>来存储蛇身坐标,不需要提前固定长度。 CreateHook方法每次调用都新建Random实例的写法有问题:短时间多次调用时,Random默认以系统时间为种子,会生成重复的坐标,导致食物刷新在相同位置,建议把Random实例改成全局静态变量,只初始化一次。- 如果你预期每吃一个食物只增加1节蛇身,直接调用
IncreaseLen即可,不需要调用IncreaseLen5一次性加5节。
内容的提问来源于stack exchange,提问作者user16559503
相关产品推荐
相关产品推荐

