Тема: HP в Blitz
Показать сообщение отдельно
Старый 25.07.2011, 09:02   #39
Жека
Дэвелопер
 
Регистрация: 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
Миниатюры
Нажмите на изображение для увеличения
Название: hp_hb.png
Просмотров: 998
Размер:	5.6 Кб
ID:	14482  
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
LLI.T.A.L.K.E.R. (25.07.2011)