實驗7-2-10 簡易連連看 (20分)
本題要求實現一個簡易連連看遊戲模擬程序。
給定一個2N×2N的方陣網格遊戲盤面,每個格子中放置一些符號。這些符號一定是成對出現的,同一個符號可能不止一對。程序讀入玩家給出的一對位置(x1,y1)、(x2,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