Программа
Program ChessMan;
{ Произвольное перемещение фигуры
по шахматному полю
(стрелками на соседнее поле) }
Uses Graph,Crt; { Подключение модулей Graph, Crt }
Const DriverPath=''; { Путь к графическому драйверу }
Var CoordX,CoordY:0..7; { Координаты фигуры }
GraphDriver,GraphMode:integer; { Графический драйвер и режим }
ScaleX,ScaleY:integer; { Переводные масштабы }
Exit:boolean; { Флаг выхода }
Procedure DrawFigure; { Прорисовка фигуры }
var i:integer; { Счетчик }
Begin
SetColor(White); { Выбор белого цвета }
SetFillStyle(SolidFill,White); { Однородное заполнение белым }
{ Прорисовка фигуры: }
PieSlice(CoordX*ScaleX+ScaleX div 2,CoordY*ScaleY+ScaleY div 4,
0,360,ScaleX div 7);
for i:=CoordY*ScaleY+ScaleY div 4 to CoordY*ScaleY+ScaleY*5 div 6 do
Line(CoordX*ScaleX+ScaleX div 2
-(i-(CoordY*ScaleY+ScaleY div 4))*3 div 4,
i,
CoordX*ScaleX+ScaleX div 2
+(i-(CoordY*ScaleY+ScaleY div 4))*3 div 4,
i)
End;
Procedure EraseFigure; { Затирание фигуры (прорисовка поля) }
Begin
if Odd(CoordX) xor Odd(CoordY)
{ Определение заполнения фигуры по четности координат }
then SetFillStyle(SolidFill,Black) { Однородное заполнение черным }
else SetFillStyle(InterleaveFill,White); { Частая сетка, белый цвет }
Bar(CoordX*ScaleX,CoordY*ScaleY,(CoordX+1)*ScaleX,(CoordY+1)*ScaleY);
{ Прорисовка поля }
SetColor(White); { Выбор белого цвета }
SetLineStyle(SolidLn,0,NormWidth); { Выбор сплошной нормальной линии }
Rectangle(CoordX*ScaleX,CoordY*ScaleY,(CoordX+1)*ScaleX,(CoordY+1)*ScaleY)
{ Прорисовка окантовки поля }
End;
BEGIN
GraphDriver:=Detect; { Автоматическое определение драйвера }
InitGraph(GraphDriver,GraphMode,DriverPath); { Инициализация граф. режима }
ScaleX:=GetMaxX div 8 div 4 *3; { Определение переводных масштабов }
ScaleY:=GetMaxY div 8; { с учетом соотношения сторон монитора }
for CoordY:=0 to 7 do { Цикл прорисовки линий }
for CoordX:=0 to 7 do { Цикл прорисовки полей }
EraseFigure;
Exit:=FALSE; { Сброс флага выхода }
CoordX:=3; { Определение начальных координат фигуры }
CoordY:=3;
DrawFigure; { Прорисовка фигуры }
while not Exit do { Цикл сканирования клавиатуры и выбора действия }
case ReadKey of { Сканирование клавиатуры и выбор действия }
#71,#55:if (CoordX>0)and(CoordY>0) { Если фигура не на крайнем поле,}
then { то }
begin
EraseFigure; { Закрашивание фигуры }
CoordX:=CoordX-1; { Пересчет координат }
CoordY:=CoordY-1;
DrawFigure { Прорисовка фигуры }
end;
#72,#56:if CoordY>0 then
begin
EraseFigure;
CoordY:=CoordY-1;
DrawFigure
end;
#73,#57:if (CoordX<7)and(CoordY>0) then
begin
EraseFigure;
CoordX:=CoordX+1;
CoordY:=CoordY-1;
DrawFigure
end;
#75,#52:if CoordX>0 then
begin
EraseFigure;
CoordX:=CoordX-1;
DrawFigure
end;
#77,#54:if CoordX<7 then
begin
EraseFigure;
CoordX:=CoordX+1;
DrawFigure
end;
#79,#49:if (CoordX>0)and(CoordY<7) then
begin
EraseFigure;
CoordX:=CoordX-1;
CoordY:=CoordY+1;
DrawFigure
end;
#80,#50:if CoordY<7 then
begin
EraseFigure;
CoordY:=CoordY+1;
DrawFigure
end;
#81,#51:if (CoordX<7)and(CoordY<7) then
begin
EraseFigure;
CoordX:=CoordX+1;
CoordY:=CoordY+1;
DrawFigure
end;
#27:Exit:=TRUE { Подъем флага выхода }
end; { case }
CloseGraph { Закрытие графического режима }
END.
Бесплатные примеры программ
Примеры написанных программ
Помощь студентам по программированию