Дэвелопер
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений (для 886 пользователей)
|
Ответ: HP в Blitz
Дословно говоря, HP - это Health Points. А в ответах даёте линии - Health Bar!
Это так, к слову.
Я сделал примерчик, в котором есть и полоска жизней, и "сердечки" жизней.
Жизни самовосстанавливаются при бездействии.
Отнимать жизни нажатием на пробел.
Есть цветовая градация шкалы в зависимости от количества (уровня) жизней.
Исходник:

Global heroHealthMax% = 100
Global heroHealth% = heroHealthMax
Global heroLives% = 5
Global heroHealthAccum# ;для автовосстановления жизней
Graphics (400, 400)
AppTitle ("HP and HB")
;SetBuffer (BackBuffer ())
ClsColor (150,200,150)
While (Not (KeyHit(1)))
;восстановление жизней
If(heroHealth < heroHealthMax)
heroHealthAccum = heroHealthAccum+0.25
If(heroHealthAccum >= 1)
heroHealth = heroHealth+heroHealthAccum
heroHealthAccum = 0
EndIf
EndIf
;отнимание жизней
If(KeyDown (57))
heroHealth = heroHealth-1
heroHealthAccum = 0
If(heroHealth <= 0)
heroLives = heroLives-1 ;отнимаем "сердечко"
heroHealth = heroHealthMax
EndIf
EndIf
;рисуем
fnDrawHealthPoints(10,8,10)
fnDrawHealthBar(10,30,100,20)
Flip()
Cls()
Delay(50) ;простой ограничитель кадров
Wend
End
;рисование "сердечек" жизней
Function fnDrawHealthPoints(x%, y%, size%=10)
Color (130,30,130)
For k%=0 To heroLives-1
Oval (x, y, size, size)
Rect(x+size*0.25,y+size*0.8,size*0.5,size*0.5)
x = x+size*2
Next
End Function
;рисование полоски жизней
Function fnDrawHealthBar(x%, y%, w%=100, h%=20)
;рамка и подложка
Color(130,130,130)
Rect(x,y,w,h,1)
Color(50,50,50)
Rect(x-1,y-1,w+2,h+2,0)
;разные цвета в зависимости от количества жизней
If(heroHealth > heroHealthMax*0.75)
Color (0,250,0)
ElseIf(heroHealth > heroHealthMax*0.5)
Color (210,210,0)
ElseIf(heroHealth > heroHealthMax*0.25)
Color (230,0,0)
Else
If(MilliSecs () Mod 1000 < 500)
Color (250,0,0)
Else
Color (150,0,0)
EndIf
EndIf
Rect(x,y,w*heroHealth/heroHealthMax,h)
End Function
|