数组分配Snake
本文关键字:Snake 分配 数组 | 更新日期: 2023-09-27 18:21:24
在业务环境中工作,我再也不会真正编写代码或使用好的旧控制台了。我的工作是重复的,因此没有真正的挑战性。
我决定在C#控制台上写一个蛇游戏来挑战自己;男孩做了这件事,让我的大脑运转起来。我从来不用每天都这么想,但我觉得我的编程技能并没有变得更好。
不过我有个问题。我采取的基本方法是创建一个蛇类和一个食物类。snake类使用一个数组来存储所有坐标,然后由绘图类决定在屏幕上绘制哪些坐标。
问题是,当你移动snake时,数组会填满(为了提高性能,最大大小是250),所以当我到达数组的末尾时,我想把最后几个coords复制到一个临时数组,刷新原始数组,然后把临时coords复制回主数组。
我遇到的问题是将x坐标复制回原始数组。我决定手动测试,但这个解决方案总是让我可怜的蛇在屏幕上留下它不应该出现的片段。
我该如何以编程方式进行此操作?
spoints[4, 0] = stemp[249, 0];
spoints[4, 1] = stemp[249, 1];
spoints[4, 2] = stemp[249, 2];
spoints[3, 0] = stemp[248, 0];
spoints[3, 1] = stemp[248, 1];
spoints[3, 2] = stemp[248, 2];
spoints[2, 0] = stemp[247, 0];
spoints[2, 1] = stemp[247, 1];
spoints[2, 2] = stemp[247, 2];
spoints[1, 0] = stemp[246, 0];
spoints[1, 1] = stemp[246, 1];
spoints[1, 2] = stemp[246, 2];
spoints[0, 0] = stemp[245, 0];
spoints[0, 1] = stemp[245, 1];
spoints[0, 2] = stemp[245, 2];
如果有人真的想深入研究代码,我真的不介意在这里发布整个游戏。
对于您的目的来说,数组似乎是错误的数据类型。考虑改用List
,因为它在移动条目时具有更大的灵活性。
考虑使用"通用点"的数组,而不是绘制点,创建另一个类似SnakePart
的类,这样Snake
类就有了可管理的部分。
您还可以创建一个自定义数组类,以便在网格的每个部分中都只有一个值hasSnakePart
并对其进行操作。
在将新坐标添加到数组的"前面"时,有没有想过在执行过程中删除"后面"的坐标。所以基本上,一种FIFO类型的集合?!您可以在C#中使用队列。看看这篇文章,看看它是否有帮助?!http://www.dotnetperls.com/queue.
干杯,
克里斯。