Программирование на языке Pascal



         

Пример пользовательского интерфейса


В качестве примера мы приведем программу, реализующую широко известную игру "Быки и коровы". Эта программа отслеживает все варианты некорректного ввода (первая цифра вводимого числа - не ноль; все цифры различны; вводится именно цифра, а не любой другой символ), а также нажатие клавиш ESCAPE и BACK SPACE.

Автор программы попытался застраховать ее и от пытающегося жульничать игрока, и от случая, когда игрок не понял правил игры или понял их неправильно; постарался учесть возможность "сдваивания" нажатой на клавиатуре клавиши, "промаха" мимо цифровой клавиши или случайного нажатия произвольной клавиши; организовал правильную реакцию на желание пользователя прервать игру.

Мы приводим программу в полном, работающем виде, поскольку лишь 10% ее текста не относятся к обеспечению интерфейса:

program bull_and_cow; uses crt; const cifr: set of '0'..'9' = ['0'..'9']; yes: set of char = ['Y','y','Д','д','L','l']; cifr10: set of 0..9 = [0..9]; type cifr_char = '0'..'9'; vector = array[1..10] of 0..9;

var zagadano,popytka: vector; i,j,jj,n: 1..10; flag: boolean; c: cifr_char; c1: char; set_of_popyt,set_of_zagad: set of 0..9; num_of_popyt,cow,bull,err: integer;

procedure error_(st: string; x,y: integer); begin textcolor(lightred); write(' Ошибка: ',st); gotoxy(wherex+x,wherey+y); textcolor(white); flag:= false; end;

function check(cc: char):integer; begin case cc of chr(27) : begin {Escape} check:= 1; textcolor(lightgreen); clreol; write('До свидания? Y/N'); if readkey in yes then begin clrscr; halt end else begin gotoxy(wherex-16,wherey); clreol; end; textcolor(white); end; chr(8) : begin {BackSpace} check:= 2; if j>1 then dec(j); if popytka[j]= zagadano[j] then dec(bull) else if popytka[j] in set_of_zagad then dec(cow); set_of_popyt:= set_of_popyt-[popytka[j]]; gotoxy(wherex-1,wherey); clreol; end; chr(13) : if (j<>n) {Enter} then begin writeln('Недостаточно цифр! Введите число заново.'); gotoxy(1,wherey-1); check:= 3; end; '0'..'9' : begin write(cc); check:= 0; end; else begin write(cc); check:= 4; end; end; {end-of-case} end;




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