50446 (Разработка алгоритма и реализация игры "Реверси"), страница 2

2016-07-30СтудИзба

Описание файла

Документ из архива "Разработка алгоритма и реализация игры "Реверси"", который расположен в категории "". Всё это находится в предмете "информатика" из 1 семестр, которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "информатика, программирование" в общих файлах.

Онлайн просмотр документа "50446"

Текст 2 страницы из документа "50446"

end;

end;

for i:=0 to 7 do // Right-Upper corner

begin

if brd3[i,7] <> cc then break;

for j:=7 downto 0 do

begin

if brd3[i,j] <> cc then break;

inc(data.stable);

brd3[i,j]:= 0;

end;

end;

// Calculate number of internal discs

for i:=0 to 7 do

for j:=0 to 7 do

if brd2[i,j] = cc then

begin

intern:= TRUE;

if (i>0) and (j>0) and (brd[i-1, j-1]=0) then intern:= FALSE;

if (i>0) and (brd[i-1, j]=0) then intern:= FALSE;

if (i>0) and (j<7) and (brd[i-1, j+1]=0) then intern:= FALSE;

if (i0) and (brd[i+1, j-1]=0) then intern:= FALSE;

if (i<7) and (brd[i+1, j]=0) then intern:= FALSE;

if (i<7) and (j<7) and (brd[i+1, j+1]=0) then intern:= FALSE;

if (j>0) and (brd[i, j-1]=0) then intern:= FALSE;

if (j<7) and (brd[i, j+1]=0) then intern:= FALSE;

if intern then inc(data.internal);

end;

result:=data;

end;

function CheckMove(color:byte; cx, cy: integer): integer;

// Function check: is move to (cx, cy) possible?

// Parameter: color - Who makes the move, black or white?

// if (colour == 0) White do a move

// if (colour == 1) Black do a move

// return: 0 - if impossible

// 1 - if possible, and number

// value is amount of the seized disks

var test, passed: boolean;

i, j, total: integer;

wc1, wc2: byte; // What to check

begin

total:=0;

// do a copy of board

for i:=0 to 7 do

for j:=0 to 7 do

brd2[i, j]:= brd[i, j];

if color=0 then //white

begin

wc1:= 2;

wc2:= 1;

end

else

begin

wc1:= 1;

wc2:= 2;

end;

if brd[cy, cx]<> 0 then begin result:= 0; exit; end;

passed:= FALSE;

test:= FALSE;

for i:=cx-1 downto 0 do // Check left

begin

if brd[cy, i] = wc1 then test:= TRUE

else

if ((brd[cy, i] = wc2) and (test)) then

begin

passed:= TRUE;

for j:=cx-1 downto i+1 do inc(total);

for j:=cx-1 downto i+1 do brd2[cy, j]:= wc1; ////???????

break;

end

else break;

end;

test:= FALSE;

for i:=cx+1 to 7 do // Check Right

begin

if (brd[cy, i] = wc1) then test:= TRUE

else

if ((brd[cy, i] = wc2) and test) then

begin

passed:= TRUE;

for j:=cx+1 to i-1 do inc(total);

for j:=cx+1 to i-1 do brd2[cy, j]:= wc1;

break;

end

else break;

end;

test:= FALSE;

for i:=cy-1 downto 0 do // Check Up

begin

if (brd[i, cx] = wc1) then test:= TRUE

else

if ((brd[i, cx] = wc2) and test) then

begin

passed:= TRUE;

for j:=cy-1 downto i+1 do inc(total);

for j:=cy-1 downto i+1 do brd2[j, cx]:= wc1;

break;

end

else break;

end;

test:= FALSE;

for i:=cy+1 to 7 do // Check Down

begin

if (brd[i, cx] = wc1) then test:= TRUE

else

if ((brd[i, cx] = wc2) and (test)) then

begin

passed:= TRUE;

for j:=cy+1 to i-1 do inc(total);

for j:=cy+1 to i-1 do brd2[j, cx]:= wc1;

break;

end

else break;

end;

test:= FALSE;

for i:=1 to 7 do // Check Left-Up

begin

if (((cy-i) >= 0) and ((cx-i) >= 0)) then

if (brd[cy-i, cx-i] = wc1) then test:= TRUE

else

if ((brd[cy-i, cx-i] = wc2) and (test)) then

begin

passed:= TRUE;

for j:=1 to i-1 do inc(total);

for j:=1 to i-1 do brd2[cy-j, cx-j]:= wc1;

break;

end

else break

else break;

end;

test:= FALSE;

for i:=1 to 7 do // Check Left-Down

begin

if (((cy+i) = 0)) then

if (brd[cy+i, cx-i] = wc1) then test:= TRUE

else

if ((brd[cy+i, cx-i] = wc2) and (test)) then

begin

passed:= TRUE;

for j:=1 to i-1 do inc(total);

for j:=1 to i-1 do brd2[cy+j, cx-j]:= wc1;

break;

end

else break

else break;

end;

test:= FALSE;

for i:=1 to 7 do // Check Right-Up

begin

if (((cy-i) >= 0) and ((cx+i) < 8)) then

if (brd[cy-i, cx+i] = wc1) then test:= TRUE

else

if ((brd[cy-i, cx+i] = wc2) and (test)) then

begin

passed:= TRUE;

for j:=1 to i-1 do inc(total);

for j:=1 to i-1 do brd2[cy-j, cx+j]:= wc1;

break;

end

else break

else break;

end;

test:= FALSE;

for i:=1 to 7 do // Check Right-Down

begin

if (((cy+i) < 8) and ((cx+i) < 8)) then

if (brd[cy+i, cx+i] = wc1) then test:= TRUE

else

if ((brd[cy+i, cx+i] = wc2) and (test)) then

begin

passed:= TRUE;

for j:=1 to i-1 do inc(total);

for j:=1 to i-1 do brd2[cy+j, cx+j]:= wc1;

break;

end

else break

else break;

end;

if passed then result:= total

else result:=0;

end;

function DoStep(data: pBoard): word;

var i, j, k, l, value, value1, value2, value3: integer;

pd, pdb, savedData: sPosData;

fMove, fMoveb: boolean; // First move?

begin

for i:=0 to 7 do // Copy data from source data to brd

for j:=0 to 7 do

brd[j,i]:= data^[j,i];

fMove:= TRUE;

for i:=0 to 7 do

for j:=0 to 7 do

begin

if (CheckMove(0, j, i) > 0) then

begin

pd:= CalculateData(1, j, i);

fMoveb:= TRUE;

value:= 0;

for k:=0 to 7 do

for l:=0 to 7 do

if (CheckMove(1, l, k) > 0) then

begin

pdb:= CalculateData(2, l, k);

if pdb.corner then value3:=200 else value3:=0;

value3:=value3+pdb.stable*4;

value3:=value3+pdb.internal*3;

//value3:=value3+pdb.disks;

//if pdb.edge then value3:=value3+ 1;

if pdb.square2x2 then value3:=value3-50;

if fMoveb then

begin

value:= value3;

fMoveb:= FALSE;

end

else

if (value3 > value) then value:= value3;

end;

if fMove then

begin

savedData:= pd;

fMove:= FALSE;

end

else

begin

if pd.corner then value1:=200 else value1:=0;

value1:=value1+ pd.stable*5;

value1:=value1+ pd.internal*3;

value1:=value1+ pd.disks;

if pd.edge then value1:=value1+ 1;

if pd.square2x2 then value1:=value1- 50;

value1:=value1- value;

if savedData.corner then value2:=200 else value2:=0;

value2:=value2+ savedData.stable*5;

value2:=value2+ savedData.internal*3;

value2:=value2+ savedData.disks;

if savedData.edge then value2:=value2+ 1;

if savedData.square2x2 then value2:=value2-50;

if (value1 > value2) then

move(pd,savedData,sizeof(sposdata)); //savedData:= pd;

end;

end;

end;

if not fMove then result:=savedData.my * 256 + savedData.mx

else result:=65535;

end;

end.

Заключение

В результате выполнения работы была разработана программа реализующая алгоритм игры «Реверси». Были получены навыки реализации алгоритмов по предмету «Интеллектуальные системы».

Список литературы

  1. Strategy guide // URL; http://radagast.se/othello/Help/strategy.html

  2. Рукотворный разум // URL

  3. А. Я. Архангельский Программирование в Delphi 7 Издательство: Бином-Пресс, 2003 г. ISBN 5-9518-0042-0

  4. А. Я. Архангельский Приемы программирования в Delphi Издательство: Бином-Пресс, 2004 г. ISBN 5-9518-0067-6

  5. А. Жуков Изучаем Delphi Издательство: Питер, 2001 г. ISBN 5-272-00202-4

Размещено на Allbest.ru

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Нет! Мы не выполняем работы на заказ, однако Вы можете попросить что-то выложить в наших социальных сетях.
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
4144
Авторов
на СтудИзбе
666
Средний доход
с одного платного файла
Обучение Подробнее