Вызвать процедуру\функцию из другого объекта\класса. Из одного класса\объекта сделать два - Turbo Pascal
Формулировка задачи:
Здравствуйте.
Подскажите что не правильно делаю, и возможно ли вообще - вызвать процедуру\функцию из другого объекта\класса, в турбо паскале?
Хочу сделать из одного класса\объекта два.. Но чё-т как-то не получается.
Исходный код не влез, прикрепил тхт файлом. И переделанное тоже прикрепил.
Вот во что пытался переделать:
Если кто поможет буду при много благодарен.
Листинг программы
- Program Pirog;
- uses crt,graph;
- const numb = 12; {Кол-во кусочков, на которые делить пирог}
- cherry = 4;{В каком из кусочков лежит вишенка) }
- attempts = 2;{Кол-во кусочков, которых можно выбрать за 1 раз }
- debug = false;
- type
- arra = array[1..48] of integer; {Массив для хранения индексов кусочков, которые скушаны}
- ar = array[1..48,1..48] of integer; {Массив для хранения углов кусочков}
- {"""""""""""""""""}
- {------ПИРОГ------}
- {_________________}
- TCake = object {Объявили класс}
- eaten:arra; {Массив для хранения индексов кусочков, которые скушаны }
- choicecount:integer;{Счётчик выбора}
- procedure playerselect;
- procedure compselect;
- procedure winner(nam:integer);
- procedure ChoiceMore;
- function nextselect:integer;
- function nextselectright:integer;
- end;
- TCakeDraw = object {Объявили класс}
- arr:ar; {Массив для хранения углов кусочков }
- eatind:integer; {Последнего скушанного кусочка}
- partoc:integer; {Текущий кусочек пирога }
- procedure show;
- procedure divide(nofp:integer);
- procedure selectcherry;
- procedure select(nn:integer);
- procedure clearselect(nn:integer);
- procedure eat(nn:integer);
- end;
- {"""""""""""""""""""""}
- {Вывод на екран пирога}
- {_____________________}
- procedure TCakeDraw.show;
- begin
- pieslice(300,250,0,360,200); {Рисуем и закрашиваем пирог}
- SetTextStyle(0,0,3);
- SetColor(15);
- OutTextXY(240,10,'Пирог!');
- end;
- { }
- {"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""}
- { Делим пирог на указанное кол-во частей и записываем их координаты в массив}
- {___________________________________________________________________________}
- procedure TCakeDraw.divide(nofp:integer);
- var a,b,i,np:integer;
- begin
- np:=round(360/nofp); {Делим на ровные кусочки}
- a:=0;
- b:=0+np;
- for i:=1 to nofp do
- begin
- arr[1,i]:=a;
- arr[2,i]:=b;
- a:=a+np;
- b:=b+np;
- end;
- selectcherry;
- TCake.choicecount:=attempts;
- eatind:=1;
- partoc:=1;
- end;
- { }
- {""""""""""""""""""""""""""""""""""""""""""""""""}
- { Выделяем кусок пирога, в котором лежит вишенка }
- {________________________________________________}
- procedure TCakeDraw.selectcherry;
- begin
- SetFillStyle(XHatchFill,4);
- pieslice(300,250,arr[1,cherry],arr[2,cherry],200);
- end;
- { }
- {""""""""""""""""""""""""""}
- { Выделяем кусочек пирога }
- {__________________________}
- procedure TCakeDraw.select(nn:integer);
- var i:integer;
- begin SetFillStyle(XHatchFill,1);
- pieslice(300,250,arr[1,nn],arr[2,nn],200);
- end;
- { }
- {"""""""""""""""""""}
- { Снимаем выделение }
- {___________________}
- procedure TCakeDraw.clearselect(nn:integer);
- begin
- SetFillStyle(XHatchFill,15);
- pieslice(300,250,arr[1,nn],arr[2,nn],200);
- end;
- { }
- {"""""""""}
- { Съедаем }
- {_________}
- procedure TCakeDraw.eat(nn:integer);
- begin
- SetFillStyle(SolidFill,0);
- pieslice(300,250,arr[1,nn],arr[2,nn],200);
- end;
- { }
- {""""""""""""""""""""""""""""""""""""""""""""""""""""}
- { Пропуск выделенных кусочков или кусочка с вишенкой }
- {____________________________________________________}
- function TCake.nextselect:integer;
- var i:integer; ok:boolean;
- begin
- for i:=1 to numb do
- begin
- if (TCakeDraw.partoc = eaten[i]) or (TCakeDraw.partoc = cherry) then
- begin
- TCakeDraw.partoc:=TCakeDraw.partoc+1;
- if TCakeDraw.partoc > numb then
- TCakeDraw.partoc:=1;
- TCake.nextselect;
- end
- else
- nextselect:=TCakeDraw.partoc;
- end;
- end;
- function TCake.nextselectright:integer;
- var i:integer; ok:boolean;
- begin
- for i:=1 to numb do
- begin
- if (partoc = eaten[i]) or (partoc = cherry) then
- begin
- partoc:=partoc-1;
- if partoc < 1 then
- partoc:=numb;
- TCake.nextselectright;
- end
- else
- nextselectright:=partoc;
- end;
- end;
- { }
- {""""""""""""""""""""""}
- { Выбираем ещё кусочек }
- {______________________}
- procedure TCake.playerselect;
- var k,i,j:integer;
- begin
- if TCakeDraw.eatind = numb then
- winner(0)
- else
- begin
- TCakeDraw.partoc:=nextselect;
- select(TCakeDraw.partoc);
- repeat
- k:=ord(readkey);
- if debug then
- writeln(k);
- case k of
- {<- <- <- <- <- <- <- <- <- <- <-}
- { Кнопка влево <- <- <- <- <- <- }
- {<- <- <- <- <- <- <- <- <- <- <-}
- 75: begin
- clearselect(TCakeDraw.partoc);
- TCakeDraw.partoc:=TCakeDraw.partoc+1;
- if TCakeDraw.partoc>numb then
- TCakeDraw.partoc:=1;
- select(nextselect);
- end;
- {-> -> -> -> -> -> -> -> -> -> ->}
- { Кнопка вправо-> -> -> -> -> -> }
- {-> -> -> -> -> -> -> -> -> -> ->}
- 77: begin
- clearselect(TCakeDraw.partoc);
- TCakeDraw.partoc:=TCakeDraw.partoc-1;
- if TCakeDraw.partoc<1 then
- TCakeDraw.partoc:=numb;
- Select(nextselectright);
- end;
- {ENTER ENTER ENTER ENTER ENTER}
- { Кнопка ENTER }
- {ENTER ENTER ENTER ENTER ENTER }
- 13: begin
- eaten[TCakeDraw.eatind]:=TCakeDraw.partoc;
- TCakeDraw.eatind:=TCakeDraw.eatind+1;
- eat(TCakeDraw.partoc);
- TCakeDraw.partoc:=partoc+1;
- if TCakeDraw.partoc>numb then
- TCakeDraw.partoc:=1;
- Select(nextselectright);
- if debug then
- writeln('choices: ',choicecount);
- if not (choicecount = 0) then
- begin
- choicecount:=choicecount-1;
- ChoiceMore;
- end
- else compselect;
- end;
- {____________________________________________________}
- end;
- until k=32;
- end;
- end;
- { }
- {"""""""""""""""""}
- { Компьютер ходит }
- {_________________}
- Procedure TCake.compselect;
- var kompatt, chosenpart,i,j,l,kol:integer;
- begin
- choicecount:=attempts;
- kol:=0;
- if TCakeDraw.eatind = numb then
- winner(1)
- else
- begin
- kompatt:=random(attempts+1);
- if TCakeDraw.eatind = numb-1 then
- kompatt:=1;
- if TCakeDraw.eatind = numb-2 then
- kompatt:=2;
- if TCakeDraw.eatind = numb-3 then
- kompatt:=3;
- if kompatt = 0 then
- kompatt:=1;
- if kompatt >= attempts+1 then
- kompatt:=attempts;
- for i:=1 to kompatt do
- begin
- repeat
- chosenpart:=random(numb);
- if chosenpart = 0 then
- chosenpart:=1;
- if not (chosenpart = eaten[i]) and not (chosenpart = cherry) then
- begin
- eat(chosenpart);
- eaten[TCakeDraw.eatind]:=chosenpart;
- TCakeDraw.eatind:=TCakeDraw.eatind+1;
- kol:=kol+1;
- end;
- until kol >= kompatt;
- end;
- playerselect;
- end;
- end;
- { }
- {""""""""""""""""""""""""""}
- { Ход ещё или окончить ход }
- {__________________________}
- procedure TCake.ChoiceMore;
- var key,ch:integer;
- begin
- SetTextStyle(0,0,2);
- SetColor(15);
- OutTextXY((GetMaxX-600),(GetMaxY-200),'Взять ещё кусочек');
- OutTextXY((GetMaxX-300),(GetMaxY-200),'Поделиться с компом');
- repeat
- key:=ord(readkey);
- case key of
- 75: begin { Отрисовка если перемещаемся ВЛЕВО }
- SetColor(0);
- Rectangle((GetMaxX-310),(GetMaxY-210),(GetMaxX-50),(GetMaxY-110));
- SetColor(15);
- Rectangle((GetMaxX-610),(GetMaxY-210),(GetMaxX-300),(GetMaxY-110));
- OutTextXY((GetMaxX-600),(GetMaxY-200),'Взять ещё кусочек');
- OutTextXY((GetMaxX-300),(GetMaxY-200),'Поделиться с компом');
- ch:=1;
- end;
- 77: begin { Отрисовка если перемещаемся ВПРАВО }
- SetColor(0);
- Rectangle((GetMaxX-610),(GetMaxY-210),(GetMaxX-300),(GetMaxY-110));
- SetColor(15);
- Rectangle((GetMaxX-310),(GetMaxY-210),(GetMaxX-50),(GetMaxY-110));
- OutTextXY((GetMaxX-600),(GetMaxY-200),'Взять ещё кусочек');
- OutTextXY((GetMaxX-300),(GetMaxY-200),'Поделиться с компом');
- ch:=0;
- end;
- 13: begin { Отрисовка если выбрали кусочек}
- SetFillStyle(SolidFill,0);
- Bar((GetMaxX-610),(GetMaxY-210),GetMaxX,GetMaxY);
- if ch = 1 then
- begin
- playerselect;
- if debug then
- writeln('Взять кусок.');
- end;
- if ch = 0 then
- begin
- compselect;
- if debug then
- writeln('Отдать компу.');
- end;
- end;
- end;
- until key=27; {Пока не нажали ЕСКейп, выход}
- end;
- { }
- {""""""""""""""""""""""""""""""""""""""""""""""""}
- { Поздравляем или огорчаем }
- {-----------------------------------------------------------------------}
- procedure TCake. winner(nam:integer);
- begin
- SettextStyle(0,0,5);
- SetColor(Green);
- if nam=0 then
- OutTextXY(80,250,'Ты проиграл!');
- if nam=1 then
- OutTextXY(80,250,'Ты выиграл!!!');
- Readln;
- CloseGraph;
- end;
- {\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\}
- { ПИРОГ ГОТОВ :) }
- {///////////////////////////////////////////////////////////////////////}
- var
- Gd, Gm,
- k,
- i: Integer;
- cakeDraw:TCakeDraw;
- cake:TCake;
- Begin
- clrscr;
- Gd := Detect;
- Gm := Vgahi;
- InitGraph(Gd, Gm, 'C:\tp7\BIN');
- if GraphResult <> grOk then
- Halt(1);
- Randomize;
- SetFillStyle(XHatchFill, 15);
- cakeDraw.show;
- cakeDraw.divide(numb);
- k:=random(2);
- if k=0 then
- cake.compselect;
- if k=1 then
- cake.playerselect;
- CloseGraph;
- readln;
- End.
Решение задачи: «Вызвать процедуру\функцию из другого объекта\класса. Из одного класса\объекта сделать два»
textual
Листинг программы
- procedure TCakeDraw.divide(nofp:integer);
- ...
- TCake.choicecount:=attempts;
- ...
Объяснение кода листинга программы
В данном коде представлен объект TCakeDraw, который имеет метод divide(nofp:integer). Метод не имеет параметров и выполняет следующие действия:
- Вызывает метод choicecount объекта TCake.
- Устанавливает значение переменной attempts объекта TCake равным 1.
- ... Также в коде присутствует объект TCake, который имеет свойство choicecount.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д