Игра Ним
Описание программы см, п.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; {вводимый ход}