Добавил:
Ангел хранитель политеховцев Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УголкиКурсовая(by113).docx
Скачиваний:
0
Добавлен:
23.12.2025
Размер:
889.34 Кб
Скачать

Пример расчета оф

У нас имеется импровизированное поле 8x8 (рис.1), на котором шла некоторая игра и остановилась на определенном моменте, попробуем оценить игровую ситуацию нашим алгоритмом:

Рис.1 Игровое поле

Оранжевый квадрат, подступ к дому

Черный квадрат дом

Оценим положения шашек вне своих домов:

Белые шашки (+1 очко)

Черные шашки (+2 очка)

Оценим насколько близко шашки расположены к домам противника:

Белые шашки (+4 очка) всего: 5 очков

Черные шашки (+0 очков) всего: 2 очка

Оценим сколько шашек расположено во вражеских домах:

Белые шашки (+3 очко) всего: 8 очков

Черные шашки (+0 очков) всего: 2 очка

Посчитаем сумму полученных очков и вычислим их разницу:

Белая сторона = 8

Черная сторона = 2

Результат = 8 – 2 = 6 (выигрывает белая сторона)

Рис.2 Результат программы

Программный код с комментариями

#include <iostream>

using namespace std;

int OutsideOfHome(char Board[8][8], char Сheckers) // Начисление очков обеим сторонам за нахождение шашек вне своего дома

{

int Count = 0;

if (Сheckers == '2') {

for (int i = 0; i < 8; ++i) {

for (int j = 0; j < 8; ++j) {

if (i < 4 && j < 3) {

if (Board[i][j] == Сheckers) {

Count += 1;

}

}

else if (i == 4) {

if (Board[i][j] == Сheckers) {

Count += 1;

}

}

else if (i > 4 && j > 3) {

if (Board[i][j] == Сheckers) {

Count += 1;

}

}

}

}

}

else

{

for (int i = 0; i < 8; ++i) {

for (int j = 0; j < 8; ++j) {

if (i < 3 && j < 4) {

if (Board[i][j] == Сheckers) {

Count += 1;

}

}

else if (i == 3) {

if (Board[i][j] == Сheckers) {

Count += 1;

}

}

else if (i > 3 && j > 4) {

if (Board[i][j] == Сheckers) {

Count += 1;

}

}

}

}

}

return Count;

}

int CloseToHome(char Board[8][8], char Сheckers) // Начисление очков обеим сторонам за нахождение шашек у дома противника

{

int Count = 0;

if (Сheckers == '2') {

for (int i = 0; i < 5; ++i) {

for (int j = 3; j < 8; ++j) {

if (i < 3 && j == 3) {

if (Board[i][j] == Сheckers) {

Count += 2;

}

}

else if (i == 4 && j > 2) {

if (Board[i][j] == Сheckers) {

Count += 2;

}

}

}

}

}

else

{

for (int i = 4; i < 8; ++i) {

for (int j = 0; j < 8; ++j) {

if (i == 4 && j < 5) {

if (Board[i][j] == Сheckers) {

Count += 2;

}

}

else if (i > 4 && j == 4) {

if (Board[i][j] == Сheckers) {

Count += 2;

}

}

}

}

}

return Count;

}

int InHome(char Board[8][8], char Сheckers) // Начисление очков обеим сторонам за нахождение шашки в доме противника

{

int Count = 0;

if (Сheckers == '2') {

for (int i = 0; i < 3; ++i) {

for (int j = 4; j < 8; ++j) {

if (Board[i][j] == Сheckers) {

Count += 3;

}

}

}

}

else

{

for (int i = 5; i < 8; ++i) {

for (int j = 0; j < 4; ++j) {

if (Board[i][j] == Сheckers) {

Count += 3;

}

}

}

}

return Count;

}

int EvaluationFunction(char Board[8][8]) // Оценочная функция

{

return (OutsideOfHome(Board, '2') + CloseToHome(Board, '2') + InHome(Board, '2')) - (OutsideOfHome(Board, '1') + CloseToHome(Board, '1') + InHome(Board, '1'));

}

int main()

{

setlocale(LC_ALL, "ru");

// На доске представлены черные и белые шашки

// '1' - черные шашки

// '2' - белые шашки

char Board[8][8] =

{

'0', '0', '0', '0', '1', '1', '1', '1',

'0', '0', '0', '2', '1', '1', '1', '1',

'0', '0', '0', '1', '2', '0', '1', '1',

'0', '0', '1', '0', '2', '0', '0', '0',

'0', '0', '0', '2', '0', '0', '0', '0',

'2', '2', '0', '0', '0', '0', '0', '0',

'2', '0', '2', '2', '0', '0', '0', '0',

'2', '2', '0', '2', '0', '0', '0', '0',

};

int result = EvaluationFunction(Board);

if (result < 0)

cout << "Выиграшная ситуация у черных шашек " << result;

else

cout << "Выиграшная ситуация у белых шашек " << result;

return 0;

}