user, обеспечивающую диалоговое взаимодействие с пользователем и ввод его хода;
computer, реализующую ход программы ( для подсчета поразрядной суммы использовать операцию хог);
print_xod, выводящую текущее состояние предметов в кучках.
Совет 3 (общий)
В игровых программах очень важно оформление, но мы ограничимся самыми скромными средствами протоколирования игры. Количество кучек будем выбирать случайным образом в диапазоне от 3 до 5, число предметов в каждой кучке тоже ограничим интервалом [1,12]. Каждый ход будем фиксировать в виде строки красного (после хода компьютера) или зеленого (после хода игрока) цвета, отражающей текущее содержимое каждой кучки.
Программа 4_11.bas
DECLARE SUB USER()
DECLARE SUB START{)
DECLARE SUB COMPUTER()
DECLARE SUB PRINTXOD(col%,msg$)
DEFINT A-Z
DIM SHARED N
DIM SHARED В AS INTEGER,S AS INTEGER,M AS INTEGER,Q AS INTEGER
N=5: Q=12
DIM SHARED A(N) AS INTEGER,I AS INTEGER,J AS INTEGER,К AS INTEGER
M=l
START m1:
USER
COMPUTER
GOTO ml END
SUB COMPUTER S=0
FOR I=0 TO K-1: S=S XOR A(I): NEXT I
IF s=o THEN
J=0: S=A(0)
FOR I=1 TO K-1
IF S<A(I) THEN S=A(I): J=I
B=l
NEXT I ELSE
FOR J=0 TO K-1
B=A(J)-(A(J) XOR S)
IF B>=0 THEN EXIT FOR NEXT J END IF
A(J)=A(J)-B
PRINTXOD 4, "Победил компьютер"
END SUB
SUB PRINTXOD(col%,msg$) COLOR col%, 0 FOR I=0 TO K-1
LOCATE M+l,3*I+1: PRINT USING "###";A(I)
NEXT I
M=M+1: IF M>23 THEN M=2: CLS: PRINTXOD col%, msg$'
S=0
FOR J=0 TO K-l: S=S+A(J): NEXT J
IF S<>0 THEN EXIT SUB LOCATE M,2: PRINT msg$ SLEEP STOP
END SUB