§ Игровые скрины

clipboard.png clipboard.png
clipboard.png clipboard.png
Правила игры простые. Пасьянс раскладывается на 10 стопок по примерно 5 карт (кроме первых двух стопок). Снять можно две нижние карты с каждой стопки за раз. Карты не должны совпадать по масти, но должны совпадать по достоинству. Если пасьянс снят весь — он считается разложенным.

§ Текст программы

Этот текст программы не совсем для Бейсика спектрум, потому что тут нет линии и есть дополнительные комменты. В этой программе единственный примечательный момент в том что заполняются символы UDG.
BORDER 7: PAPER 7: INK 0: CLS

DIM D(13): DIM M(4): DIM C(52): DIM T(10,6): DIM H(10)

-- НАЗВАНИЕ ИГРЫ
PLOT 32,68: DRAW 192,0: DRAW 0,64: DRAW -192,0: DRAW 0,-64
PRINT AT 8,9;"TURECKIJ PLATOK"
PRINT AT 10,12;INK 1;"PASIYANS"

-- "СИМВОЛЫ UDG"
DATA 0,108,254,254,124,56,16,0: REM HEART 144
DATA 0,16,56,124,124,56,16,0: REM DIAMONDS 145
DATA 16,56,124,254,254,16,56,0: REM SPADES 146
DATA 56,56,214,254,214,16,56,0: REM CLUBS 147
DATA 0,94,222,86,86,86,94,0: REM "10" 148

-- "ДОСТОИНСТВА КАРТ"
DATA 50,51,52,53,54,55,56,57,148,74,81,75,65

FOR I=0 To 39: READ A: POKE 65368+I,A: NEXT I
FOR I=1 TO 13: READ D(I): NEXT I
FOR I=1 TO 4: LET M(I)=143+I: NEXT I

INPUT "Start? "; A$
RANDOMIZE

PRINT AT 5,6;PAPER 2;INK 7;" Tasuem karty... "

-- ТАСОВКА КОЛОДЫ КАРТ
FOR I=1 TO 52: LET C(I)=I: NEXT I

FOR I=1 TO 52

  LET A=INT(RND*52)+1
  LET B=INT(RND*52)+1
  LET T=C(A)
  LET C(A)=C(B)
  LET C(B)=T

NEXT I

-- ВЫДАЧА КОЛОДЫ КАРТ
CLS
PRINT AT 0,0; PAPER 1; INK 7;  "0  1  2  3  4  5  6  7  8  9 "
FOR I=0 TO 51

  LET K=C(1+I)-1
  LET B=INT(K/13)
  LET A=K-B*13
  LET Y=INT(I/10)
  LET X=I-10*Y
  LET T(1+X,1+Y)=K
  LET H(1+X)=H(1+X)+1

  PRINT AT 2+Y,3*X; INK 2*(B<2); CHR$(D(A+1)); CHR$(M(B+1));

NEXT I

LET CD=0

#LOOP REM "NEXT CARD"

PRINT AT 20,0;PAPER 0;INK 7;" CARD=";CD;" "

-- ВЫБОР КАРТЫ
#L0 REM "CARD1"
INPUT "First (0-9, 10-EXIT)? "; A
IF A=10 THEN STOP
IF A<0 OR A>9 THEN GO TO #L0
IF H(A+1)=0 THEN GO TO #L0
PRINT AT 1,3*A;"^"

#L1 REM "CARD2"
INPUT "Second (0-9)? "; B
IF B<0 OR B>9 OR A=B THEN GO TO #L1
IF H(B+1)=0 THEN GO TO #L1
PRINT AT 1,3*A;" "

-- ПРОСМОТР КАРТ
LET R=T(A+1,H(A+1)): GO SUB #IDK: LET P1=P: LET J1=J
LET R=T(B+1,H(B+1)): GO SUB #IDK

IF P1=P THEN INPUT "Odna mast! "; U$: GO TO #L0
IF J1<>J THEN INPUT "Ne sovpadaet! "; U$: GO TO #L0

-- УДАЛЕНИЕ КАРТ
PRINT AT 1+H(A+1),3*A;"  ";
PRINT AT 1+H(B+1),3*B;"  ";

LET H(A+1)=H(A+1)-1
LET H(B+1)=H(B+1)-1

LET CD=CD+2
IF CD=52 THEN INPUT "Pobeda!"; U$: STOP

GO TO #LOOP

#IDK REM "CALC (P,J) FROM R"
LET P=INT(R/13)
LET J=R-13*P
RETURN