Четвер, 17.08.2017
Творча лабораторія

Навчальні посібники та робочі зошити з інформатики - якісно і дешево


Меню сайту
Реклама
Категорії каталогу
MS Visual C++ 2005 Express Edition [3]
Середовища програмування [7]
Особливості встановлення та використання різних середовищ програмування
MS Visual Basic 6 [1]
Microsoft Visual Basic
C# [7]
Програмування мовою C#
C++ [3]
Паскаль [4]
ЛОГО [1]
Олімпіадне програмування [0]
Головна » Статті » Програмування » Паскаль

Хрестики-нулики-2. Формуємо штучний інтелект :)

Нові статті

[17.09.2015] [Інформація]
Інформатика — місток між предметами
[20.05.2015] [Інформація]
Алгоритми і виконавці: безкомп’ютерний етап
[12.04.2015] [Навчальні посібники]
Авторська концепція комплекту «Інформатика. Базовий курс. 7 клас»

Пилипчук О.П., вчитель інформатики Гаврилівської ЗОШ Теофіпольського району Хмельницької області

Хрестики-нулики-2. Штучний інтелект :)

Процедурне програмування мовою Паскаль

У попередньому матеріалі ми отримали працездатну програму, яка перетворювала комп'ютер на партнера у популярній грі "Хрестики-нулики". Але рівень його гри, м'яко кажучи, був невисокий: він обирав клітинку випадковим чином, зовсім не аналізуючи, що робиться на полі. Настав час вдосконалити процедуру, яка генерує хід комп'ютера.

1. Отже, нова версія процедури hid_compa. Відтепер в ній буде зосереджений штучний інтелект! Від її якості залежить успіх комп'ютера в різного рівня змаганнях, адже вона забезпечує хід комп'ютера: 

procedure hid_compa;
var r,s,rr,ss,nr,ns,k:integer;
begin
textcolor (yellow);
k:=0; {лічильник}


2. В процесі перевірки стану ігрового поля змінні ns і nr зафіксують клітинку, в яку зробить хід комп'ютер. Перший рівень майстерності передбачає: "Не пропусти виграшного ходу!". Тобто, якщо в якомусь рядку, стовпці чи діагоналі вже є два нулики, то потрібно дописувати ще один і тішитись перемогою.:

   for r:=1 to 3 do
for s:=1 to 3 do
if pole[r,s]=' ' {для кожної порожньої клітинки виконуємо...}
then begin
if (k<>2) then begin k:=0;  {...перевірку у стовпці,...}
for rr:=1 to 3 do if pole [rr,s]='O'
then begin inc(k);
if k=2 then begin
ns:=s;nr:=r
end
end

end;

if (k<>2) then begin k:=0;   {...перевірку у рядку...}
for ss:=1 to 3 do if pole [r,ss]='O'
then begin inc(k);
if k=2 then begin
ns:=s;nr:=r
end
end
end;
{..., а для тих, що лежать на діагоналях, ще й...}    
if (k<>2) and (r=s) then begin k:=0; {...перевірку у діагоналі 1, та...}
for ss:=1 to 3 do if pole [ss,ss]='O'
then begin inc(k);
if k=2 then begin
ns:=s;nr:=r
end
end

end;

if (k<>2) and (r=4-s) then begin k:=0;  {...перевірку у діагоналі 2}
for ss:=1 to 3 do if pole [ss,4-ss]='O'
then begin inc(k);
if k=2 then begin
ns:=s;nr:=r
end
end
end
end;

3. Другий рівень майстерності вимагає: "Не дай виграти супернику!". Тобто, якщо в якомусь рядку, стовпці чи діагоналі вже є два хрестики, то потрібно ставити біля них нулик і сподіватись, що це був єдиний виграшний хід суперника. Змінні k, ns та nr продовжують використовуватися так само: 

if k<>2 then
for r:=1 to 3 do
for s:=1 to 3 do
if pole[r,s]=' '
then begin {перевірка у стовпці}
if (k<>2) then begin k:=0;
for rr:=1 to 3 do if pole [rr,s]='X'
then begin inc(k);
if k=2 then begin
ns:=s;nr:=r
end
end

end;
{перевірка у рядку}
if (k<>2) then begin k:=0;
for ss:=1 to 3 do if pole [r,ss]='X'
then begin inc(k);
if k=2 then begin
ns:=s;nr:=r
end
end
end;
{перевірка у діагоналі 1}
if (k<>2) and (r=s) then begin k:=0;
for ss:=1 to 3 do if pole [ss,ss]='X'
then begin inc(k);
if k=2 then begin
ns:=s;nr:=r
end
end

end;
{перевірка у діагоналі 2}
if (k<>2) and (r=4-s) then begin k:=0;
for ss:=1 to 3 do if pole [ss,4-ss]='X'
then begin inc(k);
if k=2 then begin
ns:=s;nr:=r
end
end
end
end;

4. Якщо ж виграшного ходу немає і немає загрози виграшу людини, то комп'ютер, як і раніше, обирає порожню клітинку випадковим чином... 

if k<>2 then
repeat
nr:= 1+random(3); ns:=1+random(3)
until (pole[nr,ns]=' ');

5. ...і впевнено ставить туди нулик:

pole[nr,ns]:='O';
pokaz_polja
end; {кінець дуже довгої процедури hid_compa}


6. Завдяки процедурному стилю програми, жодних змін в інші процедури вносити не потрібно.

Перспективи проекту

1. 4 рядочки записані у п.4 - місце для подальшого вдосконалення програми. Якщо немає виграшного ходу і клітинки, яка загрожує програшем, то вибирати хід випадково - не найкращий варіант. Можна ці рядки замінити пошуком клітинки, яка гарантовано веде до виграшу наступним ходом (на малюнку - третя клітинка у першому рядку):



2. Комп'ютер нав'язує свої умови: завжди грає нуликами, ходить першим... Програму можна вдосконалити, щоб уникнути цієї незручності.
3. Наступний крок - реалізувати реєстрацію користувача, ведення таблиці рекордів, пропозицію продовжити гру по завершенні партії і т.д.


Интернет реклама
Категорія: Паскаль | Додав: teachlab (03.03.2009)
Переглядів: 1522 | Рейтинг: 0.0/0
Всього коментарів: 0
Додавати коментарі можуть тільки зареєстровані користувачі.
[ Реєстрація | Вхід ]
Форма входу
Пошук
Друзі сайту

Підтримка
Ви можете підтримати цей проект:

WMR164778923006
WMZ277001591405

Система Orphus

Маєте свій сайт?
Заробіть на ньому грошей!


Не маєте власного сайту?
Заробіть на обміні файлами!
Статистика
Copyright Пилипчук О.П. © 2017
div id=