首先,我在for循环外定义了两个变量.
//在4条直线方向,获取预置点两端的8个点的棋盘信息
int step1=,r=,c=;//step代表直线,r,c分别代表加上偏移量之后的坐标
int count=,myCount=,hisCount=;//与中心点相连接的同色子的个数,myCount用于myScore,hisCount用于hisScore
int chessInfo[][];//定义4个存储每条直线上的,预置点附近点的信息.一维0,1,2,3分别为竖直,k=1,水平,k=-1的直线.
//存储方式:如水平线上,预置点左边3个与右边3个,如chess[2][8]={左3,左2,左1,左,右,右1,右2,右3},其他同理.
然后,我在for循环中的更改变量后,望使用更改后的变量值,代码中标红处.
//存储信息并判断分数
for(step1;step1<;step1++) {
for(int changeCount=;changeCount!=;changeCount++){
int dir = step1;
int nowChess;
if(changeCount==){//改变判断棋子的角度
nowChess=myChess;
//qDebug()<<__LINE__<<nowChess;
}else if(changeCount==){
nowChess=(myChess==?:);
//qDebug()<<__LINE__<<nowChess;
}
for(int k=;k<;k++){//每个方向取4个子的信息
if(k==0){
//qDebug()<<__LINE__<<"switch";
switch(step1){//前四个方向的初始值,通过基点位置加偏移量的方式,获取附近的点信息
case 0:
r=i-1+1;
c=j+1;
break;
case 1:
r=i-1+1;
c=j+1+1;
break;
case 2:
r=i+1;
c=j+1+1;
break;
case 3:
r=i+1+1;
c=j+1+1;
break;
}
}else{
qDebug()<<__LINE__<<"!";
qDebug()<<__LINE__<<r;
qDebug()<<__LINE__<<c;
r+=dx[dir];//这里有问题,r和c并没有变化,不知道为什么.
c+=dy[dir];
//qDebug()<<__LINE__<<r;
//qDebug()<<__LINE__<<c;
//qDebug()<<__LINE__<<"!";
}
if(r< || c< || r> || c>){
break;
}
if(chess[r][c]==nowChess){
count++;
chessInfo[step1][-k]=nowChess;
}else{
chessInfo[step1][-k]=chess[r][c];
break;
}
}
for(int k=;k<;k++){
dir+=;
if(k==0){
//qDebug()<<__LINE__<<"switch";
switch(step1){//后四个方向的初始值
case 0:
r=i+1+1;
c=j+1;
break;
case 1:
r=i+1+1;
c=j-1+1;
break;
case 2:
r=i+1;
c=j-1+1;
break;
case 3:
r=i-1+1;
c=j-1+1;
break;
}
}else{
//qDebug()<<__LINE__<<"!";
//qDebug()<<__LINE__<<r;
//qDebug()<<__LINE__<<c;
r+=dx[dir];
c+=dy[dir];
//qDebug()<<__LINE__<<r;
//qDebug()<<__LINE__<<c;
//qDebug()<<__LINE__<<"!";
}
if(r< || c< || r> || c>){
break;
}
if(chess[r][c]==nowChess){
chessInfo[step1][k+]=nowChess;
count++;
}else{
chessInfo[step1][k+]=chess[r][c];
break;
}
}
myCount=changeCount==?count:myCount;
hisCount=changeCount==?count:hisCount;
}
}
但qDebug()证明并没有成功使用修改后的变量.仍然使用了最初switch语句中改变的r和c的值.
求大神指教,为什么同样是for循环中,有的能够更改外部变量并使用改变后的值,有的却不行呢???
谢谢....