PDA

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



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

-Написать программу индикатора жизней героя с регенерацией. Индикатор должен выглядеть например так:
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;
rHp:=0.33;
yHp:=0.66;
write(' HP = '); readln(HP);
write(' HP now = '); readln(nHP);
write(' Regeneration Points = '); readln(hpreg);
regen;
end.

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

somewhere
24.01.2007, 08:56
Очевидно, что число кубиков для отображения = Trunc(nHp/Hp*20);
Это ж обычная пропорция, которую еще в школе, классе в 7-ом проходят:
x/20 составляет такую же часть, какую nHp/Hp, значит Х = nHp/Hp*20


li:='';
while don>=en do begin
li:=li+l;
Формировать строку кубиков гораздо проще и правильнее так:


li := '';
x := trunc(nHp/Hp*20);
if x > 20 then x := 20;
if x > 0 then for t:=1 to x do li := li + l;

Колядин Максим
24.01.2007, 17:13
Спасибо, заработало.