• Иллюстрированный самоучитель по Turbo Pascal

    Игра Ним

    Описание программы см, п.2.7.3.

    Uses CRT; {Подключение библиотеки дополнительных процедур и функций для управления экраном}
    const
    MAXROW = 14; {Максимальное количество рядов}
    MAXCOL = 20; {Максимальное количество фишек в ряду}
    type
    ColType = array [1.. MAXROW] of Integer;
    var
    exit: Boolean; {Признак окончания работы}
    change: Boolean; {Признак изменения условий игры}
    nrow: Integer; { Количество рядов}
    ncol: ColType; {Максимальное количество фишек по рядам}
    col: ColType; {Текущее количество фишек по рядам}
    {-----------------}
    Procedure ShowField;
    {Отображает на экране текущее состояние игрового поля}
    const
    FISH = #220; {Символ-указатель фишки}
    Х0 =4; {Левая колонка номеров рядов}
    X1 = 72; {Правая колонка количества фишек}
    X =20; {Левый край игрового поля}
    var
    i,j: Integer;
    begin {ShowField}
    for i: = 1 to nrow do
    begin
    GotoXY(X0,i+4);
    write(i); {Номер ряда}
    GotoXY(Xl,i+4);
    write (col [i]:2); {Количество фишек в ряду}
    for j: = 1 to ncol [i] do {Вывод ряда фишек:}
    begin
    GotoXY(X+2*j,i+4);
    if j<=col[i] then write (FISH) else write ('. ')
    end
    end
    end; {ShowField}
    {---------------}
    Procedure Prepare;
    { Подготовка данных и формирование экрана }
    const
    Header0='ИГРА НИМ';
    Header1=' Вы можете взять любое число фишек из любого ряда.';
    Header2='Выигрывает тот, кто возьмет последнюю фишку.';
    Header3='Номер ряда';
    Header4='Кол-во фишек';
    var
    i: Integer;
    begin {Prepare}
    ClrScr; {Очищаем экран }
    {Выводим заголовок:}
    GotoXY((80 – Length (Header0))div 2.1);
    write (Header0);
    GotoXY((80-Length(Headerl))div 2.2);
    write (Header1);
    GotoXY((80-Length(Header2))div 2.3);
    writeln(Header2);
    write (Header3);
    GotoXY (80 – Length (Header 4), 4);
    write (Header4);
    {Подготовить начальную раскладку: }
    for i: = 1 to nrow do col [i]: = ncol [i]
    end; {Prepare}
    {-----------------}
    Procedure GetPlayerMove;
    {Получить, проконтролировать и отобразить ход игрока }
    const
    ТЕХТ1 = 'Введите Ваш ход в формате РЯД КОЛИЧ ' +
    '(например, 2 3 – взять из 2 ряда 3 фишки)';
    ТЕХТ2='или введите 0 0 для выхода из игры; – 1 0 для настройки
    игры'; ТЕХТЗ=' Ваш ход: ';
    Y=20; {номер строки для вывода сообщений}
    var
    correctly: Boolean; {признак правильности сделанного хода}
    xl,x2: Integer; {вводимый ход}
    
    Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.