Показать сообщение отдельно
Старый 16.10.2007, 21:31   #7
Данил
Модератор
 
Аватар для Данил
 
Регистрация: 11.07.2007
Сообщений: 2,910
Написано 686 полезных сообщений
(для 1,694 пользователей)
Восклицание Re: Создаём свой Crimsonland.

Приступаем. Туториал будет разделен на 7 частей.

ЧАСТЬ 1. Инициализация мира.
ЧАСТЬ 2. Загрузка медиа.
ЧАСТЬ 3. Создания типов, переменных, функций, необходимых для работы игры.
ЧАСТЬ 4. Создания типов для игры
ЧАСТЬ 5. Создание обновления для объектов.
ЧАСТЬ 6. Создание меню.
ЧАСТЬ 7.Цикл для игры.

Первые части и последнии будут легкие. Самая сложная - 5. Так.
Приступаем...



ЧАСТЬ 1. Инициализация мира.

Вначале давайте подумаем, о чем будет наша игра.
Сделаем давайте мы безумную экшн-мясо-кровища-шутер.
По экрану будет бегать чел. Чел этот будет из автомата или из дробовика крошить монстров. Будут декалитры крови. Круто? ;)

Ну. начнеим писать код. Создадим новый файл - file => new. Создали? сохраним его в папку Crimsonland2 (предварительо создав ее ;) ).

Для начала нужно задать расширение экрана. Хранить значения мы будет в константах height , width. Для теста возьмем 1024х768. Пишем:

[blitz]
'ЧАСТЬ 1. Инициализация мира.

'======== КОНСТАНТЫ
Const width=1024 , height=768 'Константы расширения
'======== УСТАНОВКА ИГРЫ
Graphics width,height,32 'Ставим настройки.
[/blitz]

Все. Теперь игра уже представляет собой что-то. Круто? думаю ,пока нет. ;)


ЧАСТЬ 2. Загрузка медиа.


Так. для начала сохраните у себя на компе эти картинки:

Под названием 1.jpg и переместим в папку игры : CrimsonLand2/media/1.jpg . Это у нас будет текстура земли в игре.

Под названием 1.png и переместим в папку игры : CrimsonLand2/media/1.png . Главный герой.

Под названием blood.png и переместим в папку игры : CrimsonLand2/media/blood.png . Кровища для игры.

Под названием bulletPistol.png и переместим в папку игры : CrimsonLand2/media/bulletPistol.png. Пуля.

Под названием button.png и переместим в папку игры : CrimsonLand2/media/Button/button.png. Кнопка.

Под названием buttondown.png и переместим в папку игры : CrimsonLand2/media/Button/buttondown.png. Когда наводим указатель на кнопку.

Под названием buttonexit.png и переместим в папку игры : CrimsonLand2/media/Button/buttonexit.png.

Под названием buttonexitdown.png и переместим в папку игры : CrimsonLand2/media/Button/buttonexitdown.png. Когда наводим указатель на кнопку.

Под названием monster.png и переместим в папку игры : CrimsonLand2/media/monster/monster.png .

Так. все медиа мы вроде загрузили. Сейчас напишем код ,который бы все это загружал...

[blitz]
Global Fonimage = LoadImage ("Media/1.jpg") 'Загружаем текстуру для игры.

Global BulletImage = LoadImage ("Media/bulletPistol.png") 'Загружаем картинку пули.
MidHandleImage BulletImage 'Координаты картинки монстра по центру.

Global PlayerImage = LoadAnimImage ("Media/1.png",68,40,0,8) 'Загружаем картинку для главного игрока.
MidHandleImage PlayerImage 'Делаем координаты картинки по центру.

Global MonsterImage = LoadAnimImage ("Media/Monster/1.png",100,50,0,20) 'Загрузка картинки монстра.
MidHandleImage MonsterImage 'Координаты картинки монстра по центру.

Global BloodImage = LoadImage ("Media/Blood.png")
MidHandleImage BloodImage

Global Button = LoadImage ("Media/Button/button.png") 'Кнопка для начала новый игры.
Global ButtonDown = LoadImage ("Media/Button/buttondown.png")
MidHandleImage Button
MidHandleImage ButtonDown


Global ButtonExit = LoadImage ("Media/Button/buttonexit.png") 'Кнопка для начала новый игры.
Global ButtonExitDown = LoadImage ("Media/Button/buttonexitdown.png")
MidHandleImage ButtonExit
MidHandleImage ButtonExitDown


Global SMonster:TList=New TList
Global SPlayer:TList=New TList 'Листы для объектов.
Global SBullet:TList=New TList
Global SBlood:TList=New TList

[/blitz]

Global - объявляет новую переменную.
LoadImage - загружает картинку.
MidHandleImage - координаты картинки по центру.
TList - листы, списки, в которых будут содержатся данные об наших объектах.

Загрузили в нашу игру мы медиа. Что дальше?

ЧАСТЬ 3. Создания типов, переменных, функций, необходимых для работы игры.


А дальше у нас идет создание необходимого.

[blitz]
Global TipGame 'Для того, чтобы можно было понять, что сейчас происходит. 0- меню. 1- игра.
Global Level = 1000 'Уровень
Global time
Global a
[/blitz]

Объявляем переменные.

[blitz]
'======== ДЛЯ УПРАВЛЕНИЯ СПИСКАМИ
Function UpdateEntities( list:TList )
For Local entity:TEntity=EachIn list
entity.Update
Next
End Function

'======== ТИП ДЛЯ РАБОТЫ С ДРУГИМИ ТИПАМИ
'Чтобы можно было работать с другими типами, необходим этот...
Type TEntity
Field link:TLink
Method Remove()
link.Remove
Sila:-1
End Method
Method AddLast( list:TList )
link=list.AddLast( Self )
End Method
Method Update() Abstract
End Type
[/blitz]

Можно сказать, функция для обновления объектов в списке, а тип для работы функции... вроде...



[blitz]
Function Dn_DrawImage (image, x#, y#, rotat#,level# ) 'Рисуем картинку через функцию.
SetBlend Alphablend
SetRotation rotat
SetAlpha level
DrawImage image, x, y
End Function

Function Dn_DrawAnimImage (image, x#, y#, rotat#,level#, f ) 'Рисуем картинку через функцию.
SetBlend Alphablend
SetRotation rotat
SetAlpha level
DrawImage image, x, y, f
End Function
[/blitz]

Две функции для отрисовки изображений.
Dn_DrawImage - для обычных картинок.
image
x - положение
y - положение
rotat - поворот картинки
level - прозрачность.

Dn_DrawAnimImage - для анимационных картинок.
f - номер кадра.


[blitz]
'======== ОПРЕДЕЛИТЬ УГОЛ МЕЖДУ ТОЧКАМИ
Function Angle!(x0!,y0!,x1!,y1!)
Return ATan2(y1-y0,x1-x0)
End Function
[/blitz]

Функция для определения угла между двумя точками.


Так. завтра у нас будет две части. Самых сложных....
(Offline)
 
Ответить с цитированием