rod4.inc 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. Procedure RodNew(cx:byte; var x,y : byte);far;
  2. Procedure incM(var x : real;a:real);
  3. begin
  4. x:=x+a;
  5. end;
  6. Var
  7. Prior : array [1..n,1..n] of real;
  8. xx,yy,bx,by : 1..n;
  9. k : -4..4;
  10. pr : byte;
  11. cn : array[1..4] of real;
  12. Begin
  13. for xx:=1 to n do for yy := 1 to n do prior[xx,yy] := 0;
  14. pr := 3-cx;
  15. for yy := 1 to n do
  16. for xx := 1 to n do
  17. if pole[xx,yy] = 0 then
  18. begin
  19. for k := -4 to 4 do cn[k] := 0;
  20. if (pole[xx-1,yy-1]=pr) and
  21. (pole[xx-1,yy+1]=pr) and
  22. (pole[xx+1,yy-1]=pr) and
  23. (pole[xx+1,yy+1]=pr) then prior[xx,yy] := MAxINt;
  24. {-------------------------------------------------}
  25. for k := -4 to 4 do
  26. begin
  27. if (pole[xx+k,yy+k]=pr) then incm(cn[1],1+1/abs(k));
  28. if (pole[xx+k,yy-k]=pr) then incm(cn[2],1+1/abs(k));
  29. if (pole[xx+k,yy]=pr) then incm(cn[3],1+1/abs(k));
  30. if (pole[xx,yy-k]=pr) then incm(cn[4],1+1/abs(k));
  31. if (pole[xx+k,yy+k]=cx) then incm(cn[1],-1/abs(k));
  32. if (pole[xx+k,yy-k]=cx) then incm(cn[2],-1/abs(k));
  33. if (pole[xx+k,yy]=cx) then incm(cn[3],-1/abs(k));
  34. if (pole[xx,yy-k]=cx) then incm(cn[4],-1/abs(k));
  35. end;
  36. for k := 1 to 4 do if cn[1] > 4.8 then
  37. begin
  38. if cn[1] > 6 then prior[xx,yy] := maxint else
  39. incm(prior[xx,yy],cn[k]*2);
  40. end;
  41. {-------------------------------------------------}
  42. {-------==================‚®¤®à §¤¥«====================----------}
  43. for k := -4 to 4 do
  44. begin
  45. if (pole[xx+k,yy+k]=cx) then incm(prior[xx,yy],1+1/2/abs(k));
  46. if (pole[xx+k,yy-k]=cx) then incm(prior[xx,yy],1+1/2/abs(k));
  47. if (pole[xx+k,yy]=cx) then incm(prior[xx,yy],1+1/2/abs(k));
  48. if (pole[xx,yy-k]=cx) then incm(prior[xx,yy],1+1/2/abs(k));
  49. end;
  50. end;
  51. {-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=}
  52. {-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=}
  53. {-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=}
  54. randomize;
  55. bx:=1;
  56. by:=1;
  57. for yy := 1 to n do for xx := 1 to n do
  58. if (prior[xx,yy] > prior[bx,by]) or
  59. ((prior[xx,yy] =prior[bx,by]) and (random(100)=5)) then
  60. begin
  61. bx := xx;
  62. by := yy;
  63. end;
  64. x := bx;
  65. y := by
  66. End;