|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
||||||
Змейка17.10.2010, 06:00. Показов 13689. Ответов 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
Игра "Змейка": чтобы змейка не съедала сама себя Змейка Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе.
Самым главным критерием для меня было создание паролей, в котором отсутствуют знаки: | 1 l I
Обработка содержит реквизиты:
-. . .
|
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store.
И так:
1. Скачиваем с. . .
|
Программное добавление префикса в нумерацию документов
Maks 27.10.2026
Реализация из решения ниже выполнена в самописной конфигурации на БСП (помощь начинающему коллеге).
Задача:
Программно добавить префикс в нумерацию документов.
Решение:
В модуле объекта. . .
|
После закрытия оутлука продолжает висеть процесс в диспетчере задач
Maks 27.10.2026
С недавнего времени в продакшене возникла проблема: при закрытии оутлука в диспетчере задач продолжал висеть процесс outlook. exe. Проблема возникла после установки MS Office 2021 LTSC на машинах, под. . .
|
|
Baragoz - DPS/HPS бот для WoW 3.3.5a, многоязычный
AmbA 26.10.2026
Хотите ещё ботов? У меня есть один! А я пока отдохну от него.
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=12062&stc=1&d=1793007952
Инструкция внутри.
https:/ / youtu. be/ VpfFZSUDGnQ. . .
|
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности.
Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
|
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version
Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
|
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер
На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
|