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

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

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

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

24 янв 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.
Так как же здесь сделать?
----------------
Программист - это человек, который решает способом, который вы не понимаете, проблемы, о которых вы даже не подозревали...
Ответить