|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
02.09.2008, 10:11 | #21 |
Участник клуба
Регистрация: 12.08.2008
Сообщений: 1,977
|
продолжаем
В дальнейшем все построения и расчеты будем делать в привязке к этим пяти const (пятая - это Ycenter -думаю понятно что это).
XL, XR - координаты по Х ракеток. Они также неизменные. Зачем все это? Представьте, что вам надо изменить размеры корта (пришли большие тетеньки поиграть) или переместить в другое место (оказывается скоростная трасса Москва-СанктПетербург как раз пройдет через ваш корт). Тогда по всей программе вам придется изменять множество значений и не факт, что вы не пропустите чего-то. В нашем же случае достаточно изменить значения в const и все изменения в программе пройдут пропорционально. Переменные. Пока нам нужны будут: x,y -текущие координаты курсора формы (не путайте с курсором мыши).К ним привязаны координаты мяча. rX, yLR - переменные координат ракеток. В них будут находиться координаты или левой, или правой ракеток. dx,dy,yr - приращения к координатам, понадобятся дальше для движения. countL,countR - в них будем хранить счет игры. pen_color, brush_color - цвет пера и кисти. На Canvas рисуется инструментами PEN(перо) для рисования линий фигур и BRUSH(кисть) - цвет заливки фигур или фон для текста. Теперь программа. В процедуре FormActivate задаем начальное положение - ракетки посредине, мяч - слева посредине. Так как ракетки и мяч - это объекты, которые будут двигаться, то для рисования их пишем отдельно процедуры рисования Raket и Ball. Параметры в них указаны формально, т.е. они пока ничего не значат. Фактически эти процедуры - это шаблоны. По необходимости в программе мы вызываем эти шаблоны (сколь угодно раз и в любом месте программы), задаем необходимые значения переменным (формальным значениям присваиваем ФАКТИЧЕСКИЕ) и процедура рисует нам то, что нужно. То же самое с процедурой Info - для вывода табло счета. И теперь в процедуре FormPaint c помощью методов графических примитивов объекта TCanvas и созданных нами процедур рисуется игровое поле с неоходимыми атрибутами (мяч, ракетки). Пока все - рисуем. Дальше разберемся как это все можно двигать.
И не сомневайся даже ... отдых - кайф, работа - лажа!
Последний раз редактировалось Beermonza; 28.10.2011 в 15:44. |
02.09.2008, 15:34 | #22 |
Участник клуба
Регистрация: 12.08.2008
Сообщений: 1,977
|
следующее продолжение
Попробуем оживить нашу игру. У нас будут три движущихся объекта - мяч и ракетки. Существуют различные методы создания эффекта движения. Но принцип в общем то один - сначала нужно уничтожить существующий объект (рисунок), а затем вывести его в другом месте, т.е. дать координатам объекта некое приращение. В зависимости от вида приращения к координатам можно получить различные виды перемещения, от простого прямолинейного перемещения до сложного - под углом, по кругу или эллипсу,
или по сложной кривой. Уничтожить объект можно различными методами - нарисовать поверх объекта прямоугольник размером равным объекту и цветом фона (в случае простого однотонного фона), нарисовать сам объект на том же месте, но задав цвет пера и кисти равным цвету фона (опять же, если фон однотонный). При сложном фоне нужно запоминать участок фона, куда будет выводиться рисунок, а потом для уничтожения рисунка накладывать запомненный фон. И так на каждом шаге перемещения. Мы воспользуемся вторым методом - перерисовка объекта цветом фона. В процедурах Move_R и Move_B рисуем объект на том же месте, задав цвета пера и кисти равными цвету фона. Объекты становятся невидимыми (сливаются с фоном, но все таки продолжают существовать на форме. Т.е. фактического уничтожения объекта нет - он просто становится невидимым в этом месте). Далее даем приращение координатам. Для ракетки достаточно одного по оси Y - yr, а для мяча dx и dy. Тогда он будет двигаться под углом. Опять же, процедуры Move_R и Move_B - это только шаблоны. Для создания движения воспользуемся обработчиком события нажатия клавиши FormKeyDown. Используем клавиши "стрелка вверх" (код 38) и "стрелка вниз" (код 40) для перемещения ракетки и клавишу "пробел" (код 32) для перемещения мяча. Создайте обработчик и запишите в него следующий код : Код:
Введите var i : byte; Код:
И не сомневайся даже ... отдых - кайф, работа - лажа!
Последний раз редактировалось Beermonza; 28.10.2011 в 15:49. |
02.09.2008, 15:40 | #23 |
Участник клуба
Регистрация: 12.08.2008
Сообщений: 1,977
|
окончание
Итак, мы узнали как можно двигать объекты. Сейчас постараемся применить это на практике в программе.
Стратегия игры следующая - после подачи (клавиша "пробел") клавишами UP и DOWN перемещаем ракетку (ту к которой движется мяч), чтобы "отбить" мяч (мяч попадает в ракетку). При попадании - мяч движется в противоположную сторону и управление ракеткой переходит на ту к которой опять движется мяч. От боковых линий мяч отскакивает, меняя направление движения на противоположное. Если мяч не попал в ракетку - проигрывается очко и подача переходит к выигравшей стороне. Для управления движения мячом используем таймер Timer1. При каждом срабатывании таймера мяч перемещается на один шаг (dx и dy). В промежутках между срабатыванием таймера будем управлять движением ракеток, анализировать позицию и выводить информацию о счете. Обратите внимание на кое какие изменения в переменных. Я ввел для каждой ракетки свою переменную координат по оси Y - yL и yR (xL и xR - const). Переменным rX и rY будем, по необходимости присваивать координаты левой или правой ракетки. dx и dy - приращения координат для мяча, db - еще одна дополнительная переменная приращения для мяча. Когда выигрывается очко, создадим небольшой эффект мигающего мяча. Там она и понадобится. Переменная приращения координат по-Y для ракеток названа - dr. Все дальнейшие подробные пояснения смотрите в коде в комментариях. Игра получилась простой как по коду так и по алгоритму, на уровне древнего тенниса из приставок, хотя и не в таком черно-белом квадратном формате. В принципе данный код можно использовать, как шаблон и на ее основании развивать игру дальше, вводя какие-то новые элементы и алгоритмы.
И не сомневайся даже ... отдых - кайф, работа - лажа!
Последний раз редактировалось Beermonza; 28.10.2011 в 15:55. |
08.02.2010, 03:08 | #24 |
Пользователь
Регистрация: 04.02.2010
Сообщений: 50
|
Люди, а исходника тенниса на Билнере ни у кого нету ?
Я не волшебник.. я только учусь
|
08.02.2010, 10:11 | #25 |
Участник клуба
Регистрация: 12.08.2008
Сообщений: 1,977
|
To romec1
Что ВЫ имеете ввиду под исходником на Билдере? Здесь на форуме есть несколько игр типа Теннис - пройдитесь поиском.
И не сомневайся даже ... отдых - кайф, работа - лажа!
|
08.02.2010, 11:55 | #26 |
PHP, Delphi
Форумчанин
Регистрация: 07.05.2008
Сообщений: 388
|
Добавил своего кода Удобный выход по Esc:
Код:
Мыши плакали, кололись, но продолжали жрать кактус...
мои проекты |
28.10.2011, 01:04 | #27 |
Пользователь
Регистрация: 28.10.2011
Сообщений: 14
|
это все конечно интересно, но слишком просто... вот пытаюсь сейчас сделать волейбол при помощи DelphiX и столкнулся с проблемой полета мяча, он вообще ну никак не хочет летать по всему экрану...полет того же шарика на обычной форме описан в инете и проблем нет, но в DXDraw правила несколько иные и ничего не получается, мяч летает туда-сюда только по диагонали....может поможет кто с проблемой? (((
|
28.10.2011, 07:13 | #28 |
personality
Старожил
Регистрация: 28.04.2009
Сообщений: 2,886
|
Чтобы помочь с проблемой, надо её локализовать, а мы никак этого не сможем, мы не хакИры, чтобы со своего компьютера залезть в Ваш и смотреть код, Вам надо его закинуть сюда на форум, вложением, в архиве. Надо указать, где, по-Вашему, может быть источник проблемы, а то копать-разбирать чужой код мало кто захочет, а так Вы разительно упросите работу по "помоганию Вам" и впредь, имейте это, пожалуйста, в виду.
А по поводу слишком просто - тут каждый полуторный (сиречь 75%) хочет написать игру и глохнет за пару месяцев, сделав не так уж и много, так что постарайтесь не тянуть, и делайте простое, быстрее и вероятнее закончите, а вот потом уж занимайтесь сложным, это просто совет "бывалого" )) |
28.10.2011, 19:05 | #29 |
Пользователь
Регистрация: 28.10.2011
Сообщений: 14
|
да с простыми вещами проблем мало....а вот с DelphiX сутки уже мучаюсь чтобы движение мяча описать в DoMove
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Доделать браузерную игру | Beliar | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 1 | 31.07.2008 19:24 |
Доделать браузерную игру. | Beliar | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 1 | 31.07.2008 15:07 |
Зацените игру | snake-as | Софт | 3 | 08.01.2008 00:16 |
Ищу игру | PAVEL315 | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 10 | 20.04.2007 12:13 |