程序突然 cpu 使用量激增,看起来像是暂停了
Program suddenly has a spike in cpu usage and looks like it is paused
我添加了 2 个功能:
int aiCheckScore(char arr[7][7], int inp, int height, Player player)
int aiFindMostRelevant(char arr[7][7], Player player)
第一个为二维数组中的给定位置打分。如果我们在这个位置添加一个(不包括我们刚刚添加的那个),那么得分等于我们在一行中有多少相同类型的元素(垂直、水平或对角线,并且保留这 3 个中最好的一个)
第二个函数一次检查 7 个位置并找到得分最高的那个 returns。我试着添加一点随机性,这样如果 2 个位置的分数相同,程序将有 30% 的时间选择最后一个(这样它就不会总是选择第一个)。
没有我添加随机性的位,代码运行得很好。一旦我添加它,程序就会在第 12 次调用第一个函数后立即停止。此外,该程序的 CPU 使用率突然飙升,并从之前的 5% 以下保持在 50%。
我修改了几次创建随机性的代码,但似乎没有任何改变。我什至无法理解为什么会导致这样的问题。
我的 2 个函数是:
int aiCheckScore(char arr[7][7], int inp, int height, Player player) {
int i, j;
int score[4] = { 0 };
//check horizontal score
for (i = inp - 1; i >= 0; i--) { //everything left
if (arr[height][i] != player.symb)
break;
++score[0];
}
for (i = inp + 1; i <= 6; i) { //everything right
if (arr[height][i] != player.symb)
break;
++score[0];
}
//check vertical score (we only have to check down)
for (i = height + 1; i <= 6; i++) {
if (arr[i][inp] != player.symb)
break;
++score[1];
}
//check diagonal (which starts left and above and goes down and right)
j = height - 1;
for (i = inp - 1; i >= 0 && j >= 0; i--) { //above and left
if (arr[j][i] != player.symb)
break;
++score[2];
--j;
}
j = height + 1;
for (i = inp + 1; i <= 6 && j <= 6; i++) { //down and right
if (arr[j][i] != player.symb)
break;
++score[2];
++j;
}
//check diagonal (which starts left and down and goes up and right)
j = height + 1;
for (i = inp - 1; i >= 0 && j <= 6; i--) { //down and left
if (arr[j][i] != player.symb)
break;
++score[3];
++j;
}
j = height - 1;
for (i = inp + 1; i <= 6 && j >= 0; i++) { //up and right
if (arr[j][i] != player.symb)
break;
++score[3];
--j;
}
int bestscore = score[0];
for (i = 0; i <= 3; i++) {
if (score[i] > bestscore)
bestscore = score[i];
}
printf("%d", bestscore);
return bestscore;
}
int aiFindMostRelevant(char arr[7][7], Player player) {
int i, height;
int score[7] = { 0 };
for (i = 0; i <= 6; i++) {
height = findHeight(arr, i);
if (height == -1) {//skip the columns that are full
score[i] = -100; //and give them a very bad score
}
else {
score[i] = aiCheckScore(arr, i, height, player);
}
}
int bestscore = score[0];
int bestposition = 0;
int num;
for (i = 0; i <= 6; i++) {
num = (int)rand() % 10;
if (score[i] == bestscore) { //if 2 positions have the same score
if (num >= 7) { //there is a 30% chance the ai will take the new one to add some variety
bestposition = i;
}
}
if (score[i] > bestscore) { //always take the position with the best score
bestscore = score[i];
bestposition = i;
}
}
return bestposition;
}
任何解决此问题的帮助将不胜感激,欢迎提出总体改进我的代码的任何建议
看起来其中一个循环没有增量。
变化:
for (i = inp + 1; i <= 6; i)
到 for (i = inp + 1; i <= 6; ++i)
看看是否有帮助。
我添加了 2 个功能:
int aiCheckScore(char arr[7][7], int inp, int height, Player player)
int aiFindMostRelevant(char arr[7][7], Player player)
第一个为二维数组中的给定位置打分。如果我们在这个位置添加一个(不包括我们刚刚添加的那个),那么得分等于我们在一行中有多少相同类型的元素(垂直、水平或对角线,并且保留这 3 个中最好的一个)
第二个函数一次检查 7 个位置并找到得分最高的那个 returns。我试着添加一点随机性,这样如果 2 个位置的分数相同,程序将有 30% 的时间选择最后一个(这样它就不会总是选择第一个)。
没有我添加随机性的位,代码运行得很好。一旦我添加它,程序就会在第 12 次调用第一个函数后立即停止。此外,该程序的 CPU 使用率突然飙升,并从之前的 5% 以下保持在 50%。
我修改了几次创建随机性的代码,但似乎没有任何改变。我什至无法理解为什么会导致这样的问题。
我的 2 个函数是:
int aiCheckScore(char arr[7][7], int inp, int height, Player player) {
int i, j;
int score[4] = { 0 };
//check horizontal score
for (i = inp - 1; i >= 0; i--) { //everything left
if (arr[height][i] != player.symb)
break;
++score[0];
}
for (i = inp + 1; i <= 6; i) { //everything right
if (arr[height][i] != player.symb)
break;
++score[0];
}
//check vertical score (we only have to check down)
for (i = height + 1; i <= 6; i++) {
if (arr[i][inp] != player.symb)
break;
++score[1];
}
//check diagonal (which starts left and above and goes down and right)
j = height - 1;
for (i = inp - 1; i >= 0 && j >= 0; i--) { //above and left
if (arr[j][i] != player.symb)
break;
++score[2];
--j;
}
j = height + 1;
for (i = inp + 1; i <= 6 && j <= 6; i++) { //down and right
if (arr[j][i] != player.symb)
break;
++score[2];
++j;
}
//check diagonal (which starts left and down and goes up and right)
j = height + 1;
for (i = inp - 1; i >= 0 && j <= 6; i--) { //down and left
if (arr[j][i] != player.symb)
break;
++score[3];
++j;
}
j = height - 1;
for (i = inp + 1; i <= 6 && j >= 0; i++) { //up and right
if (arr[j][i] != player.symb)
break;
++score[3];
--j;
}
int bestscore = score[0];
for (i = 0; i <= 3; i++) {
if (score[i] > bestscore)
bestscore = score[i];
}
printf("%d", bestscore);
return bestscore;
}
int aiFindMostRelevant(char arr[7][7], Player player) {
int i, height;
int score[7] = { 0 };
for (i = 0; i <= 6; i++) {
height = findHeight(arr, i);
if (height == -1) {//skip the columns that are full
score[i] = -100; //and give them a very bad score
}
else {
score[i] = aiCheckScore(arr, i, height, player);
}
}
int bestscore = score[0];
int bestposition = 0;
int num;
for (i = 0; i <= 6; i++) {
num = (int)rand() % 10;
if (score[i] == bestscore) { //if 2 positions have the same score
if (num >= 7) { //there is a 30% chance the ai will take the new one to add some variety
bestposition = i;
}
}
if (score[i] > bestscore) { //always take the position with the best score
bestscore = score[i];
bestposition = i;
}
}
return bestposition;
}
任何解决此问题的帮助将不胜感激,欢迎提出总体改进我的代码的任何建议
看起来其中一个循环没有增量。 变化:
for (i = inp + 1; i <= 6; i)
到 for (i = inp + 1; i <= 6; ++i)
看看是否有帮助。