天天看点

C语言控制台小游戏

游戏规则:在一个5行5列的数组中,每个元素都有两种状态,输入一个坐标点(x,y)ps:x,y取值为1~5,这个点和其上下左右的四个点都会变为其相反的状态,

如果所有的元素都变成了空心的圆,则过关,进入下一关....

void initArray();//初始化数组

void refresh();//刷新数组

void trigger(int x,int y);//控制

void reversal(int x,int y);//逆转

void playerCood();//玩家坐标

int verdict();//裁定

void  levels();//关卡

void engine();//进程
           
char arr[5][5];

int answer[40] = {0};//保存随机数
int k = 0;

int level = 1;

char pos = '1';//positive
char neg = '0';//negative

void initArray()//初始化数组
{
    for(int i = 0; i < 5; i++)
    {
        for(int j = 0; j < 5; j++)
        {
            *(*(arr+i)+j) = pos;
        }
    }
}

void refresh()//刷新数组
{
    for(int i = 0; i < 5; i++)
    {
        for(int j = 0; j < 5; j++)
        {
            if(*(*(arr+i)+j) == pos)
                printf("⧬ ");
            else
                printf("⧭ ");
        }
        printf("\n");
    }
}

void reversal(int x,int y)//逆转
{
    if(*(*(arr+x)+y) == pos)
    {
        *(*(arr+x)+y) = neg;
    }
    else
    {
        *(*(arr+x)+y) = pos;
    }
}

void trigger(int x,int y)//控制
{
    reversal(x, y);
    if(x - 1 >= 0)
    {
        reversal(x - 1, y);//上
    }
    if(x + 1 <= 4)
    {
        reversal(x + 1, y);//下
    }
    if(y - 1 >= 0)
    {
        reversal(x, y - 1);//左
    }
    if(y + 1 <= 4)
    {
        reversal(x, y + 1);//右
    }
}

void playerCood()//玩家坐标
{
    int x = 0, y = 0;
    
    printf("Coordinate(x,y):");
    
    scanf("%d %d",&x,&y);
    if((x >0 && x <= 5) && (y > 0 && y <=5))
    {
        x = x - 1;//转换
        y = y - 1;
        trigger(x, y);
    }
    else    //输入错误提示并重新输入
    {
        printf("Input error ‼︎\n");
        playerCood();
    }
}

int verdict()//裁定
{
    for(int i = 0; i < 5; i++)
    {
        for(int j = 0; j < 5; j++)
        {
            if(*(*(arr+i)+j) == pos)
            {
                continue;
            }
            else    //说明不全为‘⧬’,游戏还没有结束,返回
            {
                return 0;
            }
        }
    }
    return 1;//game over
}

void  levels()//关卡
{
    k = 0;
    for(int i = 0; i < level; i++)
    {
        int x = arc4random()%5;
        int y = arc4random()%5;
        answer[k] = x+1;
        k++;
        answer[k] = y+1;
        k++;
        trigger(x, y);
    }
}

void engine()//进程
{
    char yesno[20] = {'n'};
    initArray();//数组初始化
    if(1 == level)
    {
        printf("THE 1 LEVEL\n");
    }
    levels();//载入关卡
    
    
    printf("Note:");
    for(int i = 0; i < k; i++)//答案
    {
        printf("(%d ",answer[i++]);
        printf("%d)",answer[i]);
        
    }
    printf("\n");
    
    
    refresh();//刷新
    
    while(YES)
    {
        
        playerCood();//玩家坐标
        
        refresh();//刷新
        
        if(verdict() == 1)  //判断是否结束
        {
            printf("Congratulations, You passed the %d level !\n",level);

            printf("Continue or exit (y/n)? ");
            
//            getchar();//获得
            
            scanf("%s",yesno);
            
            if('N' == yesno[0] || 'n' == yesno[0])
            {
                printf("\nExit Success!");
                exit(1);    //退出
            }
            else
            {
                level++;    //进入下一关
                printf("THE %d LEVEL\n",level);
                
                engine();
            }
        }
    }
}
           
int main(int argc, const char * argv[])
{
    engine();
    return 0;
}
           

效果:

THE 1 LEVEL

Note:(2 4)

⧬ ⧬ ⧬ ⧭ ⧬ 

⧬ ⧬ ⧭ ⧭ ⧭ 

⧬ ⧬ ⧬ ⧭ ⧬ 

⧬ ⧬ ⧬ ⧬ ⧬ 

⧬ ⧬ ⧬ ⧬ ⧬ 

Coordinate(x,y):2 4

⧬ ⧬ ⧬ ⧬ ⧬ 

⧬ ⧬ ⧬ ⧬ ⧬ 

⧬ ⧬ ⧬ ⧬ ⧬ 

⧬ ⧬ ⧬ ⧬ ⧬ 

⧬ ⧬ ⧬ ⧬ ⧬ 

Congratulations, You passed the 1 level !

Continue or exit (y/n)? y

THE 2 LEVEL

Note:(3 5)(4 1)

⧬ ⧬ ⧬ ⧬ ⧬ 

⧬ ⧬ ⧬ ⧬ ⧭ 

⧭ ⧬ ⧬ ⧭ ⧭ 

⧭ ⧭ ⧬ ⧬ ⧭ 

⧭ ⧬ ⧬ ⧬ ⧬ 

Coordinate(x,y):3 5

⧬ ⧬ ⧬ ⧬ ⧬ 

⧬ ⧬ ⧬ ⧬ ⧬ 

⧭ ⧬ ⧬ ⧬ ⧬ 

⧭ ⧭ ⧬ ⧬ ⧬ 

⧭ ⧬ ⧬ ⧬ ⧬ 

Coordinate(x,y):4 1

⧬ ⧬ ⧬ ⧬ ⧬ 

⧬ ⧬ ⧬ ⧬ ⧬ 

⧬ ⧬ ⧬ ⧬ ⧬ 

⧬ ⧬ ⧬ ⧬ ⧬ 

⧬ ⧬ ⧬ ⧬ ⧬ 

Congratulations, You passed the 2 level !

Continue or exit (y/n)? sadf

THE 3 LEVEL

Note:(1 4)(1 1)(3 1)

⧭ ⧭ ⧭ ⧭ ⧭ 

⧬ ⧬ ⧬ ⧭ ⧬ 

⧭ ⧭ ⧬ ⧬ ⧬ 

⧭ ⧬ ⧬ ⧬ ⧬ 

⧬ ⧬ ⧬ ⧬ ⧬ 

Coordinate(x,y):1 4

⧭ ⧭ ⧬ ⧬ ⧬ 

⧬ ⧬ ⧬ ⧬ ⧬ 

⧭ ⧭ ⧬ ⧬ ⧬ 

⧭ ⧬ ⧬ ⧬ ⧬ 

⧬ ⧬ ⧬ ⧬ ⧬ 

Coordinate(x,y):1 1

⧬ ⧬ ⧬ ⧬ ⧬ 

⧭ ⧬ ⧬ ⧬ ⧬ 

⧭ ⧭ ⧬ ⧬ ⧬ 

⧭ ⧬ ⧬ ⧬ ⧬ 

⧬ ⧬ ⧬ ⧬ ⧬ 

Coordinate(x,y):3 1

⧬ ⧬ ⧬ ⧬ ⧬ 

⧬ ⧬ ⧬ ⧬ ⧬ 

⧬ ⧬ ⧬ ⧬ ⧬ 

⧬ ⧬ ⧬ ⧬ ⧬ 

⧬ ⧬ ⧬ ⧬ ⧬ 

Congratulations, You passed the 3 level !

Continue or exit (y/n)? n

Exit Success!

继续阅读