【问题标题】:how to move last picturebox for snake game如何移动蛇游戏的最后一个图片框
【发布时间】:2017-07-16 07:38:47
【问题描述】:


我想用 C# 制作我自己的 Snake 游戏。我已经开始了几次(比如 2 或 3 次),但是之间的中断太大了,因此编写新代码似乎更容易,然后尝试理解现有代码(我知道,因此存在 cmets,但有时我进入编码并完全忘记 cmets)。
所以现在我想做最后的尝试。我对几乎所有事情都有一些想法,但我不知道如何弄清楚我的蛇的最后一个图片框是什么!一般来说,蛇的身体由许多 PictureBox 组成,每次吃完食物最后都会添加一个 PictureBox。

要在屏幕上移动蛇,我想取最后一个 PictureBox(在蛇体的末端)并将其移动到 Snake 的前面,使其成为蛇的头部。正文将由代码生成,因此要跟踪所有框,我可以使用列表。但我不知道如何找出最后一个盒子,如果我发现了,我怎么能只把这个盒子移动到蛇的开头。

我会很感激你能给的每一个小费,
感谢您花时间阅读本文! :)

【问题讨论】:

  • 如果你想用 c# 制作视频游戏,我建议使用 Unity 之类的东西。
  • 在尝试 Unity 或 Unreal 之类的东西之前,我首先想制作一些没有引擎的简单游戏;)

标签: c# visual-studio picturebox


【解决方案1】:

我不知道如何找出最后一个盒子,如果我发现了,我怎么能只把这个盒子移动到蛇的开头。

任何集合(列表、队列、堆栈等)或数组都可用于跟踪对象的顺序。您的情况听起来最好使用先进先出的集合。队列就是按照这个原则工作的。我将使用字符串来说明它是如何工作的:

Queue<string> queue = new Queue<string>();

queue.Enqueue("one"); //add to queue
//queue is now ["one"]
queue.Enqueue("two"); //queue is now ["one", "two"]
queue.Enqueue("three"); //queue is now ["one", "two", "three"]

string firstString = queue.Dequeue(); //sets string to "one" and removes it from queue
//queue is now ["two", "three"]
queue.Enqueue("four"); //queue is now ["two", "three", "four"]
queue.Enqueue(queue.Dequeue()); //moves first element to the back of the queue
//queue is now ["three", "four", "two"]

队列支持任何数据类型,你可以声明一个 PictureBox 队列来跟踪你的蛇。

【讨论】:

  • 好的,我想我大致了解队列的事情。但是有没有办法可以按索引获取项目?这样我就可以例如抓住“一个”,对对象“一个”做一些事情,而不是将它出队并再次入队,以便它从头到尾移动?通过对对象“one”做一些事情,我可以像 queue[0].color 或类似的东西直接使用它吗?
  • @JDeveloper Queue 仅支持使用 Dequeue() 函数获取第一项。如果您想访问所有项目,最好使用List&lt;PictureBox&gt; snake 来握住蛇。您可以使用方括号符号snake[0] 访问元素。如果你想将第一个元素移到列表的后面,你可以这样做snake.Add(snake[0]); snake.RemoveAt(0);
  • 好吧,List我有点熟悉...目前我没有可以处理VS的PC来测试它,所以我不得不问:我可以用类似的代码调用PictureBox方法蛇[0]。 图片框方法 ?
  • @JDeveloper 你明白了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-29
相关资源
最近更新 更多