Advertisement
natsi

minesweeper

Dec 12th, 2019
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.24 KB | None | 0 0
  1. static int[] size={0,0};
  2. static int mines=0;
  3.  
  4.  
  5. public static void main(String[] args) {
  6. Scanner scanner = new Scanner(System.in);
  7. size[0]=scanner.nextInt();
  8. size[1]=scanner.nextInt();
  9. mines=scanner.nextInt();
  10. scanner.nextLine();
  11.  
  12. final boolean[][] isMine=new boolean[size[0]][size[1]];
  13. final boolean[][] isOpen=new boolean[size[0]][size[1]];
  14. final boolean[][] isFlagged=new boolean[size[0]][size[1]];
  15. final int[][] number=new int[size[0]][size[1]];
  16. final boolean[][]isEmpty=new boolean[size[0]][size[1]];
  17. boolean revealOrFlag=true;
  18. String input;
  19. generate(isMine, isOpen, isFlagged, number, isEmpty);
  20. do {
  21. input=null;
  22. display(isMine, isFlagged, isOpen, number, true);
  23. input = scanner.nextLine();}while(input.contentEquals(""));
  24.  
  25. while(isMine[Integer.parseInt(input.substring(1))-1][inputToIndex(input)]){
  26. generate(isMine, isOpen, isFlagged, number, isEmpty);}
  27. clickTile(Integer.parseInt(input.substring(1))-1,inputToIndex(input), isOpen, isMine, number);
  28. revealOrFlag=true;
  29. while(true) {
  30. do {
  31.  
  32. input=null;
  33. display(isMine, isFlagged, isOpen, number, revealOrFlag);
  34. input = scanner.nextLine();
  35. if(revealOrFlag){
  36. revealOrFlag=false;
  37. }else{
  38. revealOrFlag=true;
  39. }
  40. }while(input.contentEquals(""));
  41. if(revealOrFlag){
  42. revealOrFlag=false;
  43. }else{
  44. revealOrFlag=true;
  45. }
  46. if(revealOrFlag) {
  47. clickTile(Integer.parseInt(input.substring(1))-1,inputToIndex(input), isOpen, isMine, number);
  48. }else{
  49. flagTile(Integer.parseInt(input.substring(1))-1,inputToIndex(input),isOpen, isFlagged);
  50. }
  51. input = null;
  52. }
  53. }
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.  
  61. public static int inputToIndex(String input){
  62. String alphabet = "abcdefghijklmnopqrstuvwxyz";
  63. int i = 0;
  64. while(i<26){
  65. if(input.charAt(0)==alphabet.charAt(i))
  66. break;
  67. i++;
  68. }
  69. return i;
  70. }
  71.  
  72.  
  73.  
  74.  
  75.  
  76.  
  77.  
  78. public static void generate(boolean[][] isMine, boolean[][]isOpen, boolean[][]isFlagged, int[][]number, boolean[][]isEmpty) {
  79.  
  80. Random die = new Random();
  81. int square=0;
  82. int row=0;
  83. while(row<size[0]){
  84. isMine[row][square]=false;
  85. isOpen[row][square]=false;
  86. isFlagged[row][square]=false;
  87. isEmpty[row][square]=false;
  88. //System.out.print("generated square "+square);
  89. //System.out.print(" on row "+row);
  90. //System.out.println();
  91. square++;
  92. if(square==size[1]){
  93. row++;
  94. square=0;
  95. }
  96. }
  97. int i=0;
  98. while(i<mines){
  99. square=die.nextInt(size[1]);
  100. row=die.nextInt(size[0]);
  101. if(!isMine[row][square]) {
  102. isMine[row][square]=true;
  103. i++;}
  104. }
  105. square=0;
  106. row=0;
  107.  
  108. while(row<size[0]){
  109. number[row][square]=getNumber(row,square,isMine);
  110.  
  111. square++;
  112. if(square==size[1]){
  113. row++;
  114. square=0;}
  115. }
  116.  
  117.  
  118. }
  119.  
  120.  
  121.  
  122.  
  123.  
  124. public static void flagTile(int row, int square, boolean[][]isOpen, boolean[][]isFlagged){
  125. if(!isOpen[row][square])isFlagged[row][square]=true;
  126. }
  127.  
  128.  
  129.  
  130.  
  131. public static void clickTile(int row, int square, boolean[][]isOpen, boolean[][]isMine, int[][]number){
  132.  
  133. isOpen[row][square]=true;
  134. if(isMine[row][square]){
  135. row=0;
  136. square=0;
  137. while(row<size[0]){
  138. isOpen[row][square]=true;
  139.  
  140. square++;
  141. if(square==size[1]){
  142. row++;
  143. square=0;}
  144. }
  145. return;
  146. }
  147. if(number[row][square]==0){
  148.  
  149. int openSquares;
  150. int openSquaresAfter;
  151.  
  152.  
  153. do{
  154. openSquares=0;
  155. openSquaresAfter=0;
  156. row=0;
  157. square=0;
  158. while(row<size[0]){
  159. if(isOpen[row][square])
  160. openSquares++;
  161. square++;
  162. if(square==size[1]){
  163. row++;
  164. square=0;
  165. }
  166. row=0;
  167. square=0;
  168. }
  169. row=0;
  170. square=0;
  171. while(row<size[0]){
  172. if(number[row][square]==0&&isOpen[row][square]){
  173.  
  174. if(square>0)
  175. isOpen[row][square-1]=true;
  176. if(row>0&&square>0)
  177. isOpen[row-1][square-1]=true;
  178. if(row<size[0]-1&&square>0)
  179. isOpen[row+1][square-1]=true;
  180.  
  181.  
  182. if(square<size[1]-1)
  183. isOpen[row][square+1]=true;
  184. if(row<size[0]-1&&square<size[1]-1)
  185. isOpen[row+1][square+1]=true;
  186. if(row>0&&square<size[1]-1)
  187. isOpen[row-1][square+1]=true;
  188.  
  189. if(row<size[0]-1)
  190. isOpen[row+1][square]=true;
  191. if(row>0)
  192. isOpen[row-1][square]=true;
  193.  
  194. }
  195. square++;
  196. if(square==size[1]){
  197. row++;
  198. square=0;
  199. }
  200. }
  201. System.out.println("completed cycle");
  202.  
  203. row=0;
  204. square=0;
  205. while(row<size[0]){
  206. if(isOpen[row][square])
  207. openSquaresAfter++;
  208. square++;
  209. if(square==size[1]){
  210. row++;
  211. square=0;
  212. }
  213. }
  214. }while(openSquares!=openSquaresAfter);
  215. }
  216.  
  217. }
  218.  
  219.  
  220.  
  221.  
  222.  
  223.  
  224. public static void display(boolean[][]isMine, boolean[][]isFlagged, boolean[][]isOpen, int[][]number, boolean revealOrFlag){
  225.  
  226. String alphabet = "abcdefghijklmnopqrstuvwxyz";
  227. for(int i=0;i<=size[0];i++) {
  228. System.out.println();
  229. }
  230. System.out.print(" ");
  231. int i=0;
  232. while(i<size[1]){
  233. System.out.print(" "+alphabet.charAt(i)+" ");
  234. i++;
  235. }
  236. System.out.println();
  237.  
  238. int row=size[0]-1;
  239. int square=0;
  240.  
  241. System.out.print(row+1);
  242.  
  243. while(true){
  244. if(!isOpen[row][square]){
  245. if(isFlagged[row][square]){
  246. System.out.print("[P]");
  247. square++;
  248. }else{
  249. System.out.print("[ ]");
  250. square++;
  251. }
  252. }else if(isMine[row][square]){
  253. if(isFlagged[row][square]){
  254. System.out.print(" P ");
  255. square++;
  256. }else {
  257. System.out.print(" * ");
  258. square++;
  259. }
  260. }else if(number[row][square]==0){
  261. System.out.print(" ");
  262. square++;
  263. }else{
  264. System.out.print(" "+number[row][square]+" ");
  265. square++;
  266. }
  267. if(square==size[1]){
  268. if(row==0){
  269. break;
  270. }else{
  271. System.out.println();
  272. if(row<10)System.out.print(" ");
  273. System.out.print(row);
  274. row--;
  275. square=0;
  276. }
  277. }
  278. }
  279. System.out.println();
  280. if(revealOrFlag){
  281. System.out.println("Reveal: ");
  282. }else{
  283. System.out.println("Flag: ");
  284. }
  285. }
  286.  
  287.  
  288. public static int getNumber(int row, int square, boolean[][]isMine){
  289. int number=1;
  290.  
  291. if(!isMine[row][number]){
  292. number=0;
  293. if(square>0){
  294. if(isMine[row][square-1]){
  295. number++;
  296. }
  297. if(row>0&&isMine[row-1][square-1]){
  298. number++;
  299. }
  300. if(row<size[0]-1&&isMine[row+1][square-1]){
  301. number++;
  302. }
  303. }
  304. if(square<size[1]-1){
  305.  
  306. if(isMine[row][square+1]){
  307. number++;
  308. }
  309. if(row<size[0]-1&&isMine[row+1][square+1]){
  310. number++;
  311. }
  312. if(row>0&&isMine[row-1][square+1]){
  313. number++;
  314. }
  315. }
  316.  
  317. if(row<size[0]-1&&isMine[row+1][square]){
  318. number++;
  319. }
  320. if(row>0&&isMine[row-1][square]){
  321. number++;
  322. }
  323.  
  324. }
  325. return number;
  326. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement