Function MouseGraphCooX (X: Byte): Integer; {Возвращает виртуальную координату по заданной текстовой}
Function MouseGraphCooY (Y: Byte): Integer; {Возвращает виртуальную координату по заданной текстовой}
Procedure MouseWhereXY (var X,Y: Integer); {Возвращает виртуальные координаты мыши}
Procedure MouseGotoXY (X,Y: Integer); {Переводит указатель мыши в новое положение
X,Y - виртуальные координаты}
Function MouseWhereX: Byte; {Возвращает горизонтальную текстовую координату}
Function MouseWhereY: Byte; {Возвращает вертикальную текстовую координату}
Function MouseIn (X1,Y1,X2,Y2: Integer): Boolean; {Возвращает TRUE, если указатель находится
в заданном прямоугольнике}
Function NumButton: Byte; {Возвращает количество кнопок мыши}
Procedure GetMouseState (var Butt,X,Y: Integer);
{Возвращает текущее состояние мыши:
BUTT - флаг состояния кнопок;
X,Y- текущие виртуальные координаты}
Function MousePressed: Boolean;
{Возвращает TRUE, если нажата любая кнопка}
Procedure MouseButtPressed (Butt: Integer;
var Stat,Count,X,Y: Integer);
{Возвращает информацию о нажатой клавише:
BUTT - флаг выбора клавиши;
STAT - состояние клавиш;
COUNT - количество нажатий, X,Y - координаты}
Procedure MouseButtReleased (Butt: Integer;
var Stat,Count,X,Y: Integer);
{Возвращает информацию об отпущенной клавише:
BUTT - флаг выбора клавиши;
STAT - состояние клавиш;
COUNT - количество отпусканий;
X,Y - координаты}
Procedure MouseWindow (X1,Y1,X2,Y2: Integer);
{Задает координаты области перемещения
указателя. X1...Y2 - виртуальные координаты}
Procedure MouseScreen; {Устанавливает окно во весь экран}
Procedure ShowMouse; {Показать указатель мыши}
Procedure HideMouse; {Убратьуказательмыши}
Procedure MouseTextCursor (ScrMask,CurMask: Word);
{Устанавливает новый вид текстового указателя}
Procedure MouseBlink (YUp,YDn: Byte);
{Задает аппаратный курсор нужного размера}
Procedure MouseGraphCursor (var ScrCurMask;X,Y: Byte);
{Задаетвидграфическогоуказателя}
Function MouseBuffSize: Word;
{Возвращает длину буфера для сохранения параметров}
Procedure SaveMouse (var Buff);
{Сохраняет в буфере текущее состояние мыши}
Procedure RestoreMouse (var Buff);
{Восстанавливает сохраненное состояние мыши}
Procedure SetMouseItem (NItem: Byte; var Items);
{Устанавливает элементы для выбора мышью:
NItem - количествоэлементов;
Items - array [1..NItem] of MouseItemType;
Старыеустановкисбрасываются}
Procedure AddMouseItem (Item: MouseItemType);
{Добавляет еще один элемент для выбора мышью.
Старые установки сохраняются}
Procedure ClearMouseItems;
{Сбрасывает ранее установленные элементы}
Procedure GetMouseItem (var NItem: Byte; var Items);
{Возвращает установленные элементы}
Function KeyOrMousePressed: Boolean;
{Возвращает TRUE, если нажата клавиша или активна мышь}
Function ReadKeyOrMouse: Char;
{Возвращает символ нажатой клавиши или выбранной опции}
Procedure SetMouseHandler (Mask: Word; Proc: MouseHandlerType);
{Устанавливает адрес и условия вызова обработчика}
Procedure ChangeMouseHandler (Mask: Word;Proc: MouseHandlerType;
var OldMask: Word; var OldProc: Pointer);
Procedure ClearMouseHandler; {Удаляетобработчиксобытий}
Function IsMouse: Boolean; {Возвращает TRUE, еслимышьдоступна}
Function InitMouse: Boolean; {Инициациямыши}
Procedure SetMousePage (Page: Byte); {Устанавливает страницу для указателя мыши}
Function GetMousePage: Byte; {Возвращает номер страницы с указателем}
Procedure SetStepToPixel (Hor,Ver: Integer); {Устанавливает чувствительность мыши}
Procedure GetStepToPixel (var Hor,Ver: Integer); {Возвращает чувствительность мыши}
Procedure SetDoubleSpeed (Speed: Word);
{Устанавливает порог удвоения скорости перемещения указателя}
Function GetDoubleSpeed: Word;
{Возвращает порог удвоения скорости}
Function MouseTextCooX (X: Integer): Byte;
{Возвращает текстовую координату по заданной виртуальной}
Function MouseTextCooY (Y: Integer): Byte;
{Возвращает текстовую координату по заданной виртуальной}
Function MouseGraphCooX (X: Byte): Integer;
{Возвращает виртуальную координату по заданной текстовой}
Function MouseGraphCooY (Y: Byte): Integer;
{Возвращает виртуальную координату по заданной текстовой}
Procedure MouseWhereXY (var X,Y: Integer);
{Возвращаетвиртуальныекоординатымыши}
Procedure MouseGotoXY (X,Y: Integer);
{Переводит указатель мыши в новое положение
X,Y - виртуальные координаты}
Function MouseWhereX: Byte;
{Возвращает горизонтальную текстовую координату}
Function MouseWhereY: Byte;
{Возвращает текстовую координату по вертикали}
Function MouseIn (X1,Y1,X2,Y2: Integer): Boolean;
{Возвращает TRUE, если указатель находится
в заданном прямоугольнике}
Function NumButton: Byte;
{Возвращает количество кнопок мыши}
Procedure GetMouseState (var Butt,X,Y: Integer);
{Возвращает текущее состояние мыши:
BUTT - флаг состояния кнопок;
X,Y- текущие виртуальные координаты}
Function MousePressed: Boolean;
{Возвращает TRUE, если нажата любая кнопка}
Procedure MouseButtPressed (Butt: Integer;
var Stat,Count,X,Y: Integer);
{Возвращает информацию о нажатой клавише:
BUTT - флаг выбора клавиши;
STAT - состояние клавиш;
COUNT - количество нажатий, X,Y - координаты}
Procedure MouseButtReleased (Butt: Integer;
var Stat,Count,X,Y: Integer);
{Возвращает информацию об отпущенной клавише:
BUTT - флаг выбора клавиши;
STAT - состояние клавиш;
COUNT - количество отпусканий;
X,Y - координаты}
Procedure MouseWindow (X1,Y1,X2,Y2: Integer);
{Задает координаты области перемещения указателя.
X1...Y2 - виртуальныекоординаты}
Procedure MouseScreen;
{Устанавливает окно во весь экран}
Procedure ShowMouse;
{Показать указатель мыши}
Procedure HideMouse;
{Убратьуказательмыши}
Procedure MouseTextCursor (ScrMask,CurMask: Word);
{Устанавливает новый вид текстового указателя}
Procedure MouseBlink (YUp,YDn: Byte);
{Задает аппаратный курсор нужного размера}
Procedure MouseGraphCursor (var ScrCurMask;X,Y: Byte);
{Задаетвидграфическогоуказателя}
Function MouseBuffSize: Word;
{Возвращает длину буфера для сохранения параметров}
Procedure SaveMouse (var Buff);
{Сохраняет в буфере текущее состояние мыши}
Procedure RestoreMouse (var Buff);
{Восстанавливает сохраненное состояние мыши}
Procedure SetMouseItem (NItem: Byte; var Items);
{Устанавливает элементы для выбора мышью:
NItem - количествоэлементов;
Items - array [1..NItem] of MouseItemType;
Старыеустановкисбрасываются}
Procedure AddMouseItem (Item: MouseItemType);
{Добавляет еще один элемент для выбора мышью.
Старые установки сохраняются}
Procedure ClearMouseItems;
{Сбрасывает ранее установленные элементы}
Procedure GetMouseItem (var NItem: Byte; var Items);
{Возвращает установленные элементы}
Function KeyOrMousePressed: Boolean;
{Возвращает TRUE, если нажата клавиша
клавиатуры или кнопка мыши}
Function ReadKeyOrMouse: Char;
{Возвращает символ нажатой клавиши или выбранного элемента}
Procedure MouseHandler; Far; Assembler;
{Ассемблерный интерфейс для вызова обработчика}
Procedure SetMouseHandler (Mask: Word; Proc: MouseHandlerType);
{Устанавливает адрес и условия вызова обработчика}
Procedure ChangeMouseHandler (Mask: Word;
Proc: MouseHandlerType; var OldMask: Word; var OldProc: Pointer); {Заменяетстарыйобработчикновым}
Procedure ClearMouseHandler; {Удаляетобработчиксобытий}
function vihod:boolean;
{проверка выбран или нет и клик мышки на надписи"ВЫХОД" }
procedure ReadBMP {чтение изображения из Bmp-файла}
procedure ReadBMPheader (header:bmhptr;filename:string);
{чтениезаголовка Bmp-файла}
procedure ReadBMP (image:arptr; var xim,yim:word;
pal:arptr; filename:string); {чтениеизображенияиз Bmp-файла}
procedure ReadBMPheader (header:bmhptr;filename:string); {чтениезаголовка Bmp-файла}
Программа запускается под управлением операционной системы MS Windows, начиная с версии NT/95. Для её работы требуется от 16 мегабайт оперативной памяти, видеоадаптер SVGA и процессор Pentium 133 и выше.
Назначение программы – приятное проведение досуга, без какой-либо видимой пользы для физического состояния и морального духа, совершенствование координации и логического мышления, возможно использование для демонстрации графических возможностей Паскаля.
Запуск программы осуществляется при открытии файла igra.exe из каталога. При запуске игры появляется следующее меню:
Управление игрой осуществляется при помощи мышки. При выборе пункта «Помощь» выдается краткая справка, объясняющая правила игры. С помощью пункта «Победители» вы можете изучить список победителей. Пункт «Старт игры осуществляет её запуск», и пользователь видит следующую картинку
Для осуществления переправки волка, козы и капусты на другой берег необходимо навести курсор мышки на выбранный объект и нажать правую или левую клавишу, после чего процесс переправки осуществится автоматически. Для переправки волка, козы или капусты обратно необходимо проделать те же действия.
Если вы совершили некорректное действие, противоречащее правилам игры (оставили волка с козой или козу с капустой) появится сообщение о проигрыше. Если все ваши действия были верны и вы переправили волка, козу и капусту на другой берег на экране появится предложение о внесении вашего имени в список победителя.
По завершению ввода необходимо нажать клавишу ENTER.
Ориентировочная экономическая эффективность, преимущества по сравнению с аналогами, т.к. разработана в современной среде программирования.
Программа готова к работе, настройки не требует.
Заключение
В данной работе были широко использованы методы ООП. Это позволило хорошо структурировать программу и облегчило ее написание. Используются все три свойства ООП - инкапсуляция, наследование, полиморфизм. Высокая структурированность программы сделала ее достаточно прозрачной для внесения изменений и дополнений, в нее легко добавить еще несколько процедур для улучшения интеллектуальности игры (сейчас на местах, где должны вызываться некоторые из этих процедур стоят программные заглушки, все они снабжены комментариями и при желании их можно снять и дописать соответствующие процедуры)
В заключение следует сказать, что игра в шашки в общем - то легко поддается алгоритмизации в силу достаточно простых правил, хотя это не является очевидным, и на первый взгляд задача казалась неразрешимой.
1. Зуев. Язык программирования Turbo Pascal 6.0.- М.: Унитех, 1992.- 298 с.
2. Довгаль С.И., Сбитнев А.И. Персональные ЭВМ: Турбо - Паскаль V 7.0, Объектное программирование.- Киев: Довгаль,1995. - 320 с.
3. Епаншенков А.М., Епаншенков В.А. Программирование в среде TURBOPASCAL 7.0.- М.: Диалог - МИФИ, 1996.- 288 с.
4. Турбо Паскаль 7.0 - К.: Торгово - издательское бюро BHV, 1995 - 448 с.
5. История компьютерных игр (internet версия).