五子棋人工智能算法中权值和级别划分的规则????

cbxhd 2003-06-22 08:53:29
CPoint CPenteDlg::UrgentPoint(BYTE byColor)//判断棋盘上哪一点最为紧迫,即适合下子**智能算法**核心
{
int i, i0, j, j0;

BeginWaitCursor();//处理一冗长的过程,等待光标

CPoint ptUrgent[2025], ptInit(-1,-1);
for (i=0; i<2025; ++i)
ptUrgent[i] = ptInit;

// Seed the random-number generator with current time so that
// the numbers will be different every time we run.
//
srand((unsigned)time(NULL));//利用时钟,产生随机数
CPoint ptCurrent;
i0=(rand()%2) ? 0:BOARD_LINE_NUMBER-1;
int nGrade1, nGrade2;
int nUrgent1, nUrgent2, nUrgent;
//从棋盘上搜索,位置随即
for (i=i0; !i0 ? i<BOARD_LINE_NUMBER:i>=0; !i0 ? ++i:--i)//
{
srand((unsigned)time(NULL));
j0=(rand()%2) ? 0:BOARD_LINE_NUMBER-1;
for (j=j0; !j0 ? j<BOARD_LINE_NUMBER:j>=0; !j0 ? ++j:--j)
{
if (m_Board[i][j]==0)
{
ptCurrent.x = i;
ptCurrent.y = j;
//获取己方紧迫度
nGrade1 = Judge(i, j, (char)(byColor+1));
//获取对方紧迫度
nGrade2 = Judge(i, j, (char)(!byColor+1));
//不同紧迫度,赋予不同度权值
if (g_nSkill == 3) //专家级处理
{
switch (nGrade1)
{
case 0 : nUrgent1 = 0; break;
case 1 : nUrgent1 = 2; break;
case 2 : nUrgent1 = 4; break;
case 3 : nUrgent1 = 5; break;
case 4 : nUrgent1 = 8; break;

case 5 : nUrgent1 = 10; break;
case 6 : nUrgent1 = 11; break;
case 7 : nUrgent1 = 12; break;
case 8 : nUrgent1 = 13; break;
case 9 : nUrgent1 = 14; break;
case 10 : nUrgent1 = 15; break;
case 11 : nUrgent1 = 16; break;
case 12 : nUrgent1 = 17; break;
case 13 : nUrgent1 = 18; break;
case 14 : nUrgent1 = 19; break;
case 15 : nUrgent1 = 20; break;

case 16 : nUrgent1 = 32; break;
case 17 : nUrgent1 = 34; break;
case 18 : nUrgent1 = 36; break;
case 19 : nUrgent1 = 38; break;
case 20 : nUrgent1 = 40; break;
default : nUrgent1 = 40; break;
}
switch (nGrade2)
{
case 0 : nUrgent2 = 1; break;
case 1 : nUrgent2 = 3; break;
case 2 : nUrgent2 = 6; break;
case 3 : nUrgent2 = 7; break;
case 4 : nUrgent2 = 9; break;

case 5 : nUrgent2 = 21; break;
case 6 : nUrgent2 = 22; break;
case 7 : nUrgent2 = 23; break;
case 8 : nUrgent2 = 24; break;
case 9 : nUrgent2 = 25; break;
case 10 : nUrgent2 = 26; break;
case 11 : nUrgent2 = 27; break;
case 12 : nUrgent2 = 28; break;
case 13 : nUrgent2 = 29; break;
case 14 : nUrgent2 = 30; break;
case 15 : nUrgent2 = 31; break;

case 16 : nUrgent2 = 33; break;
case 17 : nUrgent2 = 35; break;
case 18 : nUrgent2 = 37; break;
case 19 : nUrgent2 = 39; break;
case 20 : nUrgent2 = 41; break;
default : nUrgent2 = 41; break;
}
}
if (g_nSkill == 2)//中级处理
{
switch (nGrade1)
{
case 0 : nUrgent1 = 0; break;
case 1 : nUrgent1 = 2; break;
case 2 : nUrgent1 = 4; break;
case 3 : nUrgent1 = 5; break;
case 4 : nUrgent1 = 8; break;

case 5 :
case 6 :
case 7 : nUrgent1 = 10; break;
case 8 :
case 9 :
case 10 : nUrgent1 = 11; break;
case 11 : nUrgent1 = 12; break;
case 12 : nUrgent1 = 13; break;
case 13 :
case 14 :
case 15 : nUrgent1 = 14; break;

case 16 : nUrgent1 = 20; break;
case 17 : nUrgent1 = 22; break;
case 18 : nUrgent1 = 24; break;
case 19 : nUrgent1 = 26; break;
case 20 : nUrgent1 = 28; break;
default : nUrgent1 = 28; break;
}
switch (nGrade2)
{
case 0 : nUrgent2 = 1; break;
case 1 : nUrgent2 = 3; break;
case 2 : nUrgent2 = 6; break;
case 3 : nUrgent2 = 7; break;
case 4 : nUrgent2 = 9; break;

case 5 :
case 6 :
case 7 : nUrgent2 = 15; break;
case 8 :
case 9 :
case 10 : nUrgent2 = 16; break;
case 11 : nUrgent2 = 17; break;
case 12 : nUrgent2 = 18; break;
case 13 :
case 14 :
case 15 : nUrgent2 = 19; break;

case 16 : nUrgent2 = 21; break;
case 17 : nUrgent2 = 23; break;
case 18 : nUrgent2 = 25; break;
case 19 : nUrgent2 = 27; break;
case 20 : nUrgent2 = 29; break;
default : nUrgent2 = 29; break;
}
}
if (g_nSkill == 1)//处级处理
{
switch (nGrade1)
{
case 0 : nUrgent1 = 0; break;
case 1 : nUrgent1 = 2; break;
case 2 : nUrgent1 = 4; break;
case 3 : nUrgent1 = 5; break;
case 4 : nUrgent1 = 8; break;

case 5 :
case 6 :
case 7 :
case 8 :
case 9 :
case 10 : nUrgent1 = 10; break;
case 11 :
case 12 :
case 13 :
case 14 :
case 15 : nUrgent1 = 11; break;

case 16 : nUrgent1 = 14; break;
case 17 : nUrgent1 = 16; break;
case 18 : nUrgent1 = 18; break;
case 19 : nUrgent1 = 20; break;
case 20 : nUrgent1 = 22; break;
default : nUrgent1 = 22; break;
}
switch (nGrade2)
{
case 0 : nUrgent2 = 1; break;
case 1 : nUrgent2 = 3; break;
case 2 : nUrgent2 = 6; break;
case 3 : nUrgent2 = 7; break;
case 4 : nUrgent2 = 9; break;

case 5 :
case 6 :
case 7 :
case 8 :
case 9 :
case 10 : nUrgent2 = 12; break;
case 11 :
case 12 :
case 13 :
case 14 :
case 15 : nUrgent2 = 13; break;

case 16 : nUrgent2 = 15; break;
case 17 : nUrgent2 = 17; break;
case 18 : nUrgent2 = 19; break;
case 19 : nUrgent2 = 21; break;
case 20 : nUrgent2 = 23; break;
default : nUrgent2 = 23; break;
}
}

nUrgent = min(nUrgent1,nUrgent2)*45 + max(nUrgent1, nUrgent2);
ptUrgent[nUrgent] = ptCurrent;
}
}
}
//获取具有最小紧迫度的点
for (i=0; i<2025; ++i)
if (ptUrgent[i] != ptInit)
break;

EndWaitCursor();//结束等待光标

if (ptUrgent[i] == ptInit)
{
CString str1, str2;
str1.LoadString(IDS_DRAW_CHINESE);
str2.LoadString(IDS_TITLE_CHINESE);
MessageBox(str1, str2); //平局
}

return ptUrgent[i];//返回最小的点
}
...全文
270 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Yssss1980 2003-09-15
  • 打赏
  • 举报
回复
大哥,你都没有搜索,也能叫人工智能
wandola 2003-09-14
  • 打赏
  • 举报
回复
下载收藏,呵呵。
libi 2003-06-23
  • 打赏
  • 举报
回复
说说原理就可以,程序就免了。
搞这么多case语句,看得人都晕,不会用数组呀。
例如: nUrgent1 = ( nGrade1 < 20 ? A[nGrade1] : 40);
etomahawk 2003-06-22
  • 打赏
  • 举报
回复
能不能讲一讲做五子棋的思路!

8,304

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧