|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
30.12.2011, 14:45 | #1 |
Форумчанин
Регистрация: 28.05.2011
Сообщений: 309
|
Змейка. Движение змейки. Обработка клавиш.
Всем доброго времени суток и с Наступающим!
Пишу игру змейку. Сейчас хочу написать ту часть кода, которая отвечает за постоянное движение змейки, и при нажатии на стрелочки питон менял направление. Не могу понять как это все реализовать.. Как сделать чтобы каждые 0.5 сек символ(питон) передвигался ? И чтобы когда происходило нажатие он повернул в нужном направление и продолжил движение?
Спеши медленно.
|
30.12.2011, 15:59 | #2 |
Пользователь
Регистрация: 10.11.2010
Сообщений: 59
|
На вход у тебя код нажатой клавиши (стрелки), дальше распознаешь его (в какую сторону надо идти) и сдвигаешься.
Всё запихиваешь в один цикл в while и двигаешься, а задержку с помощью функций Delay или Sleep можно реализовать. |
31.12.2011, 01:27 | #3 |
Форумчанин
Регистрация: 28.05.2011
Сообщений: 309
|
не могу понять как надо сделать чтобы питон передвигался, может отрисовывать каждый раз в цикле поле с новыми координатами питона ? но как тогда сделать, чтобы питон двигался в определенном направлении ?
нажатие клавиш написал.. Код:
Спеши медленно.
|
31.12.2011, 02:35 | #4 |
Форумчанин
Регистрация: 16.12.2009
Сообщений: 224
|
Ну да, перерисовывать. Храни поле для змейки в виде двумерного массива. В каждой ячейке единица (змейка ползёт по этой ячейке) или нолик (змейки здесь нет). Так же, нужно помнить координаты головы и хвоста: 2 переменных.
Когда стрелку нажали - высчитаваем новую голову, отмечаем её в матрице. Потом удаляем хвост из матрицы (значение в ноль) и высчитываем новый хвост. Перерисовываем это всё дело.
Люди бывают 10 типов: те, кто понимают двоичную систему счисления, и те, кто не понимают...
|
31.12.2011, 03:06 | #5 |
Форумчанин
Регистрация: 16.12.2009
Сообщений: 224
|
Да, интереснее реализовать питона в виде списка. Тогда каждый элемент будет указывать на следующий и помнить свои координаты. Хвост известен, голова известна. Просмотреть все элементы и сдвинуть их в зависимости от координат предыдущего. Потом проверить на пересечения и т.д. В общем, задача будет решаться проще)
Люди бывают 10 типов: те, кто понимают двоичную систему счисления, и те, кто не понимают...
|
31.12.2011, 12:07 | #6 |
Форумчанин
Регистрация: 28.05.2011
Сообщений: 309
|
Спасибо!
хм.. а как это в виде списка?
Спеши медленно.
|
31.12.2011, 12:39 | #7 |
Форумчанин
Регистрация: 29.09.2010
Сообщений: 636
|
если пишешь на с++ советую посмотреть в сторону vector
|
31.12.2011, 12:45 | #8 |
Форумчанин
Регистрация: 16.12.2009
Сообщений: 224
|
Либо так: http://ru.wikipedia.org/wiki/%D0%A1%...8%D0%BA%D0%B0)
Каждый элемент - структура, которая хранит свои данные и указатель на следующий элемент. Либо, как написал onewho, с помощью уже готового vector.
Люди бывают 10 типов: те, кто понимают двоичную систему счисления, и те, кто не понимают...
|
31.12.2011, 13:32 | #9 |
Форумчанин
Регистрация: 28.05.2011
Сообщений: 309
|
Спасибо, господа!
Наверное буду пробовать без vector'a, немного позже разберусь с vector'om. Вот только мне не понятно как должно осуществляться обработка клавиш. А то, что у меня есть, оно ждет нажатия клавиши. а мне надо чтобы оно двигало к примеру '*' в одном направление постоянно, а не ждало нажатия клавиши, и чтобы когда была нажата клавиша, то реагировало. думаю сначала отдельно написать программку которая просто передвигает символ и реагирует не стрелочки, потом уже, поняв как это все работает делать змейку. вот нашел похожий пост, но не могу разобрать его.. http://programmersforum.ru/showthrea...t=%E8%E3%F0%E0
Спеши медленно.
|
31.12.2011, 17:26 | #10 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Вот я как раз на днях озадачился проблемой ввода данных от пользователя.
Разработал миниатюрный механизм... но пока ещё он сыроват. Нужно дорабатывать. Но зато он иллюстрирует саму идею того, как можно обрабатывать клавиатуру. (вообще то, по такому же принципу можно обработать и мышку, и само окошко, но это пока только в перспективе, ибо мне пока без надобности) Смысл идеи: создать отдельный механизм, отвечающий за клавиатуру, мышку, и окошко, и работать с ним. Особенности механизма: он тестировался только в консольном приложении, под Windows. Здесь сам механизм: http://liveworkspace.org/code/b85f46...8e93ba1015d992 Здесь материал, откуда была взята сама идея механизма: http://vsokovikov.narod.ru/New_MSDN_...le/conevnt.htm Код:
Последний раз редактировалось _Bers; 31.12.2011 в 17:30. |
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
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 |