Часть 7. Пиф паф!

Ну что ж, бегать и крутиться это весело, но пора и пострелять.
SuperStrict
Global gW:Int=800, gH:Int=600
Graphics gW,gH
SetClsColor 255,255,255
SetLineWidth 2
Type TPlayer
 Field x:Float, y:Float, speed:Float, angle:Float
 
 Function Create:TPlayer(_x:Float,_y:Float)
 player:TPlayer = New TPlayer
 player.x=_x
 player.y=_y
 Return player
 End Function
 
 Method update()
 x:+(KeyDown(KEY_D)-KeyDown(KEY_A))*speed
 y:+(KeyDown(KEY_S)-KeyDown(KEY_W))*speed
 If KeyDown(KEY_LSHIFT) 
 speed=6
 Else
 speed=4
 EndIf
 angle=ATan2(MouseY()-y,MouseX()-x)
 If MouseDown(1) TBullet.Create(x+Cos(angle)*16, y+16*Sin(angle), angle)
 End Method
 
 Method draw()
 SetColor 122,122,255
 DrawOval x-16,y-16,32,32
 SetColor 0,0,0
 DrawLine x,y,x+15*Cos(angle),y+15*Sin(angle)
 SetColor 255,255,255
 End Method
 
End Type
Type TBullet
 Field x:Float, y:Float, angle:Float
 Function Create(x:Float,y:Float,angle:Float)
 Local bullet:TBullet = New TBullet
 bullet.x=x
 bullet.y=y
 bullet.angle=angle
 bullets.AddLast(bullet)
 End Function
 Function gupdate()
 For Local bullet:TBullet = EachIn bullets
 bullet.update()
 bullet.draw()
 Next
 End Function
 Method update()
 x:+Cos(angle)*10
 y:+Sin(angle)*10
 End Method 
 Method draw()
 SetColor 0,0,0
 DrawOval x-4,y-4,8,8
 SetColor 255,255,255
 End Method
End Type
Global player:TPlayer=TPlayer.Create(gW/2,gH/2),bullets:TList = New TList

While Not KeyDown(KEY_ESCAPE)
player.update()
player.draw()
TBullet.gupdate()
Flip(1)
Cls()
Wend
Мы придерживаемся ООП стиля и это именно то, как я себе его представляю в BlitzMAX. Теперь, разберемся как же это работает. Нам нужен новый тип "TBullet". У нашей пули есть 3 характеристики - x,y,angle - координаты и угол направления. Так же, нам нужны 2 функции и 2 метода. Функция Create() создает нашу пулю(такой же принцип как и создание игрок), и добавляет его в bullets - лист. "TList" - ещё один тип данных в BlitzMAX. Он похож на vector из си подобных языков и нужен нам для хранения данных, в основном, когда неизвестно количество этих данных. Затем функция gupdate(global update) - ее мы используем для обновления всех наших пуль. А метода update() и и draw() очень схожи с игроком, нового здесь ничего нету. Однако у нашей системы есть 2 минуса: 1). Пули не удаляются 2). Пули создаются слишком быстро Эти пункты мы разберем немного позже, после того как создадим живые мишени для наших пуль.

Комментариев нет:

Отправить комментарий