C++ NIM对PC初学者的游戏
我的教授让我写一个16场比赛的Nim游戏 一项任务的一部分就是让PC机也能移动。所以,我试图通过使用SRAND解决这个问题,但PC选择了相同的行和相同数量的棍子。更重要的是,个人电脑还采取埃米威奇和击中墙壁时,他采取了零质量 所以,这就是我已经做过的。有什么想法吗C++ NIM对PC初学者的游戏,c++,c,C++,C,我的教授让我写一个16场比赛的Nim游戏 一项任务的一部分就是让PC机也能移动。所以,我试图通过使用SRAND解决这个问题,但PC选择了相同的行和相同数量的棍子。更重要的是,个人电脑还采取埃米威奇和击中墙壁时,他采取了零质量 所以,这就是我已经做过的。有什么想法吗 #include <stdio.h> #include <stdlib.h> #include <time.h> #define row 4 int main() { int theCh
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define row 4
int main()
{
int theChecker = 1, sticks[row] = {1,3,5,7}, stickSum, i, choiceRow, choiceStick, pcRow, pcStick;
char answer;
do
{
printf("\n\n\t ************ \n");
printf("\t *THE NIM GAME* \n");
printf("\t ************ \n\n");
stickSum = sticks[0] + sticks[1] + sticks[2] + sticks[3];
while(stickSum > 0)
{
printf("\nStick log:\n");
for(i = 0; i < row; i++)
printf("Row %d: %d\n", i+1, sticks[i]);
printf("\n");
if(theChecker == 1)
{
printf("Choose a row: ");
scanf("%d", &choiceRow);
printf("Choose a sick: ");
scanf("%d", &choiceStick);
while((choiceRow <= 0) || (choiceRow > 4) || (sticks[choiceRow - 1] < choiceStick) || (choiceStick == 0))
{
printf("\n\t !!!ERROR!!!\n\tInvalid row or stick\n\nCheck stick log above\n\n");
printf("Choose a row: ");
scanf("%d", &choiceRow);
printf("Choose a sick: ");
scanf("%d", &choiceStick);
}
sticks[choiceRow-1] -= choiceStick;
stickSum -= choiceStick;
}
else //pc move starts-------------------------------------------
{
while(((pcRow <= 0) || (pcRow > 4)) && sticks[choiceRow - 1] == 0)
{
time_t seconds;
seconds = 0;
time(&seconds);
srand((unsigned int)seconds);
pcRow = rand() % 4;
}
printf("PC ROW: %d\n", pcRow);
while((sticks[pcRow - 1] < pcStick) || (pcStick == 0))
{
time_t seconds2;
seconds2 = 0;
time(&seconds2);
srand((unsigned int)seconds2);
pcStick = rand() % 16;
}
printf("PC STICK: %d\n\n", pcStick);
sticks[pcRow-1] -= pcStick;
stickSum -= pcStick;
}
if((theChecker == 1) && (stickSum == 0))
printf("\n\n!!!GAME OVER!!! You took the last stick!!!\n\n");
else if((theChecker == 2) && (stickSum == 0))
printf("\n\n!!!CONGRATS!!! You won!!!\n\n");
theChecker++;
if(theChecker == 3)
theChecker -= 2;
}
printf("\nPress r to restart the game or any key to end the game: ");
scanf("%c", &answer);
printf("\n");
}
while(answer == 'r');
return 0;`enter code here`
}
#包括
#包括
#包括
#定义第4行
int main()
{
int theChecker=1,sticks[row]={1,3,5,7},stickSum,i,choiceRow,choiceStick,pcRow,pcStick;
答案;
做
{
printf(“\n\n\t***************\n”);
printf(“\t*NIM游戏*\n”);
printf(“\t***************\n\n”);
stickSum=棍棒[0]+棍棒[1]+棍棒[2]+棍棒[3];
而(粘滞度>0)
{
printf(“\n单击日志:\n”);
对于(i=0;i|
不要多次调用srand()
,它用于初始化随机种子,您总是将其初始化为相同的值,内部状态会反复重置,始终生成相同的伪随机值
我说你总是通过同一个种子,因为time()
有秒分辨率,在一秒钟内,整个游戏就结束了
你只需要在程序的开始时调用<代码> sRAND()/Code >,以防止程序在程序的运行中选择相同的值,而不是在同一个运行中。
如果你期望代码复查,下次考虑感谢你的建议:)变量:PCRO和PCLU在被初始化之前被使用。建议在代码中宣布它们的位置将它们设置为一些已知/无效的值。这一行,在你的问题中:“emty rows wich,当他拿零质量时撞到墙。”让我完全困惑。请进行编辑,以便对这4行内容有意义:time\u t seconds;秒=0;时间(秒);srand((无符号整数)秒);1) 他们应该在项目的一开始。2) 减少到:“srand(time(NULL));”