Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- static int[] size={0,0};
- static int mines=0;
- public static void main(String[] args) {
- Scanner scanner = new Scanner(System.in);
- size[0]=scanner.nextInt();
- size[1]=scanner.nextInt();
- mines=scanner.nextInt();
- scanner.nextLine();
- final boolean[][] isMine=new boolean[size[0]][size[1]];
- final boolean[][] isOpen=new boolean[size[0]][size[1]];
- final boolean[][] isFlagged=new boolean[size[0]][size[1]];
- final int[][] number=new int[size[0]][size[1]];
- final boolean[][]isEmpty=new boolean[size[0]][size[1]];
- boolean revealOrFlag=true;
- String input;
- generate(isMine, isOpen, isFlagged, number, isEmpty);
- do {
- input=null;
- display(isMine, isFlagged, isOpen, number, true);
- input = scanner.nextLine();}while(input.contentEquals(""));
- while(isMine[Integer.parseInt(input.substring(1))-1][inputToIndex(input)]){
- generate(isMine, isOpen, isFlagged, number, isEmpty);}
- clickTile(Integer.parseInt(input.substring(1))-1,inputToIndex(input), isOpen, isMine, number);
- revealOrFlag=true;
- while(true) {
- do {
- input=null;
- display(isMine, isFlagged, isOpen, number, revealOrFlag);
- input = scanner.nextLine();
- if(revealOrFlag){
- revealOrFlag=false;
- }else{
- revealOrFlag=true;
- }
- }while(input.contentEquals(""));
- if(revealOrFlag){
- revealOrFlag=false;
- }else{
- revealOrFlag=true;
- }
- if(revealOrFlag) {
- clickTile(Integer.parseInt(input.substring(1))-1,inputToIndex(input), isOpen, isMine, number);
- }else{
- flagTile(Integer.parseInt(input.substring(1))-1,inputToIndex(input),isOpen, isFlagged);
- }
- input = null;
- }
- }
- public static int inputToIndex(String input){
- String alphabet = "abcdefghijklmnopqrstuvwxyz";
- int i = 0;
- while(i<26){
- if(input.charAt(0)==alphabet.charAt(i))
- break;
- i++;
- }
- return i;
- }
- public static void generate(boolean[][] isMine, boolean[][]isOpen, boolean[][]isFlagged, int[][]number, boolean[][]isEmpty) {
- Random die = new Random();
- int square=0;
- int row=0;
- while(row<size[0]){
- isMine[row][square]=false;
- isOpen[row][square]=false;
- isFlagged[row][square]=false;
- isEmpty[row][square]=false;
- //System.out.print("generated square "+square);
- //System.out.print(" on row "+row);
- //System.out.println();
- square++;
- if(square==size[1]){
- row++;
- square=0;
- }
- }
- int i=0;
- while(i<mines){
- square=die.nextInt(size[1]);
- row=die.nextInt(size[0]);
- if(!isMine[row][square]) {
- isMine[row][square]=true;
- i++;}
- }
- square=0;
- row=0;
- while(row<size[0]){
- number[row][square]=getNumber(row,square,isMine);
- square++;
- if(square==size[1]){
- row++;
- square=0;}
- }
- }
- public static void flagTile(int row, int square, boolean[][]isOpen, boolean[][]isFlagged){
- if(!isOpen[row][square])isFlagged[row][square]=true;
- }
- public static void clickTile(int row, int square, boolean[][]isOpen, boolean[][]isMine, int[][]number){
- isOpen[row][square]=true;
- if(isMine[row][square]){
- row=0;
- square=0;
- while(row<size[0]){
- isOpen[row][square]=true;
- square++;
- if(square==size[1]){
- row++;
- square=0;}
- }
- return;
- }
- if(number[row][square]==0){
- int openSquares;
- int openSquaresAfter;
- do{
- openSquares=0;
- openSquaresAfter=0;
- row=0;
- square=0;
- while(row<size[0]){
- if(isOpen[row][square])
- openSquares++;
- square++;
- if(square==size[1]){
- row++;
- square=0;
- }
- row=0;
- square=0;
- }
- row=0;
- square=0;
- while(row<size[0]){
- if(number[row][square]==0&&isOpen[row][square]){
- if(square>0)
- isOpen[row][square-1]=true;
- if(row>0&&square>0)
- isOpen[row-1][square-1]=true;
- if(row<size[0]-1&&square>0)
- isOpen[row+1][square-1]=true;
- if(square<size[1]-1)
- isOpen[row][square+1]=true;
- if(row<size[0]-1&&square<size[1]-1)
- isOpen[row+1][square+1]=true;
- if(row>0&&square<size[1]-1)
- isOpen[row-1][square+1]=true;
- if(row<size[0]-1)
- isOpen[row+1][square]=true;
- if(row>0)
- isOpen[row-1][square]=true;
- }
- square++;
- if(square==size[1]){
- row++;
- square=0;
- }
- }
- System.out.println("completed cycle");
- row=0;
- square=0;
- while(row<size[0]){
- if(isOpen[row][square])
- openSquaresAfter++;
- square++;
- if(square==size[1]){
- row++;
- square=0;
- }
- }
- }while(openSquares!=openSquaresAfter);
- }
- }
- public static void display(boolean[][]isMine, boolean[][]isFlagged, boolean[][]isOpen, int[][]number, boolean revealOrFlag){
- String alphabet = "abcdefghijklmnopqrstuvwxyz";
- for(int i=0;i<=size[0];i++) {
- System.out.println();
- }
- System.out.print(" ");
- int i=0;
- while(i<size[1]){
- System.out.print(" "+alphabet.charAt(i)+" ");
- i++;
- }
- System.out.println();
- int row=size[0]-1;
- int square=0;
- System.out.print(row+1);
- while(true){
- if(!isOpen[row][square]){
- if(isFlagged[row][square]){
- System.out.print("[P]");
- square++;
- }else{
- System.out.print("[ ]");
- square++;
- }
- }else if(isMine[row][square]){
- if(isFlagged[row][square]){
- System.out.print(" P ");
- square++;
- }else {
- System.out.print(" * ");
- square++;
- }
- }else if(number[row][square]==0){
- System.out.print(" ");
- square++;
- }else{
- System.out.print(" "+number[row][square]+" ");
- square++;
- }
- if(square==size[1]){
- if(row==0){
- break;
- }else{
- System.out.println();
- if(row<10)System.out.print(" ");
- System.out.print(row);
- row--;
- square=0;
- }
- }
- }
- System.out.println();
- if(revealOrFlag){
- System.out.println("Reveal: ");
- }else{
- System.out.println("Flag: ");
- }
- }
- public static int getNumber(int row, int square, boolean[][]isMine){
- int number=1;
- if(!isMine[row][number]){
- number=0;
- if(square>0){
- if(isMine[row][square-1]){
- number++;
- }
- if(row>0&&isMine[row-1][square-1]){
- number++;
- }
- if(row<size[0]-1&&isMine[row+1][square-1]){
- number++;
- }
- }
- if(square<size[1]-1){
- if(isMine[row][square+1]){
- number++;
- }
- if(row<size[0]-1&&isMine[row+1][square+1]){
- number++;
- }
- if(row>0&&isMine[row-1][square+1]){
- number++;
- }
- }
- if(row<size[0]-1&&isMine[row+1][square]){
- number++;
- }
- if(row>0&&isMine[row-1][square]){
- number++;
- }
- }
- return number;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement