Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Занятие3-2012.doc
Скачиваний:
0
Добавлен:
22.08.2019
Размер:
91.14 Кб
Скачать

Описание переменных

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.

Тут вы можете оставить комментарий к выбранному абзацу или сообщить об ошибке.

Оставленные комментарии видны всем.