7-2-10 简易连连看
重新整理思路,写的代码多点,思路清晰点。
**题目要求**
本题要求实现一个简易连连看游戏模拟程序。
给定一个2N×2N的方阵网格游戏盘面,每个格子中放置一些符号。
这些符号一定是成对出现的,同一个符号可能不止一对。
程序读入玩家给出的一对位置(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;
}
模拟思路写的,可能写的不是很简洁。可供参考。