编辑#1。
现在我发现我的功能不适用于这个游戏,所以请忘记它们。
仍然没有找到解决方案,看到了 fjf2002 提到的一些有关队列的文档,但目前对我来说太复杂了。尝试制作一个 Snake[20] 数组来存储 2
{1, 1, 1, 2} 的坐标: map 上的 Head (1,1) Tail (1,2)。仍然不知道如何在 map 上移动它并使尾部跟随头部。在尝试了一切并因缺乏经验而感到沮丧后,我的大脑一片空白。我不允许使用二维数组之外的任何东西。这意味着没有结构,没有队列,没有堆栈......这应该在不使用这些的情况下完成,教授说这比我想象的更容易。 (不要发帖说我应该向他寻求解决方案,因为他一直说同样的话而不回答我的问题)。任何想法都会对我有很大帮助......
---------------------------------------- -------------------------------------------------- --------------------------------------------------------
我使用 VisualStudio 2013 并使用 C 语言进行编程。
在过去的两天里一直在寻找解决方案,但在互联网上找不到任何可以帮助我的东西。看到了几十种不同的英语和西类牙语的贪吃蛇游戏,但由于对他们的程序的零解释或由于我缺乏经验,我无法理解它们。
尝试了我所知道的一切,但没有成功,我自己也无法真正想出解决方案。
我有:
-生成 map 的函数。
-移动蛇的函数:
COORD cxy;
#define posicion(x,y) {(cxy.X)= (x);(cxy.Y)= (y); SetConsoleCursorPosition((GetStdHandle(STD_OUTPUT_HANDLE)), (cxy) );}
int tablero[20][20], posx = 0, posy = 0;
void movimientoSnake(){
int m = 1, k = 0, tail = 3;
char dir = 'd';
do{
if (kbhit()){
dir = getch();
if (dir == 'w'){
m = 0;
k = -1;
}
if(dir == 's'){
m = 0;
k = 1;
}
if (dir == 'a'){
m = -1;
k = 0;
}
if (dir == 'd'){
m = 1;
k = 0;
}
}
else{
Sleep(500);
posicion(posx += m, posy += k);
printf("%d", 1);
posicion(posx - tail, posy);
printf("%d", 0);
}
} while (2 > 1);
*蛇根据wasd键移动正常,并留下一 strip 1的踪迹( map 上全是0)。
*它根据位置移动: map 的位置(x,y)(移动到那里) printf("%d", 1); (打印 1)。例如
主要问题是当我想在向下移动时删除轨迹时,删除最后一个位置,同时打印前面的新位置。
如果可能的话,我想要一个没有太复杂(使用太多库)的解决方案,因为现在我只知道:
#include <stdio.h>
#include <Windows.h>
#include <stdlib.h>
我尝试将坐标存储在数组上,就像我在几乎 90% 的贪吃蛇游戏中看到的那样,但我不理解这个概念,所以我最终进行了一系列尝试但没有成功。
有什么想法吗? 预先非常感谢您。
最佳答案
让我们总结一下:
- 只知道蛇头的坐标,如何确定蛇尾的坐标?
- 由于蛇可能会转弯好几圈,因此没有直接的方法。
I tried to store coordinates on arrays as i saw in almost 90% of snake games out there
似乎是唯一的解决方案。
but i dont understand the concept
- 您应该将蛇占据的位置存储在一个数组中。您必须跟踪哪些数组元素当前被占用,头部和尾部存储在哪里。
- 或者您将上述内容用作已实现的产品:一种允许轻松访问第一个和最后一个元素的数据结构。读 关于http://en.wikipedia.org/wiki/FIFO , http://www.cplusplus.com/reference/queue/queue/ .
关于无法根据蛇头的移动删除蛇尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27279888/