Интересная задачка!

За вознаграждение или нахаляву (если повезёт)

Модераторы: Хыиуду, dr.Jekill, MOTOCoder, Medved

Ответить
Аватара пользователя
Колядин Максим
Сообщения: 285
Зарегистрирован: 16 ноя 2006, 19:09
Откуда: Seattle, WA
Контактная информация:

24 янв 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
Сообщения: 1837
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

24 янв 2007, 08:56

Очевидно, что число кубиков для отображения = Trunc(nHp/Hp*20);
Это ж обычная пропорция, которую еще в школе, классе в 7-ом проходят:
x/20 составляет такую же часть, какую nHp/Hp, значит Х = nHp/Hp*20
&quot писал(а): 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;
It's a long way to the top if you wanna rock'n'roll
Аватара пользователя
Колядин Максим
Сообщения: 285
Зарегистрирован: 16 ноя 2006, 19:09
Откуда: Seattle, WA
Контактная информация:

24 янв 2007, 17:13

Спасибо, заработало.
Программист - это человек, который решает способом, который вы не понимаете, проблемы, о которых вы даже не подозревали...
Ответить