数组赋值Snake

时间:2012-01-26 10:20:31

标签: c# arrays multidimensional-array

在商业环境中工作,我不再需要编写代码或使用旧的控制台了。我的工作是重复的,因此并不具有挑战性。

我决定在C#控制台上写一个蛇游戏来挑战自己;和男孩做了它让我的大脑工作。我从来不必在日常工作中考虑这一点,但我觉得我的编程技巧没有变得更好。

我有一个问题。我采取的基本方法是创建一个蛇类和一个食品类。 snake类使用数组来存储所有坐标,然后绘图类决定在屏幕上绘制哪些坐标。

问题在于,当您移动蛇时,阵列会填满(maxsize为250,性能),所以当我到达数组的末尾时,我想将最后几个coords复制到temp数组,刷新原始数据数组并将临时坐标复制回主数组。

我遇到的问题是将x coords复制回原始数组。我决定手动测试,但这个解决方案总是让我的可怜的蛇在屏幕上留下一个不应该在那里的部分。

我如何以编程方式进行此操作?

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];

如果有人真的想深入研究代码,我真的不介意在这里发布整个游戏。

3 个答案:

答案 0 :(得分:3)

听起来,数组是错误的数据类型。请考虑使用List,因为它可以在移动条目时提供更大的灵活性。

答案 1 :(得分:1)

当你向阵列的“前面”添加一个新坐标时,你有没有想过,在你去的时候去掉“后面”的坐标。所以基本上,一种FIFO类型集合?!您可以在C#中使用队列。看看这篇文章,看看它是否有帮助?! http://www.dotnetperls.com/queue

干杯,
克里斯。

答案 2 :(得分:1)

考虑使用数组来表示“一般点”而不是绘制点,创建另一个名为SnakePart的类,这样你的Snake类就具有可管理的部分。

你也可以创建一个自定义数组类,这样在网格的每个部分中你只有一个值hasSnakePart并操纵它。