русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Проект «Крестики-нолики»


Дата добавления: 2014-11-27; просмотров: 1903; Нарушение авторских прав


Постановка задачи. Проект реализует известную игру «Крестики-нолики». Играющий ставит по очереди крестик или нолик
в клетку поля, пока не наберет пять одинаковых элементов по горизотали, вертикали или диагонали. Вообще-то в эту игру играют двое, но мы делаем проект для одного игрока.

Реализация. Положите на форму компонент TPaintBox. Используйте процедуру DrawPole из параграфа «Рисование поля для различных игр» (пункт 2.1.2). Эта процедура рисует поле, состоящее
из N х N квадратиков, как указано на рис. 20. Рисовать будем
на компоненте TPaintBox, поэтому переменные x0 и y0 равны нулю и не будут использоваться. Клетки будут квадратные, значит, dx = dy (сторона квадратика в пикселях).

Зададим размер поля константой N = 5.

 

На рис. 20 выделен квадратик
с номером строки i = 2 и номером столбца k = 3. Для нахождения координат этого квадратика на TPaintBox используем формулы (1):

 

x = (k –1) * dx;

y = (i– 1) * dy.

 

Обратно, зная x и y, можно найти номер строки и номер столбца
по формулам (2):

Рис. 20. Поле для проекта «Крестики-нолики»  


k = x div dx+1;

i = y div dy+1.

Положите на форму одну надпись TLabel для вывода текста, напоминающего, чей следующий ход: крестиков или ноликов. Первыми обычно ходят крестики.

Опишите глобальную переменную булевского типа, означающую признак того, что ходят крестики, например:

 

var pr_krest:boolean.

 

Также необходимо описать двумерный массив с элементами целого типа. Массив нужен для того, чтобы узнать, кто победил: крестики или нолики. Процедурой mas_clear обнулите все элементы массива.

 

procedure mas_clear; {Обнуление элементов массива}

var i,k:integer;

begin

for i:=1 to N do

for k:=1 to N do

a[i,k]:=0;

end;

В процессе игры мышью будем указывать клетку, в которую надо выводить «Х» или «О» в зависимости от значения признака pr_krest. Эти буквы будем выводить с помощью метода TextOut. При этом мышь должна указать место на сетке, т. е. какой-либо квадратик с номером строки i и номером столбца k. Для нахождения значений переменных i и k будем использовать формулы (2).



В параметрах процедуры TForm1.PaintBox1MouseDown (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer), являющейся обработчиком события «щелчок по левой кнопке», есть переменные x и y. Эти значения x и y подставим в формулы (2):

k := x div dx + 1;

i := y div dy + 1;

Так мы узнаем номер строки и номер столбца квадратика [i, k]. Кроме того, при щелчке мышью по клетке занесем в соответствующую ячейку массива a[i, k]:=1 (крестики) или a[i, k]:=2 (нолики). Надо не забыть, что ставить крестик или нолик мы можем только
в том случае, если в соответствующей ячейке массива стоит 0. Ниже приведен код обработчика PaintBox1MouseDown.

 

procedure TForm1.PaintBox1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

var c,b:integer;

begin

k:=x div dx +1;

i:=y div dy +1;

if a[i, k] = 0 then

begin

c:=(k-1)*dx+8; // Место для вывода символа

b:=(i-1)*dy+2;

with PaintBox1.Canvas do

begin

Font.Color:=clblue;

Font.Size:=18;

brush.color:=ClWhite;

end;

if pr_krest then

begin

PaintBox1.Canvas.TextOut(c,b,'X');

a[i,k]:=1;

{ Здесь должна быть проверка }

pr_krest:=false;

Label1.Caption:='Ход ноликов';

end

else

begin

PaintBox1.Canvas.TextOut(c,b,'О');

a[i,k]:=2;

{Здесь должна быть проверка}

pr_krest:=true;

Label1.Caption:='Ход крестиков';

end;

end;

end;

 

На рис. 21 показан момент игры «Крестики-нолики».

 

Рис. 21. Игра «Крестики-нолики»

 

После того как крестик или нолик поставлен, необходимо организовать проверку по горизонтали, вертикали и диагонали. В случае успеха вывести соответствующее сообщение, например, «Выиграли крестики!» В следующей функции line_vert организована проверка по вертикали.

 

function line_vert (i ,k, c : integer) : boolean;

{ Числа i, k – это номер строки и номер столбца квадратика [i, k], в который только что поставили крестик (переменная c равна 1) или нолик (переменная c равна 2) }

var p,q:integer;

begin

p:=i;q:=i; {Начинаем проверку от квадратика [i,k]}

while(p<=n)and(a[p,k]=c)do

{Идем вниз по полю}

p:=p+1;

while(q>=1)and(a[q,k]=c)do

{Идем вверх по полю}

q:=q-1;

if(p-q)=n+1 then

line_vert:=true else line_vert:=false;

end;

 

Игра заканчивается, если выигрыш или не осталось свободных клеток.

 

Задание. Организуйте проверку по горизонтали и диагоналям.



<== предыдущая лекция | следующая лекция ==>
Проект «Снежинки» | Движение образа по удерживанию левой кнопки мыши


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

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