7-2-10 简易连连看

7-2-10 简易连连看

重新整理思路,写的代码多点,思路清晰点。

**题目要求**
本题要求实现一个简易连连看游戏模拟程序。
给定一个22N的方阵网格游戏盘面,每个格子中放置一些符号。
这些符号一定是成对出现的,同一个符号可能不止一对。
程序读入玩家给出的一对位置(x1,y1),(x2,y2)判断这两个位置上的符号是否匹配。
如果匹配成功,则将两个符号消为“*”并输出消去后的盘面;
否则输出“Uh-oh”。若匹配错误达到3次,则输出“Game Over”并结束游戏。
或者当全部符号匹配成功,则输出“Congratulations!”,然后结束游戏。

整理题目条件

  • 输入在一行中给一个正整数N,形成一个2N×2N的方阵网格游戏盘面。符号成对出现。
  • 循环k次读入玩家给出的一对位置(x1,y1),(x2,y2)。
  • 给出两对位置上的字符匹配成功,则将两个符号消为 “*” 并输出消去后的盘面。
  • 匹配失败输出“Uh-oh”。若匹配错误达到3次,则输出“Game Over”并结束游戏。
  • 全部符号匹配成功,则输出“Congratulations!”,然后结束游戏。
#include<stdio.h>
int col;//值为(2*n)方便使用
//打印盘面函数
void pr(char a[][col]){
    for(int i=0;i<col;i++){
        for(int j=0;j<col;j++){
        	//行末不能有多余的空格
            if(j == col-1){
                printf("%c",a[i][j]);
            }else{
                printf("%c ",a[i][j]);
            }
        }
        printf("\n");
    }
}
int main(){
	//输入值
    int n;
    scanf("%d",&n);
    col=n*2;
    char ch,a[col][col];
    ch=getchar();
    for(int i=0;i<col;i++){
        for(int j=0;j<col;j++){
            scanf("%c ",&a[i][j]);
        }
    }
    int k;
    scanf("%d",&k);
    //count记录错误次数,right记录正确次数,flag判断是否完全匹配。
    int count=0,right=0,flag=1;
    for(int i=0;i<k;i++){
        int x1,y1,x2,y2;
        scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
        //下标与输入值相差一,故减一。同时,匹配成功变为*不在重复记录。
        if(a[x1-1][y1-1] == a[x2-1][y2-1] && a[x1-1][y1-1] !='*'){
            a[x1-1][y1-1] = a[x2-1][y2-1]='*';
            //正确次数加一
            right++;
            //最多匹配 (col*col)/2次,例col=4,最多匹配8次即可全部匹配成功。
            if(right == (col*col)/2){
                break;
            }
            //每次成功消除后打印盘面。
            pr(a);
        }else{
        	//匹配失败
            printf("Uh-oh\n");
            //失败次数加一
            count++;
            //达到三次
            if(count == 3){
                printf("Game Over\n");
                //没有完全匹配
                flag=0;
                break;
            }
        }
    }
    //重新检查是否完全匹配,如k < 全部成功匹配所需次数,就提前退出,没有完全匹配。
    for(int i=0;i<col;i++){
        for(int j=0;j<col;j++){
            if(a[i][j] != '*'){
            	//没有完全匹配
                flag=0;
            }
        }
    }
    //是否完全匹配,是:那就祝贺你成功!否:下次加油哥们!
    if(flag){
        printf("Congratulations!");
    }
    return 0;
}

在这里插入图片描述
模拟思路写的,可能写的不是很简洁。可供参考。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值