PDA

Просмотр полной версии : Интересная задачка!



Колядин Максим
24.01.2007, 01:50
О..о. Задача очень-очень запутана (для меня). Вот её условие.

-Написать программу индикатора жизней героя с регенерацией. Индикатор должен выглядеть например так:
HP 30/100 (далее кубики -индикатор жизней (#219))
Где HP - переменная типа longint. В программе, значения nHP (Var nHP: real - HP сейчас, в нашем случае это 30) и HP (максимальное HP? в нашем случае это 100) должны вводится вручню. Переменная temp (Var temp: real) - скорость восстановления HP (регенерация). Причём если nHP<30% от HP, то кубики (вместе, они образуют полосу жизней) принимают красную окраску, меньше 60% желтый цвет, иначе зеленый. Перемення L (Var L: string;) - это и есть строка содержащая 20 кубиков;)
___________

Я всё сдедал, но не могу разобраться со строкой из кубиков. А именно, если у меня максимальный HP - 1000 - то она у меня будет состоять из 128 кубиков, если HP=10 - то из 5-ти, и т. д. А в условии сказано, что при любом значении HP, длинна индикатора жизней = 20. Вот код


uses crt;
var
{bmp}
don : integer; { праметр цикла while }
en : integer; { праметр цикла while }
hpreg : longint; { очки регенерации }
c : integer; { параметр приёма цвета }
HP : longint; {Health Points - общие жизни }
temp : longint; { скорость}
nHp : real; { now HP - жизней сейчас}
li,l : string; { строка из кубиков}
rhp,yhp : real; {yllow HP, red HP}

procedure udar;
begin

c:=2;
if (nhp/hp)<yhp then c:=14;
if (nhp/hp)<rhp then c:=4;
don:=round(nhp);
textcolor(c);
en:=0; { процедура меняет цвет }
li:='';
while don>=en do begin
li:=li+l;
inc(en,2);
end;
end;

procedure show_hp;
begin
clrscr;
textcolor(15);
write('HP ');
textcolor(c);
write(round(nhp));
textcolor(15);
write('/'); { отображение HP }
textcolor(2);
write(hp,' ');
textcolor(c);
write(li);
textcolor(0);
end;

procedure regen;
begin

l:='Ы'; {буква Ы в паскале и будет кубиком }

while nhp<>hp do begin
if keypressed then exit;
delay(3600);
nhp:=nhp+(hp/100)*hpreg/1000;
udar;
show_hp; { регенерация с отображением }
if nhp>hp then nhp:=hp else show_hp;
end;
readkey;
end;
{---------------------------START}
begin
clrscr;
write(' HP = '); readln(HP);
write(' HP now = '); readln(nHP);
write(' Regeneration Points = '); readln(hpreg);
regen;
end.

Для того, чтобы вы лучше поняли работоспособность программы советую скопировать её код, и открыть с помощью Pascal.exe.
Так как же здесь сделать?
----------------