C++ 为什么';我的石头、布、剪刀不能给出正确的结果吗?

C++ 为什么';我的石头、布、剪刀不能给出正确的结果吗?,c++,opengl,C++,Opengl,下面的代码是我对石头、布、剪刀的实现。但是,问题是用户和计算机的移动不同步 下面是我执行它时发生的事情: 首先是计算机的选择(它显示“纸”)。 然后当我选择我的移动(岩石)时,它显示了它的移动(岩石)。 这是第二次(纸与石头)。 然后在第三次,当我用剪刀移动,它用纸移动时,结果显示为“平局”,但我应该赢了 我不明白代码是如何执行的,因为我用C++实现了逻辑,没有OpenGL部分,它工作得很好。p> 有人能看到代码中的问题吗 #include<stdio.h> #include<

下面的代码是我对石头、布、剪刀的实现。但是,问题是用户和计算机的移动不同步

下面是我执行它时发生的事情:

首先是计算机的选择(它显示“纸”)。 然后当我选择我的移动(岩石)时,它显示了它的移动(岩石)。 这是第二次(纸与石头)。 然后在第三次,当我用剪刀移动,它用纸移动时,结果显示为“平局”,但我应该赢了

<>我不明白代码是如何执行的,因为我用C++实现了逻辑,没有OpenGL部分,它工作得很好。p> 有人能看到代码中的问题吗

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<GL/glut.h>

int a; //GLOBAL VARIABLE TO CHECK USER'S CHOICE IN menu()
int n=0,sa,sb; //n IS NO. OF MOVES WE WANT- WE HAVE 3 MOVES IN THIS PROGRAM. sa & sb ARE THE SCORES OF USER AND COMPUTER RESPECTIVELY 
char ch;

int comp_move();//THIS CALCULATES COMPUTER'S MOVE
void check(int,int);//CHECKS WHO HAS WON/LOST IN ONE PARTICULAR MOVE

int comp_move()
{
    int c=0;
    c=rand()%3;
    if(c==1)drawrock(newrock);
    if(c==2)drawpaper(newpaper);
    if(c==3)drawscissor(newscissor);
    return c;
}

void check(int b)
{
    if(a==1) //rock is player's selection
    {
        if(b==2)sb++;
        if(b==3)sa++;
    }
    else if(a==2) //paper is player's selection
    {
        if(b==1) sa++;
        if(b==3) sb++;
    }
    else //scissor is player's selection
    {
        if(b==1)sb++;
        if(b==2)sa++;
    }
}

void menu(int id) //THE MENU FUNCTION
{
    switch(id)
    {
    case 1: a=1;n++;
            break;
    case 2: a=2;n++;
            break;
    case 3: a=3;n++;
            break;
    }
    glutPostRedisplay();
}

void display()
{
    //glClearColor(1.0,1.0,1.0,1.0);
    glColor3f(1.0,0.0,0.0);
glClear(GL_COLOR_BUFFER_BIT);

    if(a==1)drawrock(rock);
    if(a==2)drawpaper(paper);
    if (a==3)drawscissor(scissor);

    //for(int i=1;i<=n;i++)
    int b=comp_move();
    check(b);

    if(n==3)//3 rounds
    {
        if(sa>sb)
            sprint(150,450,a);//prints win
        else if(sa==sb)
            sprint(150,450,a);//prints loss
        else
            sprint(150,450,a);//prints tied
    }

    if(n>4) exit(0); //here i want to see the computer's third move
    glFlush();
}

void MYINIT()
{
    glClearColor(1.0,1.0,1.0,1.0);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluOrtho2D(0,500,0,500);
    glMatrixMode(GL_MODELVIEW);
}

int main()
{
    glutInitWindowSize(500,500);
    glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
    glutCreateWindow("rock, paper, scissors");
    glutCreateMenu(menu);
    glutAddMenuEntry("Rock",1);
    glutAddMenuEntry("Paper",2);
    glutAddMenuEntry("Scissors",3);
    glutAttachMenu(GLUT_RIGHT_BUTTON);
    MYINIT();
    glutDisplayFunc(display);
    glutMainLoop();
}
#包括
#包括
#包括
#包括
INTA//用于检查用户在菜单()中的选择的全局变量
int n=0,sa,sb//n是我们想要的移动数-我们在这个程序中有3个移动。sa和sb分别是用户和计算机的分数
char ch;
int comp_move()//这计算计算机的移动
无效检查(int,int)//检查在某一特定动作中获胜/失败的人
内部综合移动()
{
int c=0;
c=rand()%3;
若(c==1)拉丝岩(纽洛克);
若(c==2)图纸(新纸);
若(c==3)牵引剪(newscissor);
返回c;
}
无效检查(int b)
{
如果(a==1)//摇滚乐是玩家的选择
{
如果(b==2)sb++;
如果(b==3)sa++;
}
否则如果(a==2)//纸张是玩家的选择
{
如果(b==1)sa++;
如果(b==3)sb++;
}
否则//剪刀是玩家的选择
{
如果(b==1)sb++;
如果(b==2)sa++;
}
}
void menu(int id)//菜单函数
{
开关(id)
{
案例1:a=1;n++;
打破
案例2:a=2;n++;
打破
案例3:a=3;n++;
打破
}
再发现();
}
无效显示()
{
//glClearColor(1.0,1.0,1.0,1.0);
GL3F(1.0,0.0,0.0);
glClear(GLU颜色缓冲位);
若(a==1)牵引岩(岩石);
如果(a==2)张图纸(纸);
若(a==3)牵引剪(剪式);
//对于(int i=1;isb)
sprint(150450,a);//打印成功
如果(sa==sb),则为else
sprint(150450,a);//打印丢失
其他的
sprint(150450,a);//打印
}
如果(n>4)退出(0)//我想看看电脑的第三步
glFlush();
}
void MYINIT()
{
glClearColor(1.0,1.0,1.0,1.0);
glMatrixMode(GL_投影);
glLoadIdentity();
gluOrtho2D(0500,0500);
glMatrixMode(GLU模型视图);
}
int main()
{
glutInitWindowSize(500500);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
窗户(“石头、布、剪刀”);
创建菜单(菜单);
戊二醛(“岩石”,1);
戊二醛(“纸”,2);
戊二醛软膏(“剪刀”,3);
谷胱甘肽功能表(GLUT_右键);
MYINIT();
glutDisplayFunc(显示器);
glutMainLoop();
}
线路

c=rand()%3;
将键入介于
0
2
之间的值,而不是
1
3
。替换为:

c = 1 + (rand()%3);

不要只删除代码,请问一个具体的问题,哪里出了问题,只需添加相关代码即可。opengl代码并不重要。谢谢你的建议。我刚刚编辑了它。希望现在能有所帮助。请回复
c=rand()%3
将在
0
2
之间选择一个值,而不是
1
3
。如果有错误,请随时回滚/编辑它。此外,尝试选择准确的标签。这将帮助你吸引合适的专家来回答你的问题。谢谢@Hydronium编辑我的问题。谢谢@didierc。游戏现在运行正常。没问题,很乐意帮助!