Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ NIM对PC初学者的游戏_C++_C - Fatal编程技术网

C++ NIM对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

我的教授让我写一个16场比赛的Nim游戏

一项任务的一部分就是让PC机也能移动。所以,我试图通过使用SRAND解决这个问题,但PC选择了相同的行和相同数量的棍子。更重要的是,个人电脑还采取埃米威奇和击中墙壁时,他采取了零质量

所以,这就是我已经做过的。有什么想法吗

#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));”