Хвост змейки - Форум Игроделов
Вс, 05 Май 2024, 00:32 
 
Приветствую Вас Гость Главная | Регистрация | Вход
Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум Игроделов » ПРОГРАММИРОВАНИЕ » С++ » Хвост змейки (Хвост змейки)
Хвост змейки
voodooДата: Пн, 23 Дек 2013, 01:38 | Сообщение # 1
Нет аватара
 
Сообщений: 122
Награды: 7
Репутация: 54
Статус: Offline
Всем привет! Прошу вашей помощи, начал писать змейку на c, всё было хорошо, пока не встал вопрос насчёт хвоста, алгоритм в голове есть, но не могу это программно закрепить.

Вот фрагмент кода, если вас не затруднит, напишите для хвоста функцию, отталкиваясь от этого кода:

Код
#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <windows.h>
#include <ctime>
   
using namespace std;
   
enum keys
{
     Top = 119,
     Down = 115,
     Left = 97,
     Right = 100
};
   
int move_Y(int pos_Y, int key_pressed)
{
     switch (key_pressed)
     {
         case Top:
             --pos_Y;
             break;
         case Down:
             ++pos_Y;
             break;
     }
   
     return pos_Y;
}
   
int move_X(int pos_X, int key_pressed)
{
     switch (key_pressed)
     {
         case Left:
             --pos_X;
             break;
         case Right:
             ++pos_X;
             break;
     }
   
     return pos_X;
}
   
int main()
{
     COORD cursor = { 0, 0 };
   
     const int width = 30;
     const int height = 20;
   
     char plane[width][height] = {0};
   
     int pos_Y = height / 2;
     int pos_X = 0;
   
     int key_pressed = Right;
   
     while (true)
     {
         Sleep(100);
   
         if (_kbhit() == true)
         {
             key_pressed = _getch();
         }
   
         pos_Y = move_Y(pos_Y, key_pressed);
         pos_X = move_X(pos_X, key_pressed);
   
         SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), cursor);
   
         for (int i = 0; i < height; ++i)
         {
             for (int j = 0; j < width; ++j)
             {
                 plane[j][i] = 0;
   
                 plane[pos_X][pos_Y] = 1;
             }
         }
   
         for (int i = 0; i < height; ++i)
         {
             for (int j = 0; j < width; ++j)
             {
                 cout << plane[j][i];
             }
             cout << endl;
         }
     }
   
     return 0;
}
 
СообщениеВсем привет! Прошу вашей помощи, начал писать змейку на c, всё было хорошо, пока не встал вопрос насчёт хвоста, алгоритм в голове есть, но не могу это программно закрепить.

Вот фрагмент кода, если вас не затруднит, напишите для хвоста функцию, отталкиваясь от этого кода:

Код
#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <windows.h>
#include <ctime>
   
using namespace std;
   
enum keys
{
     Top = 119,
     Down = 115,
     Left = 97,
     Right = 100
};
   
int move_Y(int pos_Y, int key_pressed)
{
     switch (key_pressed)
     {
         case Top:
             --pos_Y;
             break;
         case Down:
             ++pos_Y;
             break;
     }
   
     return pos_Y;
}
   
int move_X(int pos_X, int key_pressed)
{
     switch (key_pressed)
     {
         case Left:
             --pos_X;
             break;
         case Right:
             ++pos_X;
             break;
     }
   
     return pos_X;
}
   
int main()
{
     COORD cursor = { 0, 0 };
   
     const int width = 30;
     const int height = 20;
   
     char plane[width][height] = {0};
   
     int pos_Y = height / 2;
     int pos_X = 0;
   
     int key_pressed = Right;
   
     while (true)
     {
         Sleep(100);
   
         if (_kbhit() == true)
         {
             key_pressed = _getch();
         }
   
         pos_Y = move_Y(pos_Y, key_pressed);
         pos_X = move_X(pos_X, key_pressed);
   
         SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), cursor);
   
         for (int i = 0; i < height; ++i)
         {
             for (int j = 0; j < width; ++j)
             {
                 plane[j][i] = 0;
   
                 plane[pos_X][pos_Y] = 1;
             }
         }
   
         for (int i = 0; i < height; ++i)
         {
             for (int j = 0; j < width; ++j)
             {
                 cout << plane[j][i];
             }
             cout << endl;
         }
     }
   
     return 0;
}

Автор - voodoo
Дата добавления - 23 Дек 2013 в 01:38
seamanДата: Пн, 30 Дек 2013, 12:31 | Сообщение # 2
Гуру
 
Сообщений: 1748
Награды: 10
Репутация: 660
Статус: Offline
Нужно не для хвоста функцию писать, а для всего тела. Т.е. нужно сохранять в массиве позиции каждого символа тела. Для чего? Чтобы искать пересечение с собой. В натуральной змейке, если она себя "кусает" - игра заканчивается.
Ну а если есть координаты всех частей тела - стирание хвоста будет простым - выводишь в позицию последнего символа пробел и все.
Чтобы не переписывать весь массив при движении змеи,- лучше подумать о какой-то другой структуре, а не о просто массиве. Типа о связном списке.
 
СообщениеНужно не для хвоста функцию писать, а для всего тела. Т.е. нужно сохранять в массиве позиции каждого символа тела. Для чего? Чтобы искать пересечение с собой. В натуральной змейке, если она себя "кусает" - игра заканчивается.
Ну а если есть координаты всех частей тела - стирание хвоста будет простым - выводишь в позицию последнего символа пробел и все.
Чтобы не переписывать весь массив при движении змеи,- лучше подумать о какой-то другой структуре, а не о просто массиве. Типа о связном списке.

Автор - seaman
Дата добавления - 30 Дек 2013 в 12:31
Форум Игроделов » ПРОГРАММИРОВАНИЕ » С++ » Хвост змейки (Хвост змейки)
  • Страница 1 из 1
  • 1
Поиск:
Загрузка...

Game Creating CommUnity © 2009 - 2024