• 大小: 12KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-14
  • 语言: C/C++
  • 标签: C++  面向对象  

资源简介

1、用C++程序设计语言,面向对象程序设计风格 2、命令行形式 3、有禁手功能 4、满足基本的五子棋规则 5、有悔棋功能 6、实现人人、人机对战

资源截图

代码片段和文件信息

#include “AI.h“
#include 
#include 


AI::AI(Chess chess GameRule gamerule)
: Player(chess) gameRule_(gamerule)
{
}


int Evaluate(ChessModel model)
{
switch (model)
{
case DeadTwo:
case DeadThree:
case DeadFour:
return -1;

case SleepTwo:
return 5;
case SleepThree:
return 10;

case SleepFour:
return 3000;

case AliveTwo:
return 50;
case AliveThree:
return 5000;
case AliveFour:
return 100000;
case FiveLine:
return 10000000;
default:
break;
}
return 0;
}


int AI::EvaluatePoint(const Chessboard &chessboard Coord coord) const
{
std::vector models = chessboard.GetChessModel(coord.x coord.y);
int aliveThree = 0 four = 0;
int value = 0;

for (auto model : models)
{
if (model == FiveLine)
{
return Evaluate(model);
}
else if (model == AliveThree)
{
aliveThree++;
}
else if (model == AliveFour || model == SleepFour)
{
four++;
}
else if (model == OverLine)
{
if (gameRule_.IsEnableOverline())
{
return Evaluate(FiveLine);
}
return -1;
}
value += Evaluate(model);
}
if (GetChess() == Chess_Black)
{
if (aliveThree >= 2 && gameRule_.IsEnableDoubleThree() == false)
{
return -1;
}
else if (four >= 2 && gameRule_.IsEnableDoubleFour() == false)
{
return -1;
}
}
return value;
}



Coord AI::GetInputCoord(const Chessboard & chessboard) const
{
Chessboard newChessboard = chessboard;
if (chessboard.GetChessCount() == 0)
{
int centerPos = chessboard.GetSize() / 2;
return { centerPos centerPos };
}
int bestWeight = INT_MIN;
Coord bestCoord{ -1 -1 };
for (int i = 0; i < chessboard.GetSize(); ++i)
{
for (int j = 0; j < chessboard.GetSize(); ++j)
{
if (chessboard.GetChess(j i) == 0 && chessboard.HasNeighbor(j i 1))
{
Coord coord{ j i };
//假设己方落子 计算进攻分数
newChessboard.SetGrid(GetChess() j i);
int attackScore = EvaluatePoint(newChessboard coord);

//假设敌方落子 计算防守分数
newChessboard.SetGrid(-1 * GetChess() j i);
int defenseScore = EvaluatePoint(newChessboard coord) - 1; //进攻的优先级大于防守 所以减1

//还原棋盘
newChessboard.SetGrid(0 j i);

if (attackScore + defenseScore > bestWeight)
{
bestWeight = attackScore + defenseScore;
bestCoord = coord;
}
else if (attackScore + defenseScore == bestWeight)
{
//如果是黑棋 优先进攻
if (GetChess() == Chess_Black && attackScore > defenseScore)
{
bestCoord = coord;
}
}
}
}
}
return bestCoord;
}




 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-12-01 15:39  Gomoku\
     目录           0  2018-12-01 15:38  Gomoku\Gomoku\
     文件        1432  2018-11-28 21:14  Gomoku\Gomoku.sln
     文件        2689  2018-12-01 14:52  Gomoku\Gomoku\AI.cpp
     文件         630  2018-12-01 13:59  Gomoku\Gomoku\AI.h
     文件          57  2018-11-28 22:00  Gomoku\Gomoku\Chess.cpp
     文件         417  2018-11-30 12:28  Gomoku\Gomoku\Chess.h
     文件        5770  2018-12-01 12:48  Gomoku\Gomoku\Chessboard.cpp
     文件        2576  2018-12-01 12:48  Gomoku\Gomoku\Chessboard.h
     文件        4112  2018-12-01 15:37  Gomoku\Gomoku\Game.cpp
     文件        1071  2018-12-01 15:33  Gomoku\Gomoku\Game.h
     文件        1472  2018-12-01 09:21  Gomoku\Gomoku\GameRule.cpp
     文件        1566  2018-11-30 16:06  Gomoku\Gomoku\GameRule.h
     文件        6443  2018-12-01 08:44  Gomoku\Gomoku\Gomoku.vcxproj
     文件        2046  2018-12-01 12:49  Gomoku\Gomoku\Gomoku.vcxproj.filters
     文件         165  2018-11-28 21:14  Gomoku\Gomoku\Gomoku.vcxproj.user
     文件          82  2018-12-01 14:01  Gomoku\Gomoku\main.cpp
     文件         959  2018-12-01 15:33  Gomoku\Gomoku\Player.cpp
     文件         264  2018-12-01 15:33  Gomoku\Gomoku\Player.h

评论

共有 条评论