免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1239 | 回复: 0

控制台扫雷 [复制链接]

论坛徽章:
0
发表于 2015-07-01 13:13 |显示全部楼层
[Java]代码
  1. import java.util.Random;
  2. import java.util.Scanner;
  3. public class MimeService {
  4.     //地雷格子
  5.     final int x=10;
  6.     final int y=10;
  7.     //总的地雷数
  8.     final int N=20;
  9.     public int[][] init() {
  10.         int[][] mime=new int[x][y];
  11.         int count=0;
  12.         Random random=new Random();
  13.         //初始化地雷
  14.         while (count<=N) {
  15.             int x1=random.nextInt(x);
  16.             int y1=random.nextInt(y);
  17.             if(mime[x1][y1]==0){
  18.                 mime[x1][y1]=9;
  19.                 count+=1;
  20.             }
  21.         }
  22.         //统计每个格子(不是地雷)周围地雷个数
  23.         for(int i=0;i<mime.length;i++){
  24.             for(int j=0;j<mime[i].length;j++){
  25.                 int mimeCount=0;
  26.                 if((j+1)<mime[i].length && mime[i][j+1]==9){
  27.                     mimeCount+=1;
  28.                 }
  29.                 if((j-1)>=0 && mime[i][j-1]==9){
  30.                     mimeCount+=1;           
  31.                 }
  32.                 if((i+1)<mime[i].length && (j+1)<mime.length && mime[i+1][j+1]==9){
  33.                     mimeCount+=1;
  34.                 }
  35.                 if((i+1)<mime[i].length && (j-1)>=0 && mime[i+1][j-1]==9){
  36.                     mimeCount+=1;               
  37.                 }
  38.                 if((i-1)>=0 && (j+1)<mime.length && mime[i-1][j+1]==9){
  39.                     mimeCount+=1;
  40.                 }
  41.                 if((i-1)>=0 && (j-1)>=0 && mime[i-1][j-1]==9){
  42.                     mimeCount+=1;
  43.                 }
  44.                 if((i-1)>=0 && mime[i-1][j]==9){
  45.                     mimeCount+=1;
  46.                 }
  47.                 if((i+1)<mime[i].length && mime[i+1][j]==9){
  48.                     mimeCount+=1;
  49.                 }
  50.                 if(mime[i][j]!=9){
  51.                     mime[i][j]=mimeCount;
  52.                 }
  53.             }
  54.         }
  55.         return mime;
  56.     }
  57.     public void whiteBoard(int[][]mime,char[][] or,int x,int y ) {
  58.         or[x][y]='0';
  59.         if((y+1)<mime[x].length && or[x][y+1]=='K'){
  60.             if(mime[x][y+1]!=0){
  61.                 or[x][y+1]=(char)(mime[x][y+1]+48);
  62.             }else {
  63.                 whiteBoard(mime, or, x, y+1);
  64.             }
  65.         }
  66.         if((y-1)>=0 && or[x][y-1]=='K'){
  67.             if(mime[x][y-1]!=0){
  68.                 or[x][y-1]=(char)(mime[x][y-1]+48);
  69.             }else {
  70.                 whiteBoard(mime, or, x, y-1);
  71.             }           
  72.         }
  73.         if((x+1)<mime[x].length && (y+1)<mime.length && or[x+1][y+1]=='K'){
  74.             if(mime[x+1][y+1]!=0){
  75.                 or[x+1][y+1]=(char)(mime[x+1][y+1]+48);
  76.             }else {
  77.                 whiteBoard(mime, or, x+1, y+1);
  78.             }      
  79.         }
  80.         if((x+1)<mime[x].length && (y-1)>=0 && or[x+1][y-1]=='K'){
  81.             if(mime[x+1][y-1]!=0){
  82.                 or[x+1][y-1]=(char)(mime[x+1][y-1]+48);
  83.             }else {
  84.                 whiteBoard(mime, or, x+1, y-1);
  85.             }      
  86.         }
  87.         if((x-1)>=0 && (y+1)<mime.length && or[x-1][y+1]=='K'){
  88.             if(mime[x-1][y+1]!=0){
  89.                 or[x-1][y+1]=(char)(mime[x-1][y+1]+48);
  90.             }else {
  91.                 whiteBoard(mime, or, x-1, y+1);
  92.             }      
  93.         }
  94.         if((x-1)>=0 && (y-1)>=0 && or[x-1][y-1]=='K'){
  95.             if(mime[x-1][y-1]!=0){
  96.                 or[x-1][y-1]=(char)(mime[x-1][y-1]+48);
  97.             }else {
  98.                 whiteBoard(mime, or, x-1, y-1);
  99.             }      
  100.         }
  101.         if((x-1)>=0 && or[x-1][y]=='K'){
  102.             if(mime[x-1][y]!=0){
  103.                 or[x-1][y]=(char)(mime[x-1][y]+48);
  104.             }else {
  105.                 whiteBoard(mime, or, x-1, y);
  106.             }   
  107.         }
  108.         if((x+1)<mime[x].length && or[x+1][y]=='K'){
  109.             if(mime[x+1][y]!=0){
  110.                 or[x+1][y]=(char)(mime[x+1][y]+48);
  111.             }else {
  112.                 whiteBoard(mime, or, x+1, y);
  113.             }   
  114.         }
  115.     }
  116.      
  117.     public static void main(String[] args) {
  118.         MimeService mineS=new MimeService();
  119.          
  120.         int[][] mine=mineS.init();
  121. //      for(int i=0;i<mine.length;i++){
  122. //          for(int j=0;j<mine[i].length;j++){
  123. //              System.out.print(mine[i][j]+"  ");
  124. //          }
  125. //          System.out.println();
  126. //      }
  127.         //初始化
  128.         char[][] or=new char[mine.length][mine[0].length];
  129.         for(int i=0;i<mine.length;i++){
  130.             for(int j=0;j<mine[i].length;j++){
  131.                 or[i][j]='K';
  132.             }
  133.         }
  134.         int totol=80;
  135.         while (totol<=80) {
  136.             System.out.println("输入格式 :1 3 c(x坐标,y坐标,点击)||输入格式 :1 3 m(x坐标,y坐标,标记为类) ");
  137.             System.out.println("扫雷开始:");
  138.             for(int i=0;i<mine.length;i++){
  139.                 for(int j=0;j<mine[i].length;j++){
  140.                     System.out.print(or[i][j]+"  ");
  141.                 }
  142.                 System.out.println();
  143.             }
  144.             System.out.println("---------------------------------");
  145.             Scanner scanner =new Scanner(System.in);
  146.             int y=scanner.nextInt()-1;
  147.             int x=scanner.nextInt()-1;
  148.             String sign=scanner.next();
  149.             if(sign.equalsIgnoreCase("C")){
  150.                 if(mine[x][y]==9){
  151.                     System.out.println("game over!!!");
  152.                     break;
  153.                 }else if (mine[x][y]<9&&mine[x][y]>0) {
  154.                     or[x][y]=(char)(48+mine[x][y]);
  155.                 }else if(mine[x][y]==0) {
  156.                     mineS.whiteBoard(mine, or, x, y);
  157.                 }
  158.             }else {
  159.                 or[x][y]='M';
  160.             }
  161.             
  162.         }
  163.     }
  164. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP