Вызвать процедуру\функцию из другого объекта\класса. Из одного класса\объекта сделать два - Turbo Pascal

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Подскажите что не правильно делаю, и возможно ли вообще - вызвать процедуру\функцию из другого объекта\класса, в турбо паскале? Хочу сделать из одного класса\объекта два.. Но чё-т как-то не получается. Исходный код не влез, прикрепил тхт файлом. И переделанное тоже прикрепил. Вот во что пытался переделать:
Листинг программы
  1. Program Pirog;
  2. uses crt,graph;
  3. const numb = 12; {Кол-во кусочков, на которые делить пирог}
  4. cherry = 4;{В каком из кусочков лежит вишенка) }
  5. attempts = 2;{Кол-во кусочков, которых можно выбрать за 1 раз }
  6. debug = false;
  7. type
  8. arra = array[1..48] of integer; {Массив для хранения индексов кусочков, которые скушаны}
  9. ar = array[1..48,1..48] of integer; {Массив для хранения углов кусочков}
  10. {"""""""""""""""""}
  11. {------ПИРОГ------}
  12. {_________________}
  13. TCake = object {Объявили класс}
  14. eaten:arra; {Массив для хранения индексов кусочков, которые скушаны }
  15. choicecount:integer;{Счётчик выбора}
  16. procedure playerselect;
  17. procedure compselect;
  18. procedure winner(nam:integer);
  19. procedure ChoiceMore;
  20. function nextselect:integer;
  21. function nextselectright:integer;
  22. end;
  23. TCakeDraw = object {Объявили класс}
  24. arr:ar; {Массив для хранения углов кусочков }
  25. eatind:integer; {Последнего скушанного кусочка}
  26. partoc:integer; {Текущий кусочек пирога }
  27. procedure show;
  28. procedure divide(nofp:integer);
  29. procedure selectcherry;
  30. procedure select(nn:integer);
  31. procedure clearselect(nn:integer);
  32. procedure eat(nn:integer);
  33. end;
  34. {"""""""""""""""""""""}
  35. {Вывод на екран пирога}
  36. {_____________________}
  37. procedure TCakeDraw.show;
  38. begin
  39. pieslice(300,250,0,360,200); {Рисуем и закрашиваем пирог}
  40. SetTextStyle(0,0,3);
  41. SetColor(15);
  42. OutTextXY(240,10,'Пирог!');
  43. end;
  44. { }
  45. {"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""}
  46. { Делим пирог на указанное кол-во частей и записываем их координаты в массив}
  47. {___________________________________________________________________________}
  48. procedure TCakeDraw.divide(nofp:integer);
  49. var a,b,i,np:integer;
  50. begin
  51. np:=round(360/nofp); {Делим на ровные кусочки}
  52. a:=0;
  53. b:=0+np;
  54. for i:=1 to nofp do
  55. begin
  56. arr[1,i]:=a;
  57. arr[2,i]:=b;
  58. a:=a+np;
  59. b:=b+np;
  60. end;
  61. selectcherry;
  62. TCake.choicecount:=attempts;
  63. eatind:=1;
  64. partoc:=1;
  65. end;
  66. { }
  67. {""""""""""""""""""""""""""""""""""""""""""""""""}
  68. { Выделяем кусок пирога, в котором лежит вишенка }
  69. {________________________________________________}
  70. procedure TCakeDraw.selectcherry;
  71. begin
  72. SetFillStyle(XHatchFill,4);
  73. pieslice(300,250,arr[1,cherry],arr[2,cherry],200);
  74. end;
  75. { }
  76. {""""""""""""""""""""""""""}
  77. { Выделяем кусочек пирога }
  78. {__________________________}
  79. procedure TCakeDraw.select(nn:integer);
  80. var i:integer;
  81. begin SetFillStyle(XHatchFill,1);
  82. pieslice(300,250,arr[1,nn],arr[2,nn],200);
  83. end;
  84. { }
  85. {"""""""""""""""""""}
  86. { Снимаем выделение }
  87. {___________________}
  88. procedure TCakeDraw.clearselect(nn:integer);
  89. begin
  90. SetFillStyle(XHatchFill,15);
  91. pieslice(300,250,arr[1,nn],arr[2,nn],200);
  92. end;
  93. { }
  94. {"""""""""}
  95. { Съедаем }
  96. {_________}
  97. procedure TCakeDraw.eat(nn:integer);
  98. begin
  99. SetFillStyle(SolidFill,0);
  100. pieslice(300,250,arr[1,nn],arr[2,nn],200);
  101. end;
  102. { }
  103. {""""""""""""""""""""""""""""""""""""""""""""""""""""}
  104. { Пропуск выделенных кусочков или кусочка с вишенкой }
  105. {____________________________________________________}
  106. function TCake.nextselect:integer;
  107. var i:integer; ok:boolean;
  108. begin
  109. for i:=1 to numb do
  110. begin
  111. if (TCakeDraw.partoc = eaten[i]) or (TCakeDraw.partoc = cherry) then
  112. begin
  113. TCakeDraw.partoc:=TCakeDraw.partoc+1;
  114. if TCakeDraw.partoc > numb then
  115. TCakeDraw.partoc:=1;
  116. TCake.nextselect;
  117. end
  118. else
  119. nextselect:=TCakeDraw.partoc;
  120. end;
  121. end;
  122. function TCake.nextselectright:integer;
  123. var i:integer; ok:boolean;
  124. begin
  125. for i:=1 to numb do
  126. begin
  127. if (partoc = eaten[i]) or (partoc = cherry) then
  128. begin
  129. partoc:=partoc-1;
  130. if partoc < 1 then
  131. partoc:=numb;
  132. TCake.nextselectright;
  133. end
  134. else
  135. nextselectright:=partoc;
  136. end;
  137. end;
  138.  
  139. { }
  140. {""""""""""""""""""""""}
  141. { Выбираем ещё кусочек }
  142. {______________________}
  143. procedure TCake.playerselect;
  144. var k,i,j:integer;
  145. begin
  146. if TCakeDraw.eatind = numb then
  147. winner(0)
  148. else
  149. begin
  150. TCakeDraw.partoc:=nextselect;
  151. select(TCakeDraw.partoc);
  152. repeat
  153. k:=ord(readkey);
  154. if debug then
  155. writeln(k);
  156. case k of
  157. {<- <- <- <- <- <- <- <- <- <- <-}
  158. { Кнопка влево <- <- <- <- <- <- }
  159. {<- <- <- <- <- <- <- <- <- <- <-}
  160. 75: begin
  161. clearselect(TCakeDraw.partoc);
  162. TCakeDraw.partoc:=TCakeDraw.partoc+1;
  163. if TCakeDraw.partoc>numb then
  164. TCakeDraw.partoc:=1;
  165. select(nextselect);
  166. end;
  167. {-> -> -> -> -> -> -> -> -> -> ->}
  168. { Кнопка вправо-> -> -> -> -> -> }
  169. {-> -> -> -> -> -> -> -> -> -> ->}
  170. 77: begin
  171. clearselect(TCakeDraw.partoc);
  172. TCakeDraw.partoc:=TCakeDraw.partoc-1;
  173. if TCakeDraw.partoc<1 then
  174. TCakeDraw.partoc:=numb;
  175. Select(nextselectright);
  176. end;
  177. {ENTER ENTER ENTER ENTER ENTER}
  178. { Кнопка ENTER }
  179. {ENTER ENTER ENTER ENTER ENTER }
  180. 13: begin
  181. eaten[TCakeDraw.eatind]:=TCakeDraw.partoc;
  182. TCakeDraw.eatind:=TCakeDraw.eatind+1;
  183. eat(TCakeDraw.partoc);
  184. TCakeDraw.partoc:=partoc+1;
  185. if TCakeDraw.partoc>numb then
  186. TCakeDraw.partoc:=1;
  187. Select(nextselectright);
  188. if debug then
  189. writeln('choices: ',choicecount);
  190. if not (choicecount = 0) then
  191. begin
  192. choicecount:=choicecount-1;
  193. ChoiceMore;
  194. end
  195. else compselect;
  196. end;
  197. {____________________________________________________}
  198. end;
  199. until k=32;
  200. end;
  201. end;
  202. { }
  203. {"""""""""""""""""}
  204. { Компьютер ходит }
  205. {_________________}
  206. Procedure TCake.compselect;
  207. var kompatt, chosenpart,i,j,l,kol:integer;
  208. begin
  209. choicecount:=attempts;
  210. kol:=0;
  211. if TCakeDraw.eatind = numb then
  212. winner(1)
  213. else
  214. begin
  215. kompatt:=random(attempts+1);
  216. if TCakeDraw.eatind = numb-1 then
  217. kompatt:=1;
  218. if TCakeDraw.eatind = numb-2 then
  219. kompatt:=2;
  220. if TCakeDraw.eatind = numb-3 then
  221. kompatt:=3;
  222. if kompatt = 0 then
  223. kompatt:=1;
  224. if kompatt >= attempts+1 then
  225. kompatt:=attempts;
  226. for i:=1 to kompatt do
  227. begin
  228. repeat
  229. chosenpart:=random(numb);
  230. if chosenpart = 0 then
  231. chosenpart:=1;
  232. if not (chosenpart = eaten[i]) and not (chosenpart = cherry) then
  233. begin
  234. eat(chosenpart);
  235. eaten[TCakeDraw.eatind]:=chosenpart;
  236. TCakeDraw.eatind:=TCakeDraw.eatind+1;
  237. kol:=kol+1;
  238. end;
  239. until kol >= kompatt;
  240. end;
  241. playerselect;
  242. end;
  243. end;
  244. { }
  245. {""""""""""""""""""""""""""}
  246. { Ход ещё или окончить ход }
  247. {__________________________}
  248. procedure TCake.ChoiceMore;
  249. var key,ch:integer;
  250. begin
  251. SetTextStyle(0,0,2);
  252. SetColor(15);
  253. OutTextXY((GetMaxX-600),(GetMaxY-200),'Взять ещё кусочек');
  254. OutTextXY((GetMaxX-300),(GetMaxY-200),'Поделиться с компом');
  255.  
  256. repeat
  257. key:=ord(readkey);
  258. case key of
  259. 75: begin { Отрисовка если перемещаемся ВЛЕВО }
  260. SetColor(0);
  261. Rectangle((GetMaxX-310),(GetMaxY-210),(GetMaxX-50),(GetMaxY-110));
  262. SetColor(15);
  263. Rectangle((GetMaxX-610),(GetMaxY-210),(GetMaxX-300),(GetMaxY-110));
  264. OutTextXY((GetMaxX-600),(GetMaxY-200),'Взять ещё кусочек');
  265. OutTextXY((GetMaxX-300),(GetMaxY-200),'Поделиться с компом');
  266. ch:=1;
  267.  
  268. end;
  269. 77: begin { Отрисовка если перемещаемся ВПРАВО }
  270. SetColor(0);
  271. Rectangle((GetMaxX-610),(GetMaxY-210),(GetMaxX-300),(GetMaxY-110));
  272. SetColor(15);
  273. Rectangle((GetMaxX-310),(GetMaxY-210),(GetMaxX-50),(GetMaxY-110));
  274. OutTextXY((GetMaxX-600),(GetMaxY-200),'Взять ещё кусочек');
  275. OutTextXY((GetMaxX-300),(GetMaxY-200),'Поделиться с компом');
  276. ch:=0;
  277. end;
  278. 13: begin { Отрисовка если выбрали кусочек}
  279. SetFillStyle(SolidFill,0);
  280. Bar((GetMaxX-610),(GetMaxY-210),GetMaxX,GetMaxY);
  281. if ch = 1 then
  282. begin
  283. playerselect;
  284. if debug then
  285. writeln('Взять кусок.');
  286. end;
  287. if ch = 0 then
  288. begin
  289. compselect;
  290. if debug then
  291. writeln('Отдать компу.');
  292. end;
  293. end;
  294. end;
  295. until key=27; {Пока не нажали ЕСКейп, выход}
  296. end;
  297. { }
  298. {""""""""""""""""""""""""""""""""""""""""""""""""}
  299. { Поздравляем или огорчаем }
  300. {-----------------------------------------------------------------------}
  301. procedure TCake. winner(nam:integer);
  302. begin
  303. SettextStyle(0,0,5);
  304. SetColor(Green);
  305. if nam=0 then
  306. OutTextXY(80,250,'Ты проиграл!');
  307. if nam=1 then
  308. OutTextXY(80,250,'Ты выиграл!!!');
  309. Readln;
  310. CloseGraph;
  311. end;
  312.  
  313. {\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\}
  314. { ПИРОГ ГОТОВ :) }
  315. {///////////////////////////////////////////////////////////////////////}
  316.  
  317. var
  318. Gd, Gm,
  319. k,
  320. i: Integer;
  321. cakeDraw:TCakeDraw;
  322. cake:TCake;
  323. Begin
  324. clrscr;
  325. Gd := Detect;
  326. Gm := Vgahi;
  327. InitGraph(Gd, Gm, 'C:\tp7\BIN');
  328. if GraphResult <> grOk then
  329. Halt(1);
  330. Randomize;
  331. SetFillStyle(XHatchFill, 15);
  332. cakeDraw.show;
  333. cakeDraw.divide(numb);
  334. k:=random(2);
  335. if k=0 then
  336. cake.compselect;
  337. if k=1 then
  338. cake.playerselect;
  339. CloseGraph;
  340. readln;
  341. End.
Если кто поможет буду при много благодарен.

Решение задачи: «Вызвать процедуру\функцию из другого объекта\класса. Из одного класса\объекта сделать два»

textual
Листинг программы
  1. procedure TCakeDraw.divide(nofp:integer);
  2. ...
  3.   TCake.choicecount:=attempts;
  4. ...

Объяснение кода листинга программы

В данном коде представлен объект TCakeDraw, который имеет метод divide(nofp:integer). Метод не имеет параметров и выполняет следующие действия:

  1. Вызывает метод choicecount объекта TCake.
  2. Устанавливает значение переменной attempts объекта TCake равным 1.
  3. ... Также в коде присутствует объект TCake, который имеет свойство choicecount.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.625 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы