Описание переменных
Const N=5;
dx=30;
dy=30;
type mas= array[1..n,1..n] of integer;
var
Form1: TForm1;
x0,y0,cw,ch:integer;
pr_krest:boolean;
tab:mas;
Описание своих процедур
Процедуру DrawPole пишем самостоятельно.
procedure mas_clear; {Обнуление элементов массива}
var i,k:integer;
begin
for i:=1 to n do
for k:=1 to n do
tab[i,k]:=0;
end;
В процедуре proverka надо проверить N подряд идущих по горизонтали, вертикали или диагонали крестиков или ноликов. Возьмите готовую функцию line_vert (проверка по вертикали). В ней числа i, k – это номер строки и номер столбца квадратика [i, k], в который вы только что поставили крестик или нолик (переменная priznak).
function line_vert(i, k, priznak:integer):boolean;
var m,t:integer;
begin
m:=i;t:=i; {Начинаем проверку от квадратика [i,k]}
while(m<=n)and(tab[m, k]= priznak)do {Идем вниз по сетке}
m:=m+1;
while(t>=1)and(tab[t,k]= priznak)do {Идем вверх по сетке}
t:=t-1;
if(m-t)=n+1 then { На выходе m = N +1, а t = 0 }
line_vert:=true else line_vert:=false;
end;
Аналогично напишите функции для проверки по горизонтали и диагонали.
Задание начальных данных
Начальные данные зададим в процедуре TForm1.FormCreate(Sender: TObject);
begin
cw:=clientwidth;
ch:=clientheight;
x0:=(cw-n*dx) div 2;
y0:=(ch -n*dy)div 2;
pr_krest:=true;
mas_clear;
end;
2. Обработчик кнопки Start
begin {Start}
pr_krest:=true;
mas_clear;
DrawPole;
Lable1.Caption:=’Начинают ходить крестики’;
end;
3. Обработчик щелчка по левой кнопке мыши
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var a,b:integer;
begin
k:=(x-x0) div dx+1; {Находим координаты квадратика [i,k]}
i:=(y-y0) div dy+1;
with canvas do {Готовим шрифт для вывода X или O}
begin
pen.color:=clblue;
pen.width:=2;
brush.color:=clskyblue;
Font.size:=16;
end; {Далее определим, на сетке ли мышь}
if (k in[1..n])and (i in [1..n])and(tab[i,k]=0) then
begin
a:=x0+(k-1)*dx+7; {Находим позицию в квадратике[i,k] для вывода букв X или O}
b:=y0+(i-1)*dy+3; {числа 7 и 3 – смещение, они нужна для того, чтобы буквы писались в центре клеточки}
if pr_krest then
begin
Label1.caption:=‘Следующий ход ноликов’;
canvas.TextOut(a,b,'X');
tab[i,k]:=1;
{proverka;}
pr_krest:=false;
end
else
begin
Label1.caption:=‘Следующий ход крестиков’;
canvas.TextOut(a,b,'O');
tab[i,k]:=2;
{proverka;}
pr_krest:=true;
end;
end;
end;
Задание 4
Коды клавиш
Создайте приложение, выдающее код клавиши. Используйте событие формы OnKeyDown, в обработчике которого выведите десятичный код (переменная key) с помощью Label1.Caption, а также событие формы OnKeyPressed.