本题要求实现一个简易连连看游戏模拟程序。
给定一个2Nx2N的方阵网格游戏盘面,每个格子中放置一些符号。这些符号一定是成对出现的,同一个符号可能不止一对。程序读入玩家给出的一对位置(x1, y1)、(x2, y2),判断这两个位置上的符号是否匹配。如果匹配成功,则将两个符号消为“*”并输出消去后的盘面;否则输出“Uh-oh”。若匹配错误达到3次,则输出“Game Over”并结束游戏。或者当全部符号匹配成功,则输出“Congratulations!”,然后结束游戏。
输入格式:
输入在一行中给一个正整数N(<5)。随后2N行,每行2N个大写英文字母(其间以1个空格分隔),表示游戏盘面。盘面之后给出一个正整数K,随后K行,每行按照格式“x1 y1 x2 y2”给出一个玩家的输入。注意格子的行、列编号是从1到2N。
输出格式:
根据玩家的每一步输入,输出相应的结果。输出盘面时注意,每行字符间以1个空格分隔,行末不得有多余空格。
输入样例1:2 I T I T Y T I A T A T Y I K K T 11 1 1 1 3 4 2 4 3 3 1 4 2 2 2 1 2 3 1 2 4 4 4 3 1 2 1 3 4 3 3 1 4 4 1 2 3 2 4 3 2 1 1 2 2输出样例1:
* T * T Y T I A T A T Y I K K T * T * T Y T I A T A T Y I * * T Uh-oh * * * T Y * I A T A T Y I * * T Uh-oh * * * T Y * I A * A T Y I * * * * * * T * * I A * A T * I * * * * * * * * * I A * A * * I * * * * * * * * * * A * A * * * * * * Congratulations!输入样例2:
2 I T I T Y T I A T A T Y I K K T 5 1 1 4 4 1 1 2 3 1 1 2 3 2 2 4 1 2 2 3 3输出样例2:
Uh-oh * T I T Y T * A T A T Y I K K T Uh-oh Uh-oh Game Over
解:import java.text.DecimalFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashSet; import java.util.LinkedList; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); //正整数 N,k int n =scanner.nextInt(); int k=0; // 2N* 2N 个大写英文字母 int length = 2*n+1; char[][] arr = new char[length][length]; for(int i=1;i<length;++i) { for(int j=1;j<length;++j) { arr[i][j]=scanner.next().charAt(0); } } //给出一个正整数k, 表示k行 k= scanner.nextInt(); //消除的次数 int successTime =0; //错误的次数 int errorTime =0; for(int i=0;i<k;i++) { //是否正确 boolean flag = false; //获取4个输入的数字,表示 (x1,y1) (x2,y2) int x1 = scanner.nextInt(); int y1 = scanner.nextInt(); int x2 = scanner.nextInt(); int y2 = scanner.nextInt(); //是否要考虑 x1,y1输入超过2N边界的情况? if(errorTime ==3) { System.out.println("Game Over"); return ; } else if( arr[x1][y1] == arr[x2][y2] && arr[x1][y1]!='*' ) { arr[x1][y1]='*'; arr[x2][y2]='*'; flag = true; } if(flag) { successTime++; if(successTime == 2*Math.pow(n, 2)) { System.out.println("Congratulations!"); return; } printArr(arr); } else { System.out.println("Uh-oh"); errorTime++; } } } public static void printArr(char[][] arr) { for(int i=1;i<arr.length;i++) { for(int j=1;j<arr.length;j++) { System.out.print(arr[i][j]); if(j!=arr.length-1) { System.out.print(" "); } } // 换行 System.out.println(""); } } }