kakatea 2014-12-17 05:39 采纳率: 0%
浏览 4489

c语言,为什么我定义了一个全局变量,总是会自动变为零?

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#include<conio.h> 
int score=0,move=0,a[4][4]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},temp[5],highest_score=0;
void print(void)
{
    int i,j;
    system("cls");
    printf("                      ___________________2048________________\n");
    printf("                        ------------how to play?----------\n");
    printf("                    A---left,D-right,W---up,S---down,0---exit\n");
    printf("                        ----------------------------------\n");
    printf("                                   highest score:%d\n",highest_score);
    printf("                        ----------------------------------\n");
    printf("                              score:%d          move:%d     \n",score,move);    
    for(i=0;i<4;i++)
    {
        printf("                               |-------------------|\n");
        printf("                               "); 
        for(j=0;j<4;j++)
        {
            if(a[i][j]==0)
            printf("|    ");
            else
            printf("|%-4d",a[i][j]);
            if(j==3)
            printf("|\n");
        }
    } 
    printf("                               |-------------------|\n");
}
int add()
{
    int i,j,t=1,change=0;
    while(t<=3)
    {
        for(i=0;i<3;i++)    
            {
                if(temp[i]==0)
                {   
                    if(temp[i]!=temp[i+1])
                        change=1;
                    temp[i]=temp[i+1];
                    temp[i+1]=0;
                }
            }
        t++;
    }
    for(i=0;i<3;i++)
    {
        if(temp[i]==temp[i+1])
        {
            if(temp[i]!=0)
            {
                change=1;
                score=score+temp[i];
            }
            temp[i]=temp[i]*2;
            temp[i+1]=0;
        }
    }
    t=1;
    while(t<=3)
    {
        for(i=0;i<3;i++)
        {
            if(temp[i]==0)
            {
                temp[i]=temp[i+1];
                temp[i+1]=0;
            }
        }
        t++;
    }
    return change;
}
int main()
{
    int change=1,gameover=0,i,j;
    char input;
    srand((unsigned)time(NULL));
    while(gameover==0)
    {
        if(change>=1)
        {
            do
            {
                i=((unsigned)rand())%4;
                j=((unsigned)rand())%4;
            }while(a[i][j]!=0);
            if(((unsigned)rand())%2==0)
                a[i][j]=2;
            else 
                a[i][j]=4; 
        }
        print();
        input=getch();
        change=0;
        if(input=='0')
        {
            printf("Do you really want to exit this game?Y/N\n");
            input=getch();
            if(input=='y'||input=='Y')
            break; 
        }
        else if(input=='w'||input=='W')
        {
            for(j=0;j<4;j++)
            {
                for(i=0;i<4;i++)
                    temp[i]=a[i][j];
                temp[5]=0;
                change+=add();
                for(i=0;i<4;i++)
                    a[i][j]=temp[i];
            }
            move++;
        }
        else if(input=='s'||input=='S')
        {
            for(j=0;j<4;j++)
            {
                for(i=0;i<4;i++)
                    temp[i]=a[3-i][j];
                temp[5]=0;
                change+=add();
                for(i=0;i<4;i++)
                    a[i][j]=temp[3-i];
            }
            move++;
        }
        else if(input=='a'||input=='A')
        {
            for(i=0;i<4;i++)
            {
                for(j=0;j<4;j++)
                    temp[j]=a[i][j];
                temp[5]=0;
                change+=add();
                for(j=0;j<4;j++)
                    a[i][j]=temp[j] ;   
            }
            move++;
        }
        else if(input=='d'||input=='D')
        {
            for(i=0;i<4;i++)
            {
                for(j=0;j<4;j++)
                    temp[j]=a[i][3-j];
                temp[5]=0;
                change+=add();
                for(j=0;j<4;j++)
                a[i][j]=temp[3-j];
            }
            move++;
        }
        gameover=1;
        for(i=0;i<4;i++)
            for(j=0;j<4;j++)
                {
                    if(a[i][j]==0)
                gameover=0;
                }
        if(gameover==1)
        {
            for(i=0;i<3;i++)
                for(j=0;j<3;j++)
                if(a[i][j]==a[i+1][j]||a[i][j]==a[i][j+1])
                gameover=0;
            for(i=0;i<3;i++)
                if(a[3][i]==a[3][i+1]||a[i][3]==a[i+1][3])
                gameover=0; 
        }
        if(gameover==1)
        {
            printf("Do you want to try again?Y/N");
            input=getch();
            if(input=='Y'||input=='y')
            {
                gameover=0;
                memset(a,0,sizeof(a));
                change=1;
                if(score>highest_score)
                highest_score=score;
                score=0;
                move=0; 
            }
            else if(input=='n'||input=='N')
            gameover=1;
        }
    }
    printf("\n                                      Game over!\n");
    getch();
    return 0;
} 

就是highest_score这个全局变量,为什么每次重新开始游戏的时候只在按过Y之后才会显示为score的值,之后一旦进行了一次操作,就右边为了0?而且我发现只要把它改为一个非零的数,就一切正常,这是为什么?

  • 写回答

5条回答

  • save4me 2014-12-17 06:05
    关注

    是因为你程序里面highest_score=score;是在按了Y之后,其实在gameover=1游戏结束的时候就可以判断和保存最高分了。

    评论

报告相同问题?

悬赏问题

  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮