|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
01.01.2012, 18:53 | #31 |
Форумчанин
Регистрация: 16.12.2009
Сообщений: 224
|
Ну, поле может быть.
Змейка похоже, только char вряд-ли подойдёт: нужно знать где в данный момент находится конкретный кусок змеи.
Люди бывают 10 типов: те, кто понимают двоичную систему счисления, и те, кто не понимают...
|
01.01.2012, 19:04 | #32 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
змейке скорее подойтет вектор точек(координат её)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
01.01.2012, 22:31 | #33 |
Форумчанин
Регистрация: 29.09.2010
Сообщений: 636
|
для змейки подойдёт std::vector<COORD>
где COORD стандартная виндузовская структура для хранений координат. поле я вообще делал без использования массива. по сути тебе поле нужно только отрисовать 1 раз в начале, а потом ты всё равно перерисовывать его не будешь. ты будешь менять только определенные точки на поле. в моём случае я задавал его парой ширина, высота: HEIGHT,WIDTH... этого вполне достаточно чтобы проверять валидность координат головы змейки... в целом все довольно просто. перемещение змейки: все значения вектора принимаются значение i+1 -го элемента (ну идея ясна). голову двигаем по направлению. хвост стираем из вектора. проверить на каждом ходу не попали ли в стену или хвост... если попали в яблоко "вбросим" новое.. вообщем все довольно банально. |
02.01.2012, 01:02 | #34 |
Форумчанин
Регистрация: 28.05.2011
Сообщений: 309
|
onewho, огромное спасибо Вам!
я понял как без перерисовки делать поле! например поле это "." , питон состоит из "8", хвост питона в точке (x,y) вытерли и записали в эту точку "." ... но почему змейка состоит только из vector <COORD> ?? как я понял питон это массив из класса примерно такого: Код:
так ?
Спеши медленно.
|
02.01.2012, 01:05 | #35 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
направление важно при движении(как меняем все координаты), но сам питон не более чем кучка точек(координат, его составляющих)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
02.01.2012, 01:12 | #36 |
Форумчанин
Регистрация: 28.05.2011
Сообщений: 309
|
по типу.. если нажата стрелочка вправо то (x+1;y+0) ??
что то не могу понять.. мне кажется питон должен хранить направление в себе, так как ему же надо в каком-то направление двигаться..
Спеши медленно.
|
02.01.2012, 02:11 | #37 |
Форумчанин
Регистрация: 29.09.2010
Сообщений: 636
|
нет разницы где хранить направление
|
02.01.2012, 02:11 | #38 |
Форумчанин
Регистрация: 16.12.2009
Сообщений: 224
|
Не нужно питону хранить направление. Ему нужно знать где он находится. Направление будет задавать игрок, когда нажмёт стрелку.
Игрок нажал кнопку -> Змейка узнала куда ей ползти -> Проверила что туда ползи можно (если нельзя - игрок проиграл) -> в начало питона добавился новый блок (голова)->закрасили хвост -> удалили последний блок питона -> ждём новой команды. можно не добавлять новую голову и удалять хвост, а менять все координаты( (x+1;y+0) )
Люди бывают 10 типов: те, кто понимают двоичную систему счисления, и те, кто не понимают...
|
02.01.2012, 08:42 | #39 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Цитата:
Дело в том, что в момент изменения направления (нажата клавиша игроком) в той точке где была голова питона возникает переход (излом) и все остальные точки питона переходят через эту точку. При этом голова питона уже может двигаться в другую сторону.. и сколько будет изменений движения - столько будет точек излома в теле питона (тело будет "перетекать" через эти точки - ну, разумеется, пока длины тела будет хватать). Как именно и где хранить эти точки перехода - не суть важно (зависит от реализации). Но их обязательно надо хранить. сказанное позволю себе проиллюстрировать рисунком (я открыл первую попавшиюся игру "змейка" онлайн и сделал скриншот..) : |
|
02.01.2012, 11:55 | #40 |
Форумчанин
Регистрация: 09.10.2010
Сообщений: 217
|
Хранить точки перелома? Зачем? Хотя если не хранить все координаты питона, а только изгибы, можно но будет больше хлопот,а выгода в памяти не существенна.
В векторе лежат все координаты "точек" питона. Важно хранить лишь последнее направление, чтобы его использовать, если игрок не нажимал кнопки. Я бы это сделал так: 1) Ожидаем нажатие, если нажатия нет, используем сохраненное направление. 2) Проверяем исход хода(конец игры, движение, движение с удлинением) и Запоминаем направления. 2.1) Конец -> выход; 2.3) Запоминаем точку для удлинения. 3.1)Если сохраненная точка для удлинения == точки конца питона-> к 4. 3.2)Иначе -> Очистить на экране последнюю точку и Удаляем из вектора последний элемент. 4) Добавляем в начало вектора новые координаты. 5) Рисуем новую точку. 6) Повтор. Для В таком случае надо хранить вектор с координатами, флаг направление и точку удлинения. Код:
Ps. Runtime >40, так что мог где-то ошибится .
Ёж птица гордая, пока не пнешь не полетит.
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Pascal движение змейки | zhenka619 | Помощь студентам | 0 | 29.12.2011 22:45 |
Обработка нажатия клавиш в TButton | mLight | Помощь студентам | 4 | 11.11.2011 20:53 |
Обработка клавиш на TListBox | Melanholly | Общие вопросы Delphi | 2 | 31.10.2011 14:06 |
Обработка событий клавиш клавиатуры | Synapse | Visual C++ | 2 | 20.10.2011 18:37 |
обработка нажатия клавиш VC++ консоль | rest | Помощь студентам | 0 | 06.10.2009 07:53 |