《面向对象程序设计》(12)
时间:2025-04-20
时间:2025-04-20
valueattack[i][j]+=value_qx2(chessboard,i,j,k,(color+1) % 2); if(maxj<valuedefent[i][j])
maxj=valuedefent[i][j]; // 记录进攻价值的最大值 } if(rand()%(maxi+maxj+1)>maxi){ // 如果防守价值的最大值比较低 attacktrend=1; // AI优先进攻 defenttrend=1; }else{ // 相反 attacktrend=1; // AI优先防守 defenttrend=2; } for(i=0;i<15;i++) // 根据各点的进攻和防守价值 for(j=0;j<15;j++){ // 计算最终价值 value[i][j]=valuedefent[i][j]*defenttrend+valueattack[i][j]*attacktrend; if(max<value[i][j]){ max=value[i][j]; // 记录价值的最大值 maxi=i; // 以及相应的坐标 maxj=j; probability=1;} else if(max==value[i][j]){ // 如果出现相同价值的最大点 if(rand()%(probability+1)<probability) // 随机决定选取哪一个 probability++; /* 由于前面的点容易被淘汰,所以相应提高前面的点的被选择的几率 */ else{ probability=1; // 选择后面的点,则几率权值回复 max=value[i][j]; // 记录 maxi=i; maxj=j;} } } *x=maxi; // 返回价值最大的点 *y=maxj; }
//-----------------------主要部分------------------------------------
bool vshuman; //对手是否是人
void Vs(bool human) {//对局主要函数 int i,j; int color=1; // 黑棋先走 int lastx,lasty; // 光标的上一个位置 int computer; // 电脑执黑还是执白 NODE chessboard[15][15]={{0,0}}; // 棋盘 if(!human){ // 对手是电脑 showsubmenu(); // 选择谁是先手
上一篇:小学语文自主学习阅读教学模式设计
下一篇:2021元旦快乐校园演讲稿