Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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




В качестве примера мы приведем программу, реализующую широко известную игру "Быки и коровы". Эта программа отслеживает все варианты некорректного ввода (первая цифра вводимого числа - не ноль; все цифры различны; вводится именно цифра, а не любой другой символ), а также нажатие клавиш 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; begin clrscr; textcolor(lightmagenta); writeln(' Поиграем в "Быков и коров"?'); textcolor(yellow); writeln(' (бык - это цифра, стоящая на своем месте; а корова - просто верная)'); textcolor(green); writeln(' Итак... Я загадываю число из разных цифр. Вам отгадывать! '); writeln(' (Выход из программы - <ESC>)'); textcolor(cyan); write('Введите количество цифр в угадываемом числе: '); {$I-}; flag:= false; repeat textcolor(white); c1:= readkey; clreol; err:= check(c1); if err= 4 then error_('введена не цифра!',-27,0); if err = 0 then case c1 of '0': begin writeln; error_('в числе должна быть хотя бы одна цифра!',-3,-1) end; '1': begin c1:= readkey; flag:= true; case c1 of '0': begin n:=10; writeln(c1) end; #13: n:= 1; else begin writeln(c1); error_('в числе может быть не более 10 разных цифр!',-7,-1); end; end;{case} end; else begin val(c1,n,err); flag:= true; end; end; if n>10 then until flag; writeln; {-- Zagadyvanie chisla --------------------} randomize; zagadano[1]:= random(9)+1; set_of_zagad:=[zagadano[1]]; for i:=2 to n do repeat zagadano[i]:= random(10); if not (zagadano[i] in set_of_zagad) then begin set_of_zagad:= set_of_zagad+[zagadano[i]]; flag:= true; end else flag:=false; until flag; {--- Game --------------------------} textcolor(lightmagenta); write('Начинаем! '); textcolor(cyan); clreol; writeln('Вводите Ваши числа:'); textcolor(white); num_of_popyt:= 0; flag:= true; repeat {Ввод очередного числа} cow:= 0; bull:= 0; set_of_popyt:= []; j:=1; while j<=n do {Ввод по цифрам} repeat c:= readkey; err:= check(c); clreol; if err = 4 then error_('Введена не цифра! Измените последний символ.',-54,0); if err = 0 then if (c='0')and(j=1) then error_('Первой цифрой не может быть ноль! Повторите ввод.',-59,0) else begin val(c,popytka[j],err); if popytka[j] in set_of_popyt then error_('Одинаковых цифр быть не должно! Измените последнюю цифру.',-67,0) else begin set_of_popyt:= set_of_popyt+[popytka[j]]; flag:= true; if popytka[j]=zagadano[j] then inc(bull) else if popytka[j] in set_of_zagad then inc(cow); inc(j) end; end; until flag; clreol; readln; textcolor(yellow); gotoxy(n+1,wherey-1); writeln(' Быков - ',bull,'; коров - ',cow); inc(num_of_popyt); textcolor(white); until bull = n; textcolor(green); if bull= n then writeln('Поздравляю! Вы выиграли за ',num_of_popyt,' шагов!'); readln; clrscrend.



Поделиться с друзьями:


Дата добавления: 2014-01-03; Просмотров: 297; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.01 сек.