2014-12-03 2 views
0

EDIT # 1.
Теперь я вижу, что мои функции не работают с этой игрой, поэтому, пожалуйста, забудьте их.
Все еще не нашли решения, увидели некоторую документацию о том, что Queue's упоминается как fjf2002, но это слишком сложно для меня в этот момент. Попытка сделать массив змеи [20] для хранения координат на 2
{1, 1, 1, 2} будет: Голова (1,1) Хвост (1,2) на карте. Все еще не может понять, как перемещать его по карте и заставлять хвост следовать за головой. Мой разум пуст, пробовав все и разочаровавшись в моем отсутствии опыта. Im не разрешено использовать что-либо за пределами двумерных массивов. Это означает, что ни структуры, ни очереди, ни стеки ... Это должно быть сделано без использования тех, и профессор говорит, что это проще, чем я думаю. (Dont post, что я должен попросить его о решении, поскольку он продолжает говорить то же самое, не отвечая на мои вопросы). Любая идея мне очень помогла бы ...
---------------------------------------- -------------------------------------------------- ------------------------------------------ im с использованием VisualStudio 2013 и программирования в C.

Ищет решение за последние 2 дня и не нашел ничего через Интернет, чтобы помочь мне. Видел десятки различных змейских игр на английском и испанском языках, но я не могу их понять из-за отсутствия объяснения своих программ или из-за моего отсутствия опыта.Невозможно удалить хвост змеи в соответствии с движением головы

Пробовал все мои знания без успеха, и я не могу найти решение самостоятельно.

У меня есть:

- Функция для генерации карты.
- Функция, чтобы переместить змея:

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

* Змея движется OK в соответствии с WASD ключи, и она оставляет след с 1 по (карта полна 0-х).
* Он перемещается в зависимости от положения: положение (x, y) карты (перемещается там) printf ("% d", 1); (печатает 1). например

Основная проблема заключается в том, когда я хочу удалить след, когда я перемещаюсь вниз, удаляю последнюю позицию и одновременно печатаю новую.

Если возможно я хотел бы решение без слишком сложным (с использованием слишком много библиотек), как теперь я знаю только:

#include <stdio.h> 
#include <Windows.h> 
#include <stdlib.h> 

Я пытался хранить координаты в массивах, как я видел в почти 90% от змейные игры, но я не понимаю концепцию, поэтому я закончил с кучей попыток без успеха.

Любые идеи? Спасибо вам большое заблаговременно.

+0

'while (2> 1);' ?? –

+0

@Weather_Vane его бесконечный цикл, потому что я хотел его для тестирования. – Papafrita

+0

Для бесконечного цикла принято писать 'while (1)'. –

ответ

1

Итак, давайте подведем итоги:

  1. Зная только координаты головы змеи, как определить координаты хвоста?
  2. Поскольку змея может иметь несколько оборотов, нет прямого пути.

Я пытался хранить координаты в массивах, как я видел в почти 90% от змеиных игр вне там

Кажется, единственным решением.

, но я не понимаю концепцию

  • Вы должны сохранить свои позиции, занимаемые змеей в массиве. Вы должны отслеживать, какие элементы массива заняты, где голова и где хранится хвост.
  • Или вы используете вышеуказанное как уже реализованное изделие: структуру данных, которая позволяет легко получить доступ к первому и последнему элементу. Прочитано о http://en.wikipedia.org/wiki/FIFO, http://www.cplusplus.com/reference/queue/queue/.
+0

Кажется хорошим вариантом. Но мы не видели очереди в классе. Нет ли другой возможности ?. У других змеиных кодов есть что-то вроде Снейка [0] .y, какая функция/структура есть ?. Благодарю. – Papafrita

+0

«[]» скобки указывают (чаще всего) использование массива. «.y» означает: записи массива относятся к типу класса или структуры, который имеет член, называемый «y». – fjf2002

+0

Не будет никакого отношения к тому, что вам нужно сохранить все координаты, занятые змеей. Прочтите о внедрении структуры данных очереди вручную, используя массив. Если ваша змея не растет, круговой буфер может быть немного более простым решением: http://en.wikipedia.org/wiki/Circular_buffer – fjf2002