Практика программирования (Бейсик, Си, Паскаль)



         

Задачи, советы и ответы - часть 18


  • 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

    SUB START

    CLS : RANDOMIZE (VAL(RIGHTS(TIME$, 2)))

    K=INT(RND*(N-3))+3: ' число кучек

    FOR I=0 TO K-l

    A(I)=INT(RND*Q)+1

    NEXT I

    LOCATE 1,2 : PRINT "Начало игры"

    PRINTXOD 4,"" END SUB

    SUB USER COLOR 2,0

    LOCATE M, 20

    PRINT "Ваш ход (кучка - сколько берем):"

    М2:

    LOCATE M, 33: PRINT ""

    LOCATE M,33: INPUT J

    IF (J<1) OR (J>K) OR (A(J-1)=0) THEN GOTO M2




    Содержание  Назад  Вперед