Added upstream from http://ftp.icm.edu.pl/pub/loglan/
[loglan.git] / examples / chin / c_testy.log
1 program chinczyk;\r
2  \r
3   var ii,ij,kostka, ilugraczy: integer;\r
4   var tab: arrayof arrayof integer;\r
5   var gracz: arrayof coroutine;\r
6 \r
7 unit gracz1:coroutine;\r
8 var i:integer;\r
9     \r
10 begin\r
11  return;\r
12  do\r
13   call A.gdziepiony; \r
14   i:=0;\r
15   call A.przesunpion(0);\r
16   detach;\r
17 od;\r
18 end gracz1;\r
19 \r
20 \r
21 \r
22 \r
23   \r
24 unit gracz2:coroutine;\r
25 var witch:integer;    \r
26 begin\r
27  return;\r
28  do\r
29   call A.gdziepiony; \r
30       witch:=0;\r
31   call A.przesunpion(witch);\r
32   detach;\r
33 od;\r
34 end gracz2;\r
35   \r
36 unit gracz3:coroutine;\r
37 const g=3;                                    (* number of player *)\r
38 const eh=20;                                  (* finish *)\r
39 const spp=21;                                 (* start *)\r
40 \r
41 var stran                         :arrayof integer;\r
42 var pp,i,leader,nrkil,nrhun,witch :integer;\r
43 var home                          :arrayof boolean;\r
44 \r
45 unit man:class;               (* pawn *)\r
46  var ple,saf,rsa     :integer;\r
47  var kil,hun,fin,mov :boolean;\r
48 end man;\r
49 \r
50 var pawn                         :arrayof man;\r
51 unit poleposition:function:boolean;\r
52  var h,i:integer;\r
53  begin\r
54   pp:=0;\r
55   result:=true;\r
56   for i:=1 to 4 do\r
57     home(i):=false;\r
58   od;\r
59   for i:=1 to 4 do\r
60     h:=tab(g,i);  \r
61     if h=0 then pp:=pp+1 fi;\r
62     if h=spp then result:=false fi;\r
63     if h>100 then home(h-100):=true fi;\r
64   od;\r
65   if pp=0 then result:=false fi;\r
66 end poleposition;      \r
67 \r
68 unit pawns:procedure;\r
69 var i:integer;\r
70  begin\r
71   for i:=1 to 4 do\r
72     pawn(i).ple:=tab(g,i);\r
73   od;\r
74 end pawns;    \r
75  \r
76 unit finish:function:integer;\r
77  var i:integer;\r
78   unit inhome:function(a:integer):boolean;\r
79    begin\r
80      result:=false;\r
81      if a>1 andif a<=eh andif a+kostka>eh then\r
82        if a+kostka-eh<5 andif not home(a+kostka-eh) then\r
83          result:=true;\r
84          pawn(i).mov:=true;\r
85        else\r
86          pawn(i).mov:=false;  \r
87        fi;\r
88      else\r
89        pawn(i).mov:=true;  \r
90      fi;\r
91   end inhome;        \r
92   begin\r
93      result:=0;\r
94      for i:=1 to 4 do\r
95        pawn(i).fin:=false;\r
96        if pawn(i).ple>0 andif pawn(i).ple<99 then\r
97          if inhome(pawn(i).ple) then\r
98            result:=result+1;\r
99            pawn(i).fin:=true;\r
100          fi\r
101        else\r
102          pawn(i).mov:=false;\r
103        fi;\r
104      od;\r
105 end finish;\r
106 \r
107 unit killer:function:integer;\r
108   var i,j,k:integer;\r
109   begin\r
110     for i:=1 to 4 do\r
111       pawn(i).kil:=false;\r
112       for j:=1 to 3 do\r
113         k:=(i+j) mod 4;\r
114         if k=0 then k:=4 fi;\r
115         if pawn(i).ple+kostka=pawn(k).ple andif pawn(i).ple=/=0 then\r
116           pawn(i).kil:=true;\r
117         fi\r
118       od\r
119     od\r
120 end killer;\r
121 \r
122 unit hunter:function:integer;\r
123  var i,j:integer;\r
124   begin\r
125   for i:=1 to 4 do\r
126    if pawn(i).ple=/=0 then\r
127      j:=member(pawn(i).ple+kostka,stran);\r
128      if pawn(i).ple+kostka=stran(j) then\r
129         pawn(i).hun:=true;\r
130         result:=result+1;\r
131      else\r
132         pawn(i).hun:=false;\r
133      fi\r
134    fi\r
135  od\r
136 end hunter;\r
137 \r
138 unit strangers:procedure;\r
139 var i,j,k:integer;\r
140  begin\r
141    k:=1; \r
142    for i:=1 to 4 do\r
143      if i=/=g then\r
144        for j:=1 to 4 do\r
145          if i>ilugraczy then stran(k):=0;\r
146          else  stran(k):=tab(i,j);\r
147          fi;\r
148          k:=k+1;\r
149        od;\r
150      fi\r
151    od;\r
152    stran(13):=200;\r
153    j:=12;\r
154    while j>1 do\r
155      i:=1;\r
156      while i<j do\r
157        if stran(i)>stran(i+1) then\r
158          k:=stran(i);\r
159          stran(i):=stran(i+1);\r
160          stran(i+1):=k;\r
161        fi;\r
162        i:=i+1;\r
163      od;\r
164      j:=j-1;\r
165    od;\r
166 end strangers;   \r
167 \r
168 unit member:function(a:integer,arra:arrayof integer):integer;\r
169 var i:integer;\r
170  begin\r
171   if a<99 then a:=(a+40)mod 40 fi;\r
172   if a=0 then a:=40 fi;\r
173   if a>arra(1) andif a<arra(13) then\r
174    i:=1;\r
175    while a>arra(i) do\r
176      i:=i+1;\r
177    od;\r
178    result:=i;\r
179   else if a<arra(1) then result:=1;\r
180        else result:=12 fi\r
181   fi;        \r
182 end member;\r
183 \r
184 \r
185 unit safety:procedure;\r
186  var i:integer;\r
187    unit rafset:function(k:integer):integer;\r
188     var p,q:integer;\r
189     begin\r
190       p:=member(k,stran);\r
191       q:=member(k-6,stran);\r
192       result:=0;\r
193       if p>q then result:=p-q\r
194       else\r
195         if p=q then result:=0\r
196         else\r
197           while stran(q)<99 do\r
198             q:=q+1;\r
199             result:=result+1;\r
200             if q=13 then exit fi;\r
201           od;\r
202           q:=1;\r
203           while stran(q)=0 do\r
204             q:=q+1;\r
205           od;\r
206           result:=result+p-q;\r
207         fi;  \r
208       fi;\r
209    end rafset;\r
210  begin\r
211    for i:=1 to 4 do\r
212      if pawn(i).ple>0 andif pawn(i).ple<99 then\r
213        pawn(i).saf:=rafset(pawn(i).ple);\r
214        pawn(i).rsa:=pawn(i).saf-rafset(pawn(i).ple+kostka);\r
215      else\r
216        pawn(i).saf:=6;\r
217        pawn(i).rsa:=-12;  \r
218      fi;\r
219    od;\r
220 end safety;    \r
221                                             \r
222 unit move:procedure;\r
223  var i,j:integer;\r
224  var speed:boolean;\r
225  var moves:arrayof boolean;\r
226   begin\r
227   j:=-12;\r
228   if leader>0 then\r
229     for i:=1 to 4 do\r
230       if pawn(i).fin then\r
231         if pawn(i).rsa>j then    \r
232           witch:=i;\r
233           j:=pawn(i).rsa\r
234         fi\r
235       fi\r
236     od;\r
237   else \r
238     speed:=true;\r
239     array moves dim(1:4);\r
240     for i:=1 to 4 do\r
241       moves(i):=false;\r
242       if not pawn(i).kil andif pawn(i).hun then\r
243         moves(i):=true;\r
244         speed:=false;\r
245       fi\r
246     od;\r
247     for i:=1 to 4 do\r
248      if not pawn(i).kil andif pawn(i).ple>0 andif pawn(i).mov then\r
249        if speed orif moves(i) then\r
250          if pawn(i).rsa>j then    \r
251            witch:=i;\r
252            j:=pawn(i).rsa\r
253          fi\r
254        fi\r
255      fi\r
256     od;\r
257     kill (moves);\r
258   fi;  \r
259 end move;\r
260     \r
261 begin\r
262  array pawn dim(1:4);\r
263  array home dim(1:4);\r
264  array stran dim(1:13);\r
265  for i:=1 to 4 do\r
266    pawn(i):=new man;\r
267  od;\r
268  return;\r
269  do\r
270   call A.gdziepiony; \r
271   call pawns;\r
272   call strangers;\r
273   if poleposition and kostka=6 then\r
274     i:=1;\r
275     while tab(g,i)=/=0 do\r
276       i:=i+1;\r
277     od;\r
278     witch:=i;\r
279   else\r
280     leader:=finish;\r
281     nrkil:=killer;\r
282     if nrkil=4-pp then\r
283       witch:=0;\r
284     else\r
285       nrhun:=hunter;\r
286       call safety;\r
287       call move;\r
288     fi;\r
289   fi;\r
290   call A.przesunpion(witch);\r
291   detach;\r
292 od;\r
293 end gracz3;\r
294 (*44444**************** gracz 4 **********)\r
295 \r
296 \r
297 unit gracz4: coroutine;\r
298 const g=4;\r
299 const start=31;\r
300 const endpos=30;\r
301 \r
302 var players : arrayof boy; \r
303 \r
304 unit boy:class;\r
305   var pos,back : integer;\r
306   var suicide,stab,finish,moveout : boolean;\r
307 end boy;\r
308 \r
309 unit playerinit:procedure;\r
310 var i:integer;\r
311  begin\r
312   for i:=1 to 4 do\r
313     players(i).pos:=tab(g,i);\r
314   od;\r
315 end playerinit;\r
316 \r
317 unit finishing:function(nr:integer):boolean;\r
318  var i,j:integer;\r
319  begin\r
320    result:=false;\r
321    i:=players(nr).pos;\r
322    if i<>0 \r
323    then \r
324      if i+kostka>endpos and i+kostka<endpos+5 and i<=endpos\r
325      then \r
326        result:=true;\r
327        for j:=1 to 4\r
328        do \r
329          if j <> nr \r
330          then\r
331            if (players(j).pos-100+1)=i+kostka-endpos\r
332            then result:=false;\r
333            fi;\r
334          fi;\r
335        od;\r
336      fi;\r
337    fi;\r
338 end finishing;\r
339  \r
340 unit suiciding:function(nr:integer):boolean;\r
341  var i:integer;\r
342  begin\r
343   result:=false;\r
344   if players(nr).pos<>0\r
345   then \r
346    for i:=1 to 4 \r
347    do\r
348      if nr<>i \r
349      then\r
350          if (players(nr).pos+kostka-1) mod 40 + 1 = players(i).pos \r
351     andif players(i).pos<100\r
352          then \r
353            result:=true;\r
354            exit;\r
355     fi;\r
356      fi;\r
357    od\r
358   else\r
359    for i:= 1 to 4\r
360    do\r
361      if i<>nr andif players(i).pos=start\r
362      then result:=true;\r
363      exit;\r
364      fi;\r
365    od;\r
366   fi;\r
367 end suiciding;\r
368  \r
369 unit stabing:function(nr:integer):boolean;\r
370  var i,j:integer;\r
371  var b1,b2:boolean;\r
372  begin\r
373   result:=false;\r
374    for i:=1 to 4\r
375    do\r
376      if i<>g \r
377      then\r
378        for j:= 1 to 4\r
379        do\r
380          if players(nr).pos > 0 and players(nr).pos <100\r
381          then\r
382            b1:=(players(nr).pos+kostka-1) mod 40 +1 =tab(i,j) ;\r
383            b2:=players(nr).pos>=start and b1;\r
384            if b1 and (players(nr).pos+kostka-1) mod 40 + 1<=endpos orif b2 \r
385            then\r
386              result:=true;\r
387              exit exit;\r
388            fi\r
389          else\r
390          result:=(kostka=6 and players(nr).pos=0 and tab(i,j)=start);\r
391          exit exit;\r
392          fi;\r
393        od;\r
394      fi;\r
395    od;\r
396 end stabing;  \r
397 \r
398 unit atback:function(nr:integer):integer;\r
399  var i,j,np:integer;\r
400  begin\r
401   np:=players(nr).pos;\r
402   result:=0;\r
403   if np<>0\r
404   then \r
405    if np < 7 \r
406    then\r
407      for i:=1 to 4 \r
408      do \r
409        if i<>g \r
410        then \r
411          for j:=1 to 4\r
412          do\r
413            if (tab(i,j) < np)\r
414            then\r
415                if tab(i,j)>0\r
416                then result:=result+1;\r
417                fi\r
418            else \r
419              if tab(i,j) > 40-(6-np)\r
420              then result:=result+1;\r
421              fi;\r
422            fi;\r
423          od;\r
424        fi;\r
425      od;\r
426    else\r
427      for i:=1 to 4\r
428      do\r
429        if i<>g\r
430        then\r
431          for j:=1 to 4\r
432     do\r
433       if tab(i,j) < np\r
434       andif tab(i,j) > np-7\r
435       then result:=result +1;\r
436       fi;\r
437     od;\r
438        fi;\r
439      od;                \r
440    fi;\r
441   fi;\r
442  end atback;\r
443  \r
444  unit begining : function(nr:integer):boolean;\r
445   begin\r
446     result:=players(nr).pos=0 and kostka=6;\r
447   end begining;\r
448   \r
449  unit move:function:integer;\r
450   var i,j,k : integer;\r
451   var ok:boolean;\r
452   begin\r
453    for i:= 1 to 4\r
454    do\r
455      players(i).back:=atback(i);\r
456      players(i).suicide:=suiciding(i);\r
457      players(i).stab:=stabing(i);\r
458      players(i).finish:=finishing(i);\r
459      players(i).moveout:=begining(i);\r
460    od;\r
461    ok:=false;\r
462    (********************* bije i wychodzi ************)\r
463    for i:=1 to 4\r
464    do \r
465      if players(i).moveout \r
466      then\r
467        for j:=1 to 4\r
468        do\r
469          if g<>j \r
470     then\r
471            for k:=1 to 4 \r
472            do\r
473         if tab(j,k)=start\r
474         then \r
475           result:=i;\r
476           ok:=true; exit exit exit;\r
477         fi;\r
478       od;\r
479     fi;\r
480        od;\r
481      fi;\r
482    od;\r
483    (******************** gonia go i konczy **************)\r
484   if not ok \r
485   then \r
486    for i:=1 to 4\r
487    do\r
488      if players(i).pos>0\r
489      andif players(i).pos<100\r
490      andif players(i).finish \r
491      andif players(i).back > 0\r
492      then\r
493        result:=i;\r
494        ok:=true; exit;\r
495      fi;\r
496    od;\r
497   fi;\r
498    (******************** gonia go i bije ******************)\r
499   if not ok \r
500   then\r
501    for i:=1 to 4\r
502    do\r
503      if players(i).pos<100\r
504      andif players(i).back>0\r
505      andif players(i).stab\r
506      then\r
507        result:=i;\r
508        ok:=true; exit;\r
509      fi;\r
510    od;\r
511   fi;\r
512    (******************* bije ********************************)\r
513   if not ok \r
514   then   \r
515    for i:=1 to 4\r
516    do\r
517      if players(i).stab\r
518      then\r
519        result:=i;\r
520        ok:=true; exit;\r
521      fi;\r
522    od;\r
523   fi;\r
524    (******************** goni go conajmniej dwoch **********)\r
525   if not ok \r
526   then\r
527    for i:=1 to 4\r
528    do\r
529      if players(i).pos<100\r
530      andif players(i).back>=2\r
531      andif not players(i).suicide\r
532      then\r
533        result:=i;\r
534        ok:=true; exit;\r
535      fi;\r
536    od;\r
537   fi;\r
538    (******************* wychodzi ****************************)\r
539   if not ok \r
540   then\r
541    for i:=1 to 4\r
542    do\r
543      if players(i).moveout\r
544      andif not players(i).suicide\r
545      then\r
546        result:=i;\r
547        ok:=true; exit;\r
548      fi;\r
549    od;\r
550   fi;\r
551    \r
552    (******************* konczy *******************************)\r
553   if not ok \r
554   then\r
555    for i:=1 to 4\r
556    do\r
557      if players(i).finish\r
558      then\r
559        result:=i;\r
560        ok:=true; exit;\r
561      fi;\r
562    od;\r
563   fi;\r
564 \r
565    (******************** gonia go **********)\r
566   if not ok \r
567   then\r
568    for i:=1 to 4\r
569    do\r
570      if players(i).pos<100\r
571      andif players(i).pos>0\r
572      andif players(i).back>0\r
573      andif not players(i).suicide\r
574      then\r
575        result:=i;\r
576        ok:=true; exit;\r
577      fi;\r
578    od;\r
579   fi;   \r
580    (******************* nie bije swojego *********************)\r
581   if not ok \r
582   then\r
583    for i:=4 downto 1\r
584    do\r
585      if players(i).pos<100\r
586      andif players(i).pos>0\r
587      andif not players(i).suicide\r
588      then\r
589        result:=i;\r
590        ok:=true; exit;\r
591      fi;\r
592    od;\r
593   fi;\r
594    (******************* bije swojego *********************)\r
595   if not ok \r
596   then\r
597    for i:=1 to 4\r
598    do\r
599      if players(i).suicide\r
600      then\r
601        result := 0 ;\r
602        ok:=true; exit;\r
603      fi;\r
604    od;\r
605   fi;\r
606   \r
607   \r
608   if not ok then result:=0 fi; \r
609 \r
610 \r
611  end move;\r
612   \r
613 \r
614  \r
615  \r
616  \r
617  \r
618  (****** MAIN *****)\r
619  (*****************)\r
620 var aa:char;\r
621 \r
622   unit inchar : IIuwgraph function : integer;\r
623     (*podaj nr znaku przeslanego z klawiatury *)\r
624     var i : integer;\r
625   begin\r
626     do\r
627       i := inkey;\r
628       if i <> 0 then exit fi;\r
629     od;\r
630     result := i;\r
631   end inchar;\r
632  \r
633  var i,m:integer;\r
634  begin\r
635   array players dim(1:4);\r
636   for i:=1 to 4 \r
637   do\r
638     players(i):=new boy;\r
639   od;\r
640   return;\r
641   do\r
642     call playerinit;\r
643     m:=move;\r
644     call A.przesunpion(m);\r
645     \r
646    writeln("back,suic,stab,fin,out:");\r
647    for i:= 1 to 4\r
648    do\r
649 \r
650     write(players(i).back," ");\r
651     if  players(i).suicide then write("1") else write("0") fi;\r
652     write(" ");\r
653     if     players(i).stab then write("1") else write("0") fi;\r
654         write(" ");\r
655     if     players(i).finish then write("1") else write("0") fi;\r
656         write(" ");\r
657     if     players(i).moveout then write("1") else write("0") fi;\r
658         write(",");\r
659    od;\r
660    writeln("  ->",m);\r
661    pref iiuwgraph block \r
662 \r
663      var i:integer;\r
664      begin\r
665      i:=inchar;\r
666      end;\r
667    \r
668     detach;\r
669   od;\r
670 end gracz4;\r
671 \r
672   \r
673   unit arbiter: coroutine;\r
674 \r
675   hidden plansza, ilegr, i, j, oczka, ktory, sk, polozenie, dom, gracze;\r
676   hidden wejscie, polestartu, skonczyli, sem, zakonczenie;\r
677   var plansza: arrayof pion;\r
678   var ilegr, i, j, oczka, ktory, sk: integer;\r
679   var polozenie, dom: arrayof arrayof integer;\r
680   var gracze: arrayof coroutine;\r
681   var wejscie: arrayof integer;\r
682   var polestartu, skonczyli: arrayof integer;\r
683   var sem: boolean;\r
684   var zakonczenie: char;\r
685   \r
686   \r
687   unit rzut: function: integer;\r
688     \r
689     var pom: real;\r
690     \r
691   begin\r
692     pom:=random;\r
693     pom:=6*pom;\r
694     result:= entier(pom)+1\r
695   end rzut;\r
696   \r
697   \r
698   unit pion: class (czyj, jaki: integer);\r
699   end pion;\r
700   unit gdziepiony: procedure;\r
701     var i, j: integer;\r
702   begin\r
703     for i:=1 to ilegr\r
704     do\r
705       for j:=1 to 4\r
706       do\r
707         tab(i,j):=polozenie(i,j)\r
708       od\r
709     od \r
710   end gdziepiony;\r
711   \r
712   \r
713   unit przesunpion: procedure (co: integer);\r
714   \r
715     var s, g, t: integer;\r
716     \r
717     unit start: procedure;\r
718     begin\r
719       if oczka=/=6 then return fi;\r
720       g:=polestartu (ktory);\r
721       polozenie (ktory, co):=g;\r
722       if plansza (g) =/= none\r
723       then call bicie\r
724       fi;\r
725       plansza (g):=new pion (ktory, co)\r
726     end start;\r
727     \r
728     unit bicie: procedure;\r
729     begin\r
730       polozenie (plansza(g).czyj, plansza(g).jaki):=0;\r
731       kill (plansza(g))\r
732     end bicie;\r
733     \r
734   begin     (*  przesunpion  *)\r
735     if not sem \r
736     then\r
737       return\r
738     else\r
739       sem:=false\r
740     fi;\r
741     if co=0 then return fi;\r
742     s:=polozenie (ktory, co);\r
743     if s > 100\r
744     then     (*  pion w domu  *)\r
745       return\r
746     fi;\r
747     if s=0 \r
748     then\r
749       call start;\r
750       return\r
751     fi;\r
752     g:=s+oczka;\r
753     if ( s <= wejscie(ktory)  and  g > wejscie(ktory) )\r
754     then     (*  wejscie do domu  *)\r
755       t:= oczka-(wejscie(ktory)-s);\r
756       if t>4 then return fi;\r
757       if dom (ktory,t) = 0\r
758       then\r
759         dom (ktory,t) := co;\r
760         polozenie (ktory,co) :=100+t;\r
761         kill (plansza(s))\r
762       else\r
763         return\r
764       fi\r
765     else\r
766       if g>40 then g:=g-40 fi;\r
767       if plansza(g)=/=none\r
768       then call bicie\r
769       fi;\r
770       plansza(g):=plansza(s);\r
771       plansza(s):=none;\r
772       polozenie (ktory,co):=g\r
773     fi\r
774   end przesunpion;\r
775   \r
776   unit skonczyl: function: boolean;\r
777     var i: integer;\r
778   begin  \r
779     for i:=1 to sk\r
780     do\r
781       if  skonczyli(i)=ktory\r
782       then\r
783         result:=true;\r
784         exit\r
785       fi\r
786     od\r
787   end skonczyl;\r
788       \r
789   \r
790   unit koniec: function: boolean;\r
791     var i: integer;\r
792     var doszedl: boolean;\r
793   begin\r
794     doszedl:=true;\r
795     for i:=1 to 4\r
796     do\r
797       if dom(ktory,i)=0\r
798       then\r
799         doszedl:=false;\r
800       exit\r
801       fi\r
802     od;\r
803     if doszedl\r
804     then\r
805       sk:=sk+1;\r
806       skonczyli(sk):=ktory\r
807     fi;\r
808     result:= sk=ilegr\r
809   end koniec;     \r
810   \r
811   unit komunikat: procedure;\r
812     var i: integer;\r
813   begin\r
814     writeln;\r
815     for i:=1 to ilegr\r
816     do\r
817       writeln (i:1," miejsce zajal gracz ",skonczyli(i):1)\r
818     od\r
819   end komunikat;\r
820 \r
821   \r
822 begin     (*  arbiter  *)\r
823   ilegr:=ilugraczy;\r
824   if ilegr=0 then call endrun fi;\r
825   array polozenie dim (1:ilegr);\r
826   array tab dim (1:ilegr);\r
827   array dom dim (1:ilegr);\r
828   array plansza dim (1:40);\r
829   array skonczyli dim (1:ilegr);\r
830   array gracze dim (1:ilegr);\r
831   gracze:=copy(gracz);  \r
832   for i:=1 to ilegr\r
833   do\r
834     array dom(i) dim (1:4);  \r
835     array polozenie(i) dim (1:4);\r
836     array tab(i) dim (1:4)\r
837   od;\r
838   array wejscie dim (1:ilegr);\r
839   array polestartu dim (1:ilegr);\r
840   for i:=1 to ilegr\r
841   do\r
842     polestartu(i):=10*(i-1)+1;\r
843     wejscie(i):=polestartu(i)-1\r
844   od;\r
845   wejscie(1):=40;\r
846   \r
847   return;\r
848 for ii:=1 to 4 do\r
849  for ij:=1 to 4 do \r
850   write(tab(ii,ij):4) \r
851  od;\r
852  writeln;\r
853 od;\r
854   ktory:=4;\r
855   do\r
856     if ktory=3 then ktory:=4\r
857     else ktory:=3;\r
858     fi;\r
859     if skonczyl\r
860     then repeat\r
861     fi;\r
862     do\r
863       kostka, oczka:=rzut;\r
864       sem:=true;\r
865 \r
866 writeln ("            kostka   :" ,oczka,"   ktory    :",ktory);     \r
867 for ii:=3 to 4 do\r
868  for ij:=1 to 4 do \r
869   write(tab(ii,ij):4) \r
870  od;\r
871  writeln;\r
872 od;\r
873       attach (gracze(ktory));\r
874       if koniec then exit exit fi;\r
875       if oczka=/=6 or skonczyl then exit fi;\r
876     od;\r
877   od;\r
878   call komunikat;\r
879   read (zakonczenie);\r
880   call endrun\r
881 end arbiter;\r
882 \r
883   var A: arbiter;    \r
884   \r
885   \r
886 (*          *           *            *                *             *)         \r
887  \r
888  \r
889    \r
890   \r
891 begin     (*  program glowny  *)\r
892 ilugraczy :=4; \r
893 array gracz dim (1:ilugraczy);\r
894 gracz(1) := new gracz1;\r
895 gracz(2) := new gracz2;\r
896 gracz(3) := new gracz3;\r
897 gracz(4) := new gracz4;\r
898 A := new arbiter;\r
899 attach (A)\r
900 \r
901 end chinczyk  \r
902   \1a