|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
12.10.2011, 19:59 | #1 |
Пользователь
Регистрация: 10.10.2011
Сообщений: 64
|
Создание 2d стрелялки "Замочить птичку" шаг за шагом.
Урок писался для тех кто не работал в Дэлфи но помнит Паскаль со школы.
Игра, исходники, картинки для создания: здесь Ну что, поехали. Шаг 1. Оформление формы. Запустите Дэлфи. Перед вами серая форма. Не пугайтесь точек. В програме(в экзэшке) они не видны. Вообще то птичка должна летать в синем небе поэтому измените цвет формы на синий. Для этого выберите форму( клацните по ней один раз). Слева в Инспекторе Объектов(Object Inspector) вы увидите ее свойства в виде списка параметров. Окно инспектора разделено на два столба. Левый столб - название параметра(свойства объекта), правый - поле для его редактирования или выбора возможных значений. Найдите параметр "color" и клацните на поле справо от него. Выберите синий цвет. Учтите что на выбор даются несколько разных синих цветов. Посмотрите какой синий цвет на картинках с птичкой или тучками и попытайтесь выбрать похожый. Дальше, давайте сделаем так что бы в заголовке формы было не "form1" а название игры "Замочить птичку". Найдите параметр "caption", клацните на поле справо от него ну а дальше вы поймете. Шаг 2. Размещение обьектов на форме Киньте на форму обьект "mainmenu" в любое место. Для этого подведите курсор к какому то обьекту на панели "standart". Тогда под курсором высветится его название таким образом вы найдете наш обьект. Если вы не нашли обьект на панели "standart" значит он на другой панели. Клайните один раз по обьекту. Наведите курсор в нужное место и клацните левой кнопкой опять.Что бы удалить обьект выделите его и нажмите "delite". Киньте пять обьектов "image"(рисунок). image1 по высоте разместите по середине. Остальные image киньте в верху на немножко разной высоте. Киньте прямо на середину формы "panel"(панель). Киньте прямо на эту панель "combobox"(выпадающий список) и "button"(кнопка). Киньте в низ формы еще один "panel"(панель). На эту панель киньте "label" 6 штук. Теперь вам их надо переименовать. Делается это также как и с формой. Переименуйте: label1 на Время:, label2 на 0, label3 на Очки:, label4 на 0, label5 на рекорд, label6 на 0. Названия будут написаны мелким шрифтом поэтому рекомендую его выделить. Делается так: выбираете нужнай вам label, ищете параметр "Font", клацаете на поле справа от него, тогда появится троеточие, клацаете на троеточие а дальше вы поймете. Теперь надо загрузить в каждый image картинку для этого выберите его, найдите параметр "picture", клацните справа отнего на троеточие а там уже поймете.В остальные четыре image загрузите рисунки тучек. После того как вы загрузили изображение найдите параметр "proportional" и поменяйте его значение с "false"(неправда) на"true"(правда). После этого ростяните и ли стяните каждую картинку до нужных размеров. Когда на форме появили панели вы увидели что по середине каждой из них написано ихнее название которое нам мешает. Как его убрать? Выберите панель, найдите параметр "caption" а там поймете. На кнопке которая находится на panel1 написано ее название а на нужно что бы было"Ок". Переименуйте ее спомощью параметра "caption". Сделайте panel2 зеленого цвета с помощью параметра color. Последний раз редактировалось MaTBeu; 22.10.2011 в 11:30. |
12.10.2011, 20:00 | #2 |
Пользователь
Регистрация: 10.10.2011
Сообщений: 64
|
Шаг 3. Меню.
Выберите ваш Mainmenu1(ОсновноеМеню1). Найдите параметр "items"(изделия). Клацните на поле справа от него, появится треточие. Клацните на троеточие. Справа вы увидете какой вид будет иметь ваша менюшка и там же можете переключатся между ее кнопками. Напротив "caption" напишите "Меню". Переключитесь на правое поле какогото другого параметра и вы увидете изменения. Теперь нажмите кнопку влево и вы увидите что снизу появилась еще одна кнопка. Нажмите на нее и напротив "caption" наришите "Выход". Переключитесь на правое поле другого парамтра и вы увидете изменения. Аналогично сделайте ниже кнопки "Новая игра" и "Параметры". Клацните два раза на "Выход". После этого вы переключитесь в окно редактирования текста и перед вами будет функция: Код:
Нам надо что бы после нажатия "Выход" программа выключалась. Это можно сделать несколькими способами. Я рекомендую написать halt;. Теперь нажмите F9 и Дэлфи создаст програму(экзэшку). Посмотрите что ваша кнопка работает. Когда запускается програма на до что бы перед вами был просто синий экран, надо что бы рисунков и панелей не было видно. Для этого перейдите на форму(F12) клацните два раза поней и перед вами появится окно редактированея кода с таким текстом: Код:
Дальше, у большинства обьектов есть параметр Visible(видимость) который имеет только два значения: false(неправда) и true(правда). Напишите: Visible:=false;. В итоге у вас должна выйти такая строчка: image1.Visible:=false;. Теперь нажмите F9 и вы увидите что птичку не видно. Напишите аналогичные строчки для image2,image3,image4,image5,panel1, panel2. Внимание те обьекты которые размещены на панели автоматически становятся не видимыми вместе с ней! Дэлфи упростил написания кода. Наберите только часть кода, нажмите ctrl+пробел и перед вами появится список где можно выбрать нужное слово. Если его там нет тогда добавте еще букву. По нажатию "Новая игра" все обьекты должны появится. Что вам делать? Скопируйте строчки с помощью которых вы сделали обьекты не видимыми. Переключитесь на форму(клавиша F12). Нажмите на mainmenu, нажмите на троеточие справа от items, нажмите два раза на "Новая игра" и перед вами появится: Код:
Код:
Код:
Код:
Последний раз редактировалось MaTBeu; 22.10.2011 в 11:32. |
12.10.2011, 20:01 | #3 |
Пользователь
Регистрация: 10.10.2011
Сообщений: 64
|
Шаг 4. Время и псевдо время
Дальнейшие действия происходят в функции procedure TForm1.N3Click(Sender: TObject); (Функция выполнения действий после нажатия на "Новая игра") И так наша птица летает в пространстве и во времени. Когда пройдет определенное время тогда игра закончится. Поэтому у нас сначала будет цикл по времени если точнее по псевдо времени. Давйте введем глобальную величину(тоесть пишите ее возле var который стоит перед всеми функциями) не целелого типа(real)(потому что число будет дробовое) которое будет называтся shot от слова шетчик. smile У вас должна выйти так: Код:
Код:
Последний раз редактировалось MaTBeu; 22.10.2011 в 11:33. |
12.10.2011, 20:02 | #4 |
Пользователь
Регистрация: 10.10.2011
Сообщений: 64
|
Шаг 5. Полет птицы
Добавляем глобальную величину х типа(формата) integer(целое число). х - будет горизонтальной координатой птички. Птичка то движется не только во времени но и еще по форме. Движется она с левого края формы который имеет горизонтальную координату 0 до правого который у меня имеет горизонтальную координату 800. Только птичка дошла до правого края(х=800) тогда она телепортируется( smile ) обратно на левый край(x:=0) и снова движется слево на право. Горизонтальная координата в Дэлфи называется "Left" а вертикальная "top". Птичка должна двигатся не только слева на право а еще вниз и вверх поэтому я выбрал движение по синусоиде. Короче у вас должно выйти так: Код:
Последний раз редактировалось MaTBeu; 22.10.2011 в 11:34. |
12.10.2011, 20:02 | #5 |
Пользователь
Регистрация: 10.10.2011
Сообщений: 64
|
Шаг 6. Полет тучек или полет декораций
Запустите прогу(F9) и скажите что вы перед собой видите. Вы видите как нещясная птичка снова и снова пролетает над тем же самым участком неба. Тоесть она летает по кругу. Это не красиво. Надо сделать так что бы игроку казалось что птичка летит все дальше и дальше. Для этого надо что бы тучки двигались на встречу птице(тоесть справа на лево) с меньшей скоростью. Как это сделать? Ну во первых и дураку ясно что тучки тоже летят во времени. Значит то что мы напишем будет в середине цикла по псевдо времени. Вы скажите если это движение значит мы должны написать цикл. И тут вы ошиблись. Если написать наш цикл после первого цикла тогда сначало выполнится первый цикл а уж потом второй. Тоесть сначало птичка пролетит от правого края до левого а уж только потом тучка сдвинется с места. Если перед тогда наоборот. А если внутри вложеного(внутреннего) цыкла тогда вообще полный бред начнется. Короче надо без цикла. Во первых надо ввести величины x2,x3,x4,x5 формата integer. Они будут горизонтальними координатами соответствующих image тоесть тучек. Код будем писать внутри внутренего(вложеного) цикла тоесть вот тут: Код:
(else begin x2:=800; Image2.Left:=x2; end. В итоге у вас должно выйти такое: Код:
Ой чуть не забыл если вы так сделаете тогда они собьются в одну кучу и будут лететь в месте. Перед полетом их надо по раставлять на форме в разних местах с помощью кода. Короче надо для иксов тучек после строки shot:=2000; но перед циклом присвоить начальные значения. Например: Код:
Последний раз редактировалось MaTBeu; 22.10.2011 в 11:35. |
12.10.2011, 20:03 | #6 |
Пользователь
Регистрация: 10.10.2011
Сообщений: 64
|
Шаг 7. Псевдо анимация
В Дэлфи есть обьект с помощью которого можно вставить видео без звука. Но мы этим элементом не возпользуемся. Почему узнаете позже. Мы сами сделаем анимацию. Что такое анимация? Примитивно говоря это кадры которые бысто идут друг за другом. У нас есть два рисунка: птичка подняла крылышки и птичка опустила крылишки. Если их поочередно загружать в image1 то создастся эфект как будто она действительно махает крыльями. Но вот проблема как указывать програме когда загружать одну картинку а когда другую да ище и поочередно. Выход оказался гениально прост - использовать свойства чисел. И так введите еще одну глобальную величину img формата integer. это типа от слова image. После while shot>=0 do begin но перед while (x<=800) and (shot>=0) do присвоим ей начальное значение: img:=1;. А в середине цыкла который под этой строчкой пропишем:img:=img+1;. Тоесть у нас есть величина и мы ее увиличиваем. А дальше пишем такое. Если наша величина парное число тоесть делится на два без остачи тогда мы загружаем в image1 одну картинку в противном случае - другую: Код:
Последний раз редактировалось MaTBeu; 22.10.2011 в 11:35. |
12.10.2011, 20:04 | #7 |
Пользователь
Регистрация: 10.10.2011
Сообщений: 64
|
Шаг 8. Регулировка времени или уровни сложности
Вот вы смотрите на птичку и вам нравится как она летит. Но это субьективное мнение. Для кого то это слишком медленно а для кого то - быстро. Создадим уровни сложности: "Новичок"(летает медленно), "Любитель", "Профессионал"(Летает быстро). Выберите ComboBox1 который на panel1. Найдите параметр items, клацните по полю справа, клацните по троеточию и перед вами появится окошко. Введите "Новичок", клацните Энтэр, "Любитель", клацните Энтэр, "Профессионал", клацните Ок. Каждая строка имеет свой номер(itemindex). Нумерация начинается с нуля. Найдите параметр itemindex и поставте значение 0. После этого в ComboBox1 по умолчанию выбрана первая строка(Новичок). Что бы изменять скорость игры на до изменять величину которая стоит в sleep(). Введите новую величину zad формата integer. В строчке sleep(50)вместо 50 напишите zad. Выберете ComboBox1 и два раза клацните на него. Перед вами появится функцыя выполнения действий после изменение строчки. Теперь думаем если мы выбрали первую строчку тоесть номер строчки равно 0 тогда наш zad имеет одно значение. Если номер строчки равно 1 тогда наш zad имеет другое значение. А если 2 тогда третье. Короче вот так: Код:
Код:
Последний раз редактировалось MaTBeu; 22.10.2011 в 11:36. |
12.10.2011, 20:04 | #8 |
Пользователь
Регистрация: 10.10.2011
Сообщений: 64
|
Шаг 9. Попадание - очки
Думаю вы уже догадались что надо ввести новую величину. Правильно. Введите ochk формата integer. Только запускается програма(создается форма) как количество очков должно выставится на ноль. Вот и идите в эту функцыю(два раз клацните по форме) и напишитеchk:=0;. Теперь думаем что такое попадание? Это когда наш курсор находится на птичке(image1) и мы нажымаем на нее(ведь что бы выстрелить надо нажать на левую клавишу мышки). Тогда думаю что вы догадались второй раз: нам нужна функция выполнения действий после нажатия на image1. Для этого выберите его и нажмите два раза. Дальнейшые действия будут происходить в: Код:
Добавлено (11.10.2011, 15:46) --------------------------------------------- Шаг 10. Попадание - рекорд Значение рекорда у нас должно где то хранится. Экзешка это не записная книжка там нельзя хранить. Хранить надо в каком то файлике. Поэтому создайте через блокнот 1.txt инапишите туда "0". Файлик вложите в папку с игрой. Добавте к глобальным величинам следущие: Код:
Все прога готова. Если вам понравилось работать в Дєлфи тогда пишите и мы с вами попробуем сделать 2d платформер. Удачи вам игроделы. Последний раз редактировалось Beermonza; 24.10.2011 в 15:24. |
14.10.2011, 15:56 | #9 | |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Быстренько исправьте ошибки в тексте. Оформите по-человечески с выделением разделов. Для кода есть тэг "CODE", значок "#" в редакторе сообщений.
Цитата:
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
|
15.10.2011, 15:40 | #10 |
Пользователь
Регистрация: 10.10.2011
Сообщений: 64
|
|
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Поясните мне этот код шаг за шагом | kroatoani | Общие вопросы Delphi | 5 | 21.09.2010 14:21 |
Как обойти "преобразование типа из "string" в "float" невозможно" | lexluter1988 | Помощь студентам | 1 | 07.08.2010 12:23 |
"ОКРВВЕРХ", "ОКР", "ЕСЛИ". Как бы их связать. | Каравай | Microsoft Office Excel | 13 | 17.02.2010 09:53 |
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" | aleksei78 | Microsoft Office Excel | 13 | 25.08.2009 12:04 |