Правила игры простые. Пасьянс раскладывается на 10 стопок по примерно 5 карт (кроме первых двух стопок). Снять можно две нижние карты с каждой стопки за раз. Карты не должны совпадать по масти, но должны совпадать по достоинству. Если пасьянс снят весь – он считается разложенным.
В этой программе единственный примечательный момент в том что заполняются символы UDG.
10 BORDER 7: PAPER 7: INK 0: CLS
20 DIM D(13): DIM M(4): DIM C(52): DIM T(10,6): DIM H(10)
25
30 PLOT 32,68: DRAW 192,0: DRAW 0,64: DRAW -192,0: DRAW 0,-64
40 PRINT AT 8,9;"TURECKIJ PLATOK"
50 PRINT AT 10,12;INK 1;"PASIYANS"
55
60 DATA 0,108,254,254,124,56,16,0:
70 DATA 0,16,56,124,124,56,16,0:
80 DATA 16,56,124,254,254,16,56,0:
90 DATA 56,56,214,254,214,16,56,0:
100 DATA 0,94,222,86,86,86,94,0: REM "10" 148
105
110 DATA 50,51,52,53,54,55,56,57,148,74,81,75,65
120 FOR I=0 To 39: READ A: POKE 65368+I,A: NEXT I
130 FOR I=1 TO 13: READ D(I): NEXT I
140 FOR I=1 TO 4: LET M(I)=143+I: NEXT I
150 INPUT "Start? "; A$
160 RANDOMIZE
170 PRINT AT 5,6;PAPER 2;INK 7;" Tasuem karty... "
175
180 FOR I=1 TO 52: LET C(I)=I: NEXT I
190 FOR I=1 TO 52
200 LET A=INT(RND*52)+1
210 LET B=INT(RND*52)+1
220 LET T=C(A)
230 LET C(A)=C(B)
240 LET C(B)=T
250 NEXT I
255
260 CLS
270 PRINT AT 0,0; PAPER 1; INK 7; "0 1 2 3 4 5 6 7 8 9 "
280 FOR I=0 TO 51
290 LET K=C(1+I)-1
300 LET B=INT(K/13)
310 LET A=K-B*13
320 LET Y=INT(I/10)
330 LET X=I-10*Y
340 LET T(1+X,1+Y)=K
350 LET H(1+X)=H(1+X)+1
360 PRINT AT 2+Y,3*X; INK 2*(B<2); CHR$(D(A+1)); CHR$(M(B+1));
370 NEXT I
380 LET CD=0
390
400 PRINT AT 20,0;PAPER 0;INK 7;" CARD=";CD;" "
405
410
420 INPUT "First (0-9, 10-EXIT)? "; A
430 IF A=10 THEN STOP
440 IF A<0 OR A>9 THEN GO TO 410
450 IF H(A+1)=0 THEN GO TO 410
460 PRINT AT 1,3*A;"^"
470
480 INPUT "Second (0-9)? "; B
490 IF B<0 OR B>9 OR A=B THEN GO TO 470
500 IF H(B+1)=0 THEN GO TO 470
510 PRINT AT 1,3*A;" "
515
520 LET R=T(A+1,H(A+1)): GO SUB 630: LET P1=P: LET J1=J
530 LET R=T(B+1,H(B+1)): GO SUB 630
540 IF P1=P THEN INPUT "Odna mast! "; U$: GO TO 410
550 IF J1<>J THEN INPUT "Ne sovpadaet! "; U$: GO TO 410
555
560 PRINT AT 1+H(A+1),3*A;" ";
570 PRINT AT 1+H(B+1),3*B;" ";
580 LET H(A+1)=H(A+1)-1
590 LET H(B+1)=H(B+1)-1
600 LET CD=CD+2
610 IF CD=52 THEN INPUT "Pobeda!"; U$: STOP
620 GO TO 390
630
640 LET P=INT(R/13)
650 LET J=R-13*P
660 RETURN