Advertisement
g0ku

Untitled

Mar 1st, 2017
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.26 KB | None | 0 0
  1. function TForm1.agore(x,y:integer):integer;
  2. var br:integer;
  3. begin
  4. br:=0;
  5.  
  6. if y-1>=0 then
  7. begin
  8. if cShots[x,y-1]=0 then
  9. br:=1+agore(x,y-1)
  10. else br:=0;
  11. end
  12. else br:=0;
  13. if br>3 then
  14. agore:=3
  15. else agore:=br;
  16. end;
  17.  
  18. function TForm1.adole(x,y:integer):integer;
  19. var br:integer;
  20. begin
  21. br:=0;
  22.  
  23. if y+1<=9 then
  24. begin
  25. if cShots[x,y+1]=0 then
  26. br:=1+adole(x,y+1)
  27. else br:=0;
  28. end
  29. else br:=0;
  30. if br>3 then
  31. adole:=3
  32. else adole:=br;
  33. end;
  34.  
  35. function TForm1.alevo(x,y:integer):integer;
  36. var br:integer;
  37. begin
  38. br:=0;
  39.  
  40. if x-1>=0 then
  41. begin
  42. if cShots[x-1,y]=0 then
  43. br:=1+alevo(x-1,y)
  44. else br:=0;
  45. end
  46. else br:=0;
  47. if br>3 then
  48. alevo:=3
  49. else alevo:=br;
  50. end;
  51.  
  52. function TForm1.adesno(x,y:integer):integer;
  53. var br:integer;
  54. begin
  55. br:=0;
  56.  
  57. if x+1<=9 then
  58. begin
  59. if cShots[x+1,y]=0 then
  60. br:=1+adesno(x+1,y)
  61. else br:=0;
  62. end
  63. else br:=0;
  64. if br>3 then
  65. adesno:=3
  66. else adesno:=br;
  67. end;
  68. procedure TForm1.zameni(var a,b:integer; max:integer);
  69. var pom:integer;
  70. begin
  71. if b>a then
  72. begin
  73. pom:=b;
  74. b:=a;
  75. a:=pom;
  76. end;
  77. if a>max-1 then
  78. a:=max-1;
  79. if b>max-1 then
  80. b:=max-1;
  81.  
  82. end;
  83.  
  84.  
  85. function TForm1.Racunaj(x,y,max:integer):integer;
  86. var a,b,h,v:integer;
  87. begin
  88. if cShots[x,y]=0 then
  89. begin
  90. if max=1 then
  91. racunaj:=1;
  92.  
  93. if max=2 then
  94. begin
  95. a:=alevo(x,y);
  96. b:=adesno(x,y);
  97. zameni(a,b,max);
  98. if a=1 then
  99. begin
  100. if b=1 then
  101. h:=2;
  102. if b=0 then
  103. h:=1;
  104. end
  105. else h:=0;
  106.  
  107. a:=agore(x,y);
  108. b:=adole(x,y);
  109. zameni(a,b,max);
  110. if a=1 then
  111. begin
  112. if b=1 then
  113. v:=2;
  114. if b=0 then
  115. v:=1;
  116. end
  117. else v:=0;
  118. racunaj:=h+v;
  119. end;
  120.  
  121. if max=3 then
  122. begin
  123. a:=alevo(x,y);
  124. b:=adesno(x,y);
  125. zameni(a,b,max);
  126. if a=1 then
  127. begin
  128. if b=1 then
  129. h:=1;
  130. if b=0 then
  131. h:=0;
  132. end;
  133.  
  134. if a=2 then
  135. begin
  136. if b=2 then
  137. h:=3;
  138. if b=1 then
  139. h:=2;
  140. if b=0 then
  141. h:=1;
  142. end;
  143.  
  144. if a=0 then
  145. h:=0;
  146.  
  147. a:=agore(x,y);
  148. b:=adole(x,y);
  149. zameni(a,b,max);
  150. if a=1 then
  151. begin
  152. if b=1 then
  153. v:=1;
  154. if b=0 then
  155. v:=0;
  156. end;
  157.  
  158. if a=2 then
  159. begin
  160. if b=2 then
  161. v:=3;
  162. if b=1 then
  163. v:=2;
  164. if b=0 then
  165. v:=1;
  166. end;
  167.  
  168. if a=0 then
  169. v:=0;
  170.  
  171. racunaj:=h+v;
  172. end;
  173.  
  174. if max=4 then
  175. begin
  176. a:=alevo(x,y);
  177. b:=adesno(x,y);
  178. zameni(a,b,max);
  179. if a=1 then
  180. h:=0;
  181.  
  182. if a=2 then
  183. begin
  184. if b=2 then
  185. h:=2;
  186. if b=1 then
  187. h:=1;
  188. if b=0 then
  189. h:=0;
  190. end;
  191.  
  192. if a=3 then
  193. begin
  194. if b=3 then
  195. h:=4;
  196. if b=2 then
  197. h:=3;
  198. if b=1 then
  199. h:=2;
  200. if b=0 then
  201. h:=1;
  202. end;
  203.  
  204. if a=0 then
  205. h:=0;
  206.  
  207. a:=agore(x,y);
  208. b:=adole(x,y);
  209. zameni(a,b,max);
  210. if a=1 then
  211. v:=0;
  212.  
  213. if a=2 then
  214. begin
  215. if b=2 then
  216. v:=2;
  217. if b=1 then
  218. v:=1;
  219. if b=0 then
  220. v:=0;
  221. end;
  222.  
  223. if a=3 then
  224. begin
  225. if b=3 then
  226. v:=4;
  227. if b=2 then
  228. v:=3;
  229. if b=1 then
  230. v:=2;
  231. if b=0 then
  232. v:=1;
  233. end;
  234.  
  235. if a=0 then
  236. v:=0;
  237.  
  238. racunaj:=h+v;
  239.  
  240. end;
  241.  
  242. end
  243. else
  244. racunaj:=0;
  245. end;
  246. function TForm1.Guess:integer;
  247. var
  248. a,b,i,j,max,maks,br,k,m1,m2:integer; {max je najveca dostupna duzina broda, a maks je najveci element u prob matrici}
  249. begin
  250. if cTurn.brush.color=clGreen then {a(pravac) su funkcije koje vracaju koliko polja ima u tom pravcu da racunar jos nije otvorio}
  251. begin
  252. if mode=1 then
  253. begin
  254. for i:=1 to 100 do
  255. maxprob[i]:=0;
  256. for i:=1 to 4 do
  257. if pships[i]<>0 then
  258. max:=i;
  259. for i:=0 to 9 do
  260. for j:=0 to 9 do
  261. begin
  262. prob[i,j]:=Racunaj(i,j,max);
  263.  
  264. end;
  265.  
  266. maks:=0;
  267. for i:=0 to 9 do
  268. for j:=0 to 9 do
  269. if prob[i,j]>maks then
  270. maks:=prob[i,j];
  271. br:=0;
  272. for i:=0 to 9 do
  273. for j:=0 to 9 do
  274. if prob[i,j]=maks then
  275. begin
  276. maxprob[br]:=i*10+j;
  277. br:=br+1;
  278. end;
  279. k:=random(br);
  280. Guess:=maxprob[k];
  281.  
  282. end;
  283.  
  284. if mode=2 then
  285. begin
  286. if uzast=1 then {DRUGO GADJANJE}
  287. begin
  288. a:=prethodni div 10;
  289. b:=prethodni mod 10;
  290.  
  291. if (adesno(a,b)+alevo(a,b))>=(agore(a,b)+adole(a,b)) then {PROVERAVA DA LI IMA VISE NEOTVORENIH POLJA U HORIZONTALI}
  292. begin
  293. if alevo(a,b)>=adesno(a,b) then
  294. begin
  295. m1:=a-1;
  296. m2:=b;
  297. k:=m1*10+m2;
  298. Guess:=k;
  299. end
  300.  
  301. else
  302. begin
  303. m1:=a+1;
  304. m2:=b;
  305. k:=m1*10+m2;
  306. Guess:=k;
  307. end;
  308. end
  309. else
  310. begin
  311. if agore(a,b)>=adole(a,b) then
  312. begin
  313. m1:=a;
  314. m2:=b-1;
  315. k:=m1*10+m2;
  316. Guess:=k;
  317. end
  318. else
  319. begin
  320. m1:=a;
  321. m2:=b+1;
  322. k:=m1*10+m2;
  323. Guess:=k;
  324. end
  325.  
  326.  
  327.  
  328. end;
  329.  
  330. if uzast=2 then {TRECE GADJANJE}
  331. begin
  332. a:=prethodni div 10;
  333. b:=prethodni mod 10;
  334. if ort=0 then {HORIZONTALNO}
  335. begin
  336. if smer=-1 then
  337. begin
  338. if alevo(a,b)<>0 then
  339. begin
  340. m1:=a-1;
  341. m2:=b;
  342. k:=m1*10+m2;
  343. Guess:=k;
  344. end
  345. else
  346. begin
  347. m1:=a+2;
  348. m2:=b;
  349. smer:=1;
  350. k:=m1*10+m2;
  351. Guess:=k;
  352. end;
  353. end
  354. else
  355. begin
  356. if adesno(a,b)<>0 then
  357. begin
  358. m1:=a+1;
  359. m2:=b;
  360. k:=m1*10+m2;
  361. Guess:=k;
  362. end
  363. else
  364. begin
  365. m1:=a-2;
  366. m2:=b;
  367. smer:=-1;
  368. k:=m1*10+m2;
  369. Guess:=k;
  370. end;
  371.  
  372. end;
  373. end;
  374.  
  375. if ort=1 then {VERTIKALNO}
  376. begin
  377. if smer=-1 then
  378. begin
  379. if agore(a,b)<>0 then
  380. begin
  381. m1:=a;
  382. m2:=b-1;
  383. k:=m1*10+m2;
  384. Guess:=k;
  385. end
  386. else
  387. begin
  388. m1:=a;
  389. m2:=b+1;
  390. smer:=1;
  391. k:=m1*10+m2;
  392. Guess:=k;
  393. end;
  394. end
  395.  
  396. else
  397. begin
  398. if adole(a,b)<>0 then
  399. begin
  400. m1:=a;
  401. m2:=b+1;
  402. k:=m1*10+m2;
  403. Guess:=k;
  404. end
  405. else
  406. begin
  407. m1:=a;
  408. m2:=b-1;
  409. smer:=-1;
  410. k:=m1*10+m2;
  411. Guess:=k;
  412. end;
  413. end;
  414.  
  415. end;
  416. end;
  417.  
  418.  
  419. if uzast=3 then {CETVRTO GADJANjE}
  420. begin
  421. a:=prethodni div 10;
  422. b:=prethodni mod 10;
  423. if ort=0 then {HORIZONTALNO}
  424. begin
  425. if smer=-1 then
  426. begin
  427. if alevo(a,b)<>0 then
  428. begin
  429. m1:=a-1;
  430. m2:=b;
  431. k:=m1*10+m2;
  432. Guess:=k;
  433. end
  434. else
  435. begin
  436. m1:=a+3;
  437. m2:=b;
  438. smer:=1;
  439. k:=m1*10+m2;
  440. Guess:=k;
  441. end;
  442. end
  443.  
  444. else
  445. begin
  446. if adesno(a,b)<>0 then
  447. begin
  448. m1:=a+1;
  449. m2:=b;
  450. k:=m1*10+m2;
  451. Guess:=k;
  452. end
  453. else
  454. begin
  455. m1:=a-3;
  456. m2:=b;
  457. smer:=-1;
  458. k:=m1*10+m2;
  459. Guess:=k;
  460. end;
  461. end;
  462.  
  463. end;
  464.  
  465.  
  466. if ort=1 then {VERTIKALNO}
  467. begin
  468. if smer=-1 then
  469. begin
  470. if agore(a,b)<>0 then
  471. begin
  472. m1:=a;
  473. m2:=b-1;
  474. k:=m1*10+m2;
  475. Guess:=k;
  476. end
  477. else
  478. begin
  479. m1:=a;
  480. m2:=b+3;
  481. smer:=1;
  482. k:=m1*10+m2;
  483. Guess:=k;
  484. end;
  485. end
  486. else
  487. begin
  488. m1:=a;
  489. m2:=b-3;
  490. smer:=1;
  491. k:=m1*10+m2;
  492. Guess:=k;
  493. end;
  494.  
  495. end;
  496. end;
  497. end;
  498. end;
  499. end;
  500. end;
  501. procedure TForm1.cOdigraj;
  502. var x,y,i:integer;
  503. begin
  504.  
  505. x:=guess;
  506. y:=x mod 10;
  507. x:=x div 10;
  508.  
  509.  
  510. if (pBoard[x,y]<>0) and (pBoard[x,y]<>5) then
  511. begin
  512. cShots[x,y]:=1;
  513. pMat[x,y].Brush.Color:=clYellow;
  514.  
  515. if x-1>=0 then
  516. begin
  517. if y-1>=0 then
  518. begin
  519. pMat[x-1,y-1].Brush.Color:=clGray;
  520. cShots[x-1,y-1]:=2;
  521. end;
  522. if y+1<=9 then
  523. begin
  524. pMat[x-1,y+1].Brush.Color:=clGray;
  525. cShots[x-1,y+1]:=2;
  526. end;
  527. end;
  528. if x+1<=9 then
  529. begin
  530. if y-1>=0 then
  531. begin
  532. pMat[x+1,y-1].Brush.Color:=clGray;
  533. cShots[x+1,y-1]:=2;
  534. end;
  535. if y+1<=9 then
  536. begin
  537. pMat[x+1,y+1].Brush.Color:=clGray;
  538. cShots[x+1,y+1]:=2;
  539. end;
  540. end;
  541.  
  542. if ispotopljen(x,y,2) then
  543. begin
  544. boji(x,y,2);
  545. mode:=1;
  546. uzast:=0;
  547. pShips[pBoard[x,y]]:=pShips[pBoard[x,y]]-1;
  548. hit:=true;
  549. end
  550. else
  551. begin
  552. uzast:=uzast+1;
  553. mode:=2;
  554. prethodni:=x*10+y;
  555. hit:=true;
  556. end;
  557. end
  558. else
  559. begin
  560. pMat[x,y].Brush.Color:=clGray;
  561. cShots[x,y]:=2;
  562. pTurn.brush.color:=clGreen;
  563. cTurn.brush.color:=clRed;
  564.  
  565. end;
  566. end;
  567. procedure TForm1.pozovi;
  568. begin
  569. hit:=false;
  570. cOdigraj;
  571. If hit then
  572. pozovi;
  573. end;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement