|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
||||||
Змейка17.10.2010, 06:00. Показов 13564. Ответов 95
Метки нет (Все метки)
wxWidgets - вот и пошло первое написание игры. Ну относительно игры конечно. Проблема вот в чем. Нам препод показал как сделать, чтобы "змейка" двигалась. Поднастроил, чтобы она двигалась правильно. Влево - влево, вниз - вертикально вниз и т.п. Но есть проблемка. При таком коде, что соответственно:
0
|
||||||
| 17.10.2010, 06:00 | |
|
Ответы с готовыми решениями:
95
Змейка не работает Змейка. Нужен совет как доработать программу Змейка на QT C++ |
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
| 29.10.2010, 19:35 [ТС] | |
|
На картинке выделена область которой быть не должно. Итог: выходит за пределы экрана и змейка и еда.
И это не есть коммильфо, размер экрана фиксированный, это прекрасно, но все же не хочется выхода за пределы экрана абсолютно. То есть размер клиентки должен быть почти такой же как размер фрейма. Как такое прикрутить?
0
|
|
|
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
|
||||||
| 29.10.2010, 19:57 | ||||||
0
|
||||||
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
||||||
| 29.10.2010, 20:05 [ТС] | ||||||
|
rangerx, М... Не помогает. Все та же долбанная область.
0
|
||||||
|
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
|
|||||||||||
| 29.10.2010, 20:29 | |||||||||||
А так, клиентское окно плюс ко всему бедет центроваться на фрейме.
1
|
|||||||||||
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
| 29.10.2010, 20:37 [ТС] | |
|
rangerx, ммм... после этого размер клиентки стал примерно 1 на 1. То есть не айс совершенно.
0
|
|
|
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
|
|
| 29.10.2010, 20:39 | |
|
Так размер окна в конструкторе какой у тебя указан?
1
|
|
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
| 29.10.2010, 20:41 [ТС] | |
|
rangerx, wxDefaultSize. Сейчас менял на 700 на 700 - фрейм растягивается на 700 на 700, а клиентка 1 на 1
0
|
|
|
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
|
|
| 29.10.2010, 20:42 | |
|
Размер клиентки меняй как тебе нужно.
1
|
|
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
||||||
| 29.10.2010, 21:06 [ТС] | ||||||
|
rangerx, Огромное спасибо. Все шикарно работает. Теперь пожалуй можно даже оставить изменение размера.
А для разного размера так можно сделать? Т.е. оба параметра как wxDefaultSize и в констре фрейма и в констре клиентки и при этом размер клиентки всегда равен размеру фрейма, как бы его не растягивать? Да и кстати. Если мы растягиваем окно - размер фрейма программно меняется? Добавлено через 16 минут М. Почему происходит так? У нас есть две константы
Если мы подаем их в конструктор фрейма, а каждая из них -50 в конструктор клиентского окна - все гуд, кроме того, что видно серую область за клиенткой. Фиг бы с ним конечно, но как-то неэстетично...
0
|
||||||
|
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
|
|
| 29.10.2010, 21:53 | |
|
Честно говоря не совсем, понимаю что ты пытаешься сделать. То ты хочешь сделать фиксированный размер главного окна, то хочешь его ресейзить... Покажи скрин в момент выхода за пределы.
P.S. скачай wxFormBuilder и посмотри как работаю сейзеры(уже несколько раз тебе об этом говорил).
1
|
|
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
||||||
| 30.10.2010, 00:00 [ТС] | ||||||
|
rangerx, Да... Скачаю посмотрю.
Единственное, что мне хочется, чтобы программа работала корректно и дальше будет возможность ее развивать, по мере изучения wxWidgets. Так как я фактически нифига в этом еще не знаю, кроме нескольких функций, классов, которые нам говорил препод и еще нескольких которые использую в змейке. Когда был выход за пределы окна, было совсем не то. Сейчас впринципе все хорошо, кроме некоторой серой части окна. Она маленькая конечно, но все же. Хотя это тоже не суть вцелом. По поводу ресайза и фиксированного - я думаю как лучше сделать. Пока оставил фиксированный без возможности изменения. Сейчас думаю над реализацией изменения скорости движения змейки (читай тика таймера). Как это лучше будет реализовать? У меня есть две идеи - первая, забиндить увеличение/снижение скорости на две разные кнопки. Вторая - сделать менюшку, в которой выбираем скорость от 1 до 7, в зависимости от выбора в программе к значению тика прибавляется/убавляется нужное колличество. Ну и третья, которую я пока затрагивать наверное не буду - сделать это на панельке. Добавлено через 1 час 7 минут Елки палки... Не понимаю в чем проблема. Сделал такую функцию:
Хотя пробежался еще раз дебагом - при нажатии на кнопку - прыгает в обработчик. Во время игры - нет. Добавлено через 46 минут Етить. Клавиши начинают работать только после выбора меню информация, в момент игры оО
0
|
||||||
|
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
|
|||
| 30.10.2010, 00:32 | |||
1
|
|||
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
||||||
| 30.10.2010, 00:42 [ТС] | ||||||
|
rangerx, Что бы я без тебя делал! Помогло!
Ну да. Про скорость помню. Но я сделал так для начала:
0
|
||||||
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
| 30.10.2010, 02:39 [ТС] | |
Сообщение было отмечено как решение
Решение
Итак. На пару деньков я пожалуй законсервирую дальнейшее развитие этой программы. Стоит отдохнуть от нее.
Скидываю сюда экзешник и сорсы, если кому будет интересно. Огромное спасибо rangerx!
3
|
|
|
33 / 33 / 0
Регистрация: 14.11.2009
Сообщений: 137
|
|
| 30.10.2010, 19:33 | |
|
подправь немного. Иногда не поймешь, куда вести змейку - не видно.. точнее плохо видно.
Как можно заметить, красную точку вообще плохо видно)) и ещё кое-что нашел: вобщем, если жмём резко клавишу влево и вверх(возможны и другие вариации), сразу же вылетает табличка игра окончена. Врезаться, она не может, тк состоит из 3-х звеньев. Даже не знаю, как описать, чтобы можно было повторить ..
1
|
|
|
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
|
||||||||||||
| 30.10.2010, 20:10 | ||||||||||||
|
Замечания по коду(и не только):
1) У тебя практически в каждой строке комментарий... Не следует комментировать очевидные вещи. 2) По файлам ты так ничего и не разбил... Всё в куче. И MyCanvas(кстати все эти приставки "My" не мешало бы убрать и дать классам нормальные имена), и MyApp(читай функция main), и MyFrame... И самое интересное, что этот единственный файл называется minimal.cpp(?). 3) Cтроку
4) Змейка у тебя появляется на половину за пределами окна(см. скрин постом выше). Это надо исправить(исправляется элементарно...) 5) Использовать wxMessageBox для выдачи сообщений не годится(особенно это касается паузы). Используй функцию, которую я написал. Исправь там, что считаешь нужным и всё. 6) Используй короткие(типа Sn) имена только для переменных c коротким временем жизни(циклы и т.д.), для всего остального подбирай нормальные(значащие) имена. 7) Змейку не мешало бы оживить. Т.е. поставить фон какой-нибудь и т.д.(но для начала следует привести в порядок код). P.S. Какая кодировка у тебя стоит в редакторе студии? Уже все нормальнын(и не очень) IDE давно понимают UTF-8. Используй её. Добавлено через 1 минуту
2
|
||||||||||||
|
2 / 2 / 1
Регистрация: 01.05.2009
Сообщений: 25
|
||
| 30.10.2010, 20:26 | ||
|
Лечится созданием 2 переменных направления (текущее и новое). В новом храниться новое направление движения змейки, полученное от стрелок. Перед прорисовкой нового шага копируем значение из нового в текущее и перерисовываем. При нажатии стhелок проверяем: новое направление не может быть противоположно текущему.
0
|
||
|
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
|
|
| 30.10.2010, 22:13 | |
|
-Deadly-, он это сделал, тут дело не в этом.
Lavroff, Получается, что при движении змейки, например, вправо и быстром(быстрее, чем тик таймера) нажатии клавиш "вниз" и "влево", напраление движения меняется как раз на противоположное ) Т.e. проверка в SetDir выполняется, как и должна(направление-то меняется вниз, а затем влево), но т.к. после нажатия клавиши "вниз" тик таймера ещё не успел произойти и метод DoMotion не вызывался, то координаты змейки, когда идёт попытка движения влево остаются те же, что и были при движении вправо. Попробуй блокировать возможность изменения направления до того как будет сделан шаг(можно завести булеву переменную lockChangeDir и устанавливать/проверять её состояние).
1
|
|
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|||||||||
| 31.10.2010, 00:41 [ТС] | |||||||||
|
В ближайших планах: 1) Избавится от сайзеров (тупо изменить родителя клиенского окна на wxCanvas или wxPanel) и разблокировать изменение размера. 2) Ловить изменение размера методом EVT_SIZE. 3) Убрать поимку события от клавы (препод сказал, что это нехорошо, тормозит весь процесс). 4) Если мигание не уберется выбрать другой порядок отрисовки (т.е. не перерисовывать все окно, а перерисовывать прямоугольник в котором змейка + еду).
0
|
|||||||||
|
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
|
|||||||
| 31.10.2010, 02:00 | |||||||
Теперь понятна истинная причина почему ты решил использовать вектор и swap вместо того что я предложил. ![]()
![]()
1
|
|||||||
| 31.10.2010, 02:00 | |
|
Прокомментировать код игры "змейка" в QT
Игра "Змейка": чтобы змейка не съедала сама себя Змейка Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет!
За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|