C 通过加权调整范围
我已经创造了一个小游戏的岩石剪刀纸。我这样做是为了让前10个游戏都是由计算机随机移动(基于0-100之间的随机数,在等分范围内)来响应的 然而,在第二组10个游戏中,我希望计算机的响应根据玩家对前10个游戏的响应进行加权。 我在下面写了这篇文章,但是它应用了100%的权重 我只想对这个范围应用50%的权重,你有什么想法可以用最简单的方法来实现这一点 这是我写的一个函数,所以它只是代码的一部分C 通过加权调整范围,c,function,range,C,Function,Range,我已经创造了一个小游戏的岩石剪刀纸。我这样做是为了让前10个游戏都是由计算机随机移动(基于0-100之间的随机数,在等分范围内)来响应的 然而,在第二组10个游戏中,我希望计算机的响应根据玩家对前10个游戏的响应进行加权。 我在下面写了这篇文章,但是它应用了100%的权重 我只想对这个范围应用50%的权重,你有什么想法可以用最简单的方法来实现这一点 这是我写的一个函数,所以它只是代码的一部分 int z; float range[5]; float player_r, p
int z;
float range[5];
float player_r, player_s, player_p, games;
player_r = (float)playertotal_R;
player_s = (float)playertotal_S;
player_p = (float)playertotal_P;
games = (float)totalgames;
z = rand() % 101;
range[0] = player_s / games * 101.0;
range[1] = range[0] + 0.1;
range[2] = (range[0]) + (player_p / games * 100.0);
range[3] = range[2] + 0.1;
range[4] = 100.0;
if (z <= range[0]) {
strcpy(compresponse[w], "r");
computertotal_R++;
} else if ((z >= range[1]) && (z <= range[2])) {
strcpy(compresponse[w], "s");
computertotal_S++;
} else if ((z >= range[3]) && (z <= range[4])) {
strcpy(compresponse[w], "p");
computertotal_P++;
}
intz;
浮动范围[5];
浮动玩家r,玩家s,玩家p,游戏;
玩家=(浮动)玩家总数;
玩家=(浮动)玩家总数;
玩家p=(浮动)玩家总玩家p;
游戏=(浮动)总游戏;
z=rand()%101;
范围[0]=玩家/游戏*101.0;
范围[1]=范围[0]+0.1;
范围[2]=(范围[0])+(玩家/游戏*100.0);
范围[3]=范围[2]+0.1;
范围[4]=100.0;
如果(z=range[1])&&(z=range[3])&(z对现有代码的一些观察:
- 由于您的范围是有理数,因此最好不要生成0到99之间的整数,而是生成0到1之间的随机浮点数(独占):
- 当你有三个结果时,你不需要五个极限。在石头和纸、纸和剪刀之间找到中间极限就足够了。你也不需要检查范围的两边,因为较低的那一边已经被
else
:
double prob_rock = 1.0 / 3.0;
double prob_paper = 2.0 / 3.0;
if (z < prob_rock) {
// Rock
} else if (z < prob_paper) {
// Paper
} else {
// Scissors
}
或在上述示例中:
double prob_rock = 0.5 * npaper / games + 0.5 / 3.0;
double prob_paper = 0.5 * nscissors / games + 1.0 / 3.0;
- 另一种可能是先掷一枚硬币(50%的概率),然后在头部使用规则分布,然后对玩家的统计数据(如代码中的统计数据)进行反击
- 如果到目前为止你保留了玩家的一系列招式,你只需选择一个过去的招式并为其选择正确的反击
谢谢Oehm。信息量大,帮助很大:)谢谢
p[move] = 0.5 * p[countermove] + 0.5 * p[regular]
double prob_rock = 0.5 * npaper / games + 0.5 / 3.0;
double prob_paper = 0.5 * nscissors / games + 1.0 / 3.0;