【问题标题】:Array assignment Snake数组赋值 Snake
【发布时间】:2012-01-26 10:20:31
【问题描述】:

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

我决定通过在 C# 控制台中编写一个蛇游戏来挑战自己;男孩这样做让我的大脑工作。我从来不用每天都这么努力地思考,但我觉得我的编程技能并没有变得更好。

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

问题是,当您移动蛇时,数组会填满(最大大小为 250 以提高性能),所以当我到达数组末尾时,我想将最后几个坐标复制到临时数组中,刷新原始数组数组并将临时坐标复制回主数组。

我遇到的问题是将 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];

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

【问题讨论】:

  • 使用数组而不是类型化的集合/字典让你的生活变得更加艰难。

标签: c# arrays multidimensional-array


【解决方案1】:

听起来数组对于您的目的来说是错误的数据类型。考虑改用List,因为它在移动条目时提供了更大的灵活性。

【讨论】:

  • 谢谢!我将使用一个列表,但目前我只想知道如何以编程方式做到这一点:)
【解决方案2】:

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

您还可以创建一个自定义数组类,以便在网格的每个部分中只有一个值 hasSnakePart 并对其进行操作。

【讨论】:

  • Hyp : 你让我的大脑受伤了,我上一次这样编程是 7 年前的高中,所以我希望它是非常基本的哈哈
  • 啊,但这就是有趣的部分,不是吗!动动脑筋,让它变得有趣!
  • 是的,但是小步骤:) 接下来是制作一条 AI 蛇,这样游戏就很有趣,然后让蛇射毒液以减慢另一条蛇的速度等
  • 是的!然后你可以一直添加“蛇叫声”-“fus-ro-dah”……嗯,蛇没有膝盖。
【解决方案3】:

您是否考虑过在向数组的“前”添加一个新坐标时,同时删除“后”的坐标。所以基本上,一种 FIFO 类型的集合?!您可以在 C# 中使用队列。看看这篇文章,看看它是否有帮助?! http://www.dotnetperls.com/queue.

干杯,
克里斯。

【讨论】:

  • CHris,我正在绘制所有点,但我的绘图类在每次迭代中绘制除了最后一点之外的所有点。我没有走这条路,因为那样蛇将没有尾巴,只有 1 个字符在屏幕大声笑-编辑-抱歉,我现在看到了您的逻辑,我只需要一个变量来跟踪蛇的段数。
猜你喜欢
  • 1970-01-01
  • 2016-01-17
  • 2011-05-06
  • 2011-12-22
  • 2014-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-17
相关资源
最近更新 更多