實驗7-2-10 簡易連連看 (20分)——浙大版《C語言程序設計實驗與習題指導(第3版)》題目集

實驗7-2-10 簡易連連看 (20分)
本題要求實現一個簡易連連看遊戲模擬程序。

給定一個2N×2N的方陣網格遊戲盤面,每個格子中放置一些符號。這些符號一定是成對出現的,同一個符號可能不止一對。程序讀入玩家給出的一對位置(x​1,y​1)、(x​2,y2​​),判斷這兩個位置上的符號是否匹配。如果匹配成功,則將兩個符號消爲“*”並輸出消去後的盤面;否則輸出“Uh-oh”。若匹配錯誤達到3次,則輸出“Game Over”並結束遊戲。或者當全部符號匹配成功,則輸出“Congratulations!”,然後結束遊戲。
輸入格式:
輸入在一行中給一個正整數N(<5)。隨後2N行,每行2N個大寫英文字母(其間以1個空格分隔),表示遊戲盤面。盤面之後給出一個正整數K,隨後K行,每行按照格式“x1 y1 x2 y2​​ ”給出一個玩家的輸入。注意格子的行、列編號是從1到2N。
輸出格式:
根據玩家的每一步輸入,輸出相應的結果。輸出盤面時注意,每行字符間以1個空格分隔,行末不得有多餘空格。

#include<stdio.h>
//定義全局變量方便每一次成功消去後打印棋盤 
int n,k,fail_times=0,bingo_times=0;
char a[10][10];//定義最大的棋盤規模 
void print(){
    for(int i=0;i<n*2;i++){
        for(int j=0;j<n*2;j++){
            putchar(a[i][j]);
            //處理行末不能有空格的情況 
            if(j==2*n-1)putchar('\n');
            else putchar(' ');
        }
    }
}
int main(){
    int x1,y1,x2,y2;
    scanf("%d",&n);
    getchar();//吸收回車
    //輸入棋盤
    for(int i=0;i<2*n;i++){
        for(int j=0;j<2*n;j++){
           scanf("%c ",&a[i][j]);//注意空格
        }
    }
    scanf("%d",&k);
    while(k--){
        scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
        //由於數組中的下標是從0開始,故初始值都減去一 
        x1--;y1--;x2--;y2--;
        if(a[x1][y1]==a[x2][y2]&&a[x1][y1]!='*'&&a[x2][y2]!='*')
        {//測試點中有一項訪問**不算故應加上後續條件
            a[x1][y1]=a[x2][y2]='*';
            bingo_times++;
            if(bingo_times==n*n*2){
                printf("Congratulations!\n");
                break;
            }print();
        }else{
            fail_times++;
            printf("Uh-oh\n");
            if(fail_times==3){
                printf("Game Over\n");
                break;
            }
        }
    }return 0;
}

By——Suki

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章