久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4319|回復: 0
打印 上一主題 下一主題
收起左側

掃雷雷陣生成JAVA版(對昨天C版的一個小BUG進行了修復)

[復制鏈接]
跳轉到指定樓層
樓主
ID:72008 發表于 2015-1-11 20:03 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
還是原來的配方 還是熟悉的味道 把C版的用JAVA進行了封裝和修改,接口做的非常干凈可復用性果斷上了一個檔次





這次源文件分為兩個兩個文件要放在同個根目錄下其中saolei.java文件必須放在一個命名為JAVA的文件夾中:
先是入口類 saolei_ts.java 文件:

import JAVA.saolei; //引入掃雷類
public class saolei_ts{
  // 程序的入口
  public static void main(String args[]){
   
    final int LEI=10;  //地雷標記
    int x,y;
    int LQ[][]=new int[10][10]; //用于接收saolei類的計算數據
   
    saolei L=new saolei(10,10); //創建并操作saolei對象
    L.LEI_buju_bulei();
    L.LEI_buju_print();
    L.LEI_buju_tishi();
    L.LEI_buju_tishi_print();
    L.LEI_buju_shuchu(LQ);
   
      //向屏幕輸出saolei對象返回的數據
      System.out.print("接收到的數據如下:\n");
      for(y=0;y<10;y++)
      {
        for(x=0;x<10;x++)
        {
         if(LQ[y][x]==LEI) System.out.print("Q ");
             else if(LQ[y][x]==0) System.out.print("  ");
              else System.out.print(LQ[y][x]+" ");
        }
        System.out.print("\n");
       }
     
    }
}

接著是saolei.java 文件 :

package JAVA; //聲明包名為JAVA
import java.util.Random; //因為要使用隨機數發生器所以要引入這個類
public class saolei{
//掃雷類的定義及實現
  final int LEI=10;  //地雷標記
  private int LEI_X; //雷區列數
  private int LEI_Y; //雷區行數
  private int[][] LEI_buju;  //雷區地圖用二維數組表示
  private int[][] BJ;  //用于保存計算雷區狀況提示后的布局
/////////////////////////////////////////////////////
  public saolei( int Y,int X)
   {
    //X,Y參數指定要生成的雷陣大小
    //構造函數代替C版本的LEI_buju_inint函數完成初始化任務
    int x,y;
    LEI_X=X;
    LEI_Y=Y;
    //初始化雷區數組
    LEI_buju=new int[Y][X];
    BJ=new int[Y][X];
    for(y=0;y<LEI_Y;y++)
     for(x=0;x<LEI_X;x++)
     {
      LEI_buju[y][x]=0;               
     }
     for(y=0;y<LEI_Y;y++)
     for(x=0;x<LEI_X;x++)
     {
      BJ[y][x]=0;               
     }  
   }
/////////////////////////////////////////////////////
   public int LEI_buju_print()
   {
     //向屏幕輸出雷區狀態
     int x,y;
     System.out.print(LEI_Y+"X"+LEI_X+"雷區布雷情況如下(Q表示雷0表示安全):\n");
      for(y=0;y<LEI_Y;y++)
      {
        for(x=0;x<LEI_X;x++)
        {
         if(LEI_buju[y][x]==0) System.out.print(LEI_buju[y][x]+" ");
             else System.out.print("Q ");
        }
        System.out.print("\n");
       }
       //////////////////////////////////////////////
       System.out.print("\n去掉安全區域后的雷區布局如下:\n");
         for(y=0;y<LEI_Y;y++)
      {
        for(x=0;x<LEI_X;x++)
        {
         if(LEI_buju[y][x]==0) System.out.print("  ");
             else System.out.print("Q ");
        }
        System.out.print("\n");
       }
     return 1;
   }
/////////////////////////////////////////////////////
   public int LEI_buju_bulei()
   {
     //向雷區中隨機布雷
     int x,y,L,l;
     L=LEI_Y*LEI_X/10; //雷區中地雷總數
     for(l=0;l<L;)
    {
    y=new Random().nextInt(LEI_Y-1); //隨機產生地雷所在的行系數
    x=new Random().nextInt(LEI_X-1); //隨機產生地雷所在的列系數
    if(LEI_buju[y][x]==LEI) {continue;}
     else if(LEI_buju[y][x]==0)
     {
        LEI_buju[y][x]=LEI;
        l++;
     }  
    }   
     return 1;
   }
/////////////////////////////////////////////////////
   public int LEI_buju_tishi()
   {
      //計算地雷位置提示,結果保存在雷區布局數組BJ[][]中
      int x,y;
      //計算四個角
     if(LEI_buju[0][0]==LEI)
            {
              BJ[0][0]=LEI;
             }else BJ[0][0]=(LEI_buju[0][1]+LEI_buju[1][0]+LEI_buju[1][1])/10;
            
     if(LEI_buju[LEI_Y-1][0]==LEI)
            {
              BJ[LEI_Y-1][0]=LEI;
             }else BJ[LEI_Y-1][0]=(LEI_buju[LEI_Y-2][0]+LEI_buju[LEI_Y-2][1]+LEI_buju[LEI_Y-1][1])/10;
   
     if(LEI_buju[0][LEI_X-1]==LEI)
            {
              BJ[0][LEI_X-1]=LEI;
             }else BJ[0][LEI_X-1]=(LEI_buju[0][LEI_X-2]+LEI_buju[0][LEI_X-1]+LEI_buju[1][LEI_X-2])/10;
   
     if(LEI_buju[LEI_Y-1][LEI_X-1]==LEI)
            {
              BJ[LEI_Y-1][LEI_X-1]=LEI;
             }else BJ[LEI_Y-1][LEI_X-1]=(LEI_buju[LEI_Y-2][LEI_X-2]+LEI_buju[LEI_Y-2][LEI_X-1]+LEI_buju[LEI_Y-1][LEI_X-2])/10;
   //計算第一行
   for(y=0,x=1;x<LEI_X-1;x++)
   {
       if(LEI_buju[y][x]==LEI)
            {
              BJ[y][x]=LEI;
             }else
             {                       
             BJ[y][x]=(LEI_buju[y][x-1]+LEI_buju[y][x+1]+
             LEI_buju[y+1][x-1]+ LEI_buju[y+1][x]+LEI_buju[y+1][x+1])/10;
             }                     
    }
    //計算第一列
    for(y=1,x=0;y<LEI_Y-1;y++)
    {
      if(LEI_buju[y][x]==LEI)
            {
              BJ[y][x]=LEI;
             }else
             {                        
              BJ[y][x]=(LEI_buju[y-1][x]+LEI_buju[y-1][x+1]+
              LEI_buju[y][x+1]+
              LEI_buju[y+1][x]+LEI_buju[y+1][x+1])/10;  
              }            
    }
    //計算最后一行
   for(y=LEI_Y-1,x=1;x<LEI_X-1;x++)
   {
      if(LEI_buju[y][x]==LEI)
            {
              BJ[y][x]=LEI;
             }else
             {                              
               BJ[y][x]=(LEI_buju[y][x-1]+LEI_buju[y][x+1]+
              LEI_buju[y-1][x-1]+LEI_buju[y-1][x]+LEI_buju[y-1][x+1])/10;
              }                           
   }
   //計算最后一列
    for(y=1,x=LEI_X-1;y<LEI_Y-1;y++)
    {
        if(LEI_buju[y][x]==LEI)
            {
              BJ[y][x]=LEI;
             }else  
             {                           
               BJ[y][x]=(LEI_buju[y-1][x-1]+LEI_buju[y-1][x]+
               LEI_buju[y][x-1]+
               LEI_buju[y+1][x-1]+LEI_buju[y+1][x])/10;
             }
     }
    //計算其余的部分
     for(y=0;y<LEI_Y;y++)
    {
     for(x=0;x<LEI_X;x++)
     {
        if(x>=1&&x<LEI_X-1&&y>=1&&y<LEI_Y-1)  
        {
           if(LEI_buju[y][x]==LEI)
            {
              BJ[y][x]=LEI;
             }else {
                     BJ[y][x]=(LEI_buju[y-1][x-1]+LEI_buju[y-1][x]+LEI_buju[y-1][x+1]+
                     LEI_buju[y][x-1]+LEI_buju[y][x+1]+
                     LEI_buju[y+1][x-1]+LEI_buju[y+1][x]+LEI_buju[y+1][x+1])/10;
                   }                                 
        }              
     }
    }
      return 1;
   }
/////////////////////////////////////////////////////
   public int LEI_buju_tishi_print()
    {
      //向屏幕輸出計算后的提示信息
       int x,y;
      System.out.print(LEI_Y+"X"+LEI_X+"雷區布雷提示情況如下:\n");
      for(y=0;y<LEI_Y;y++)
      {
        for(x=0;x<LEI_X;x++)
        {
         if(BJ[y][x]==LEI) System.out.print("Q ");
             else if(BJ[y][x]==0) System.out.print("  ");
              else System.out.print(BJ[y][x]+" ");
        }
        System.out.print("\n");
       }
      return 1;
    }
/////////////////////////////////////////////////////
/////////////////////////////////////////////////////
   public int LEI_buju_shuchu(int[][] LQ)
    {
      //向外部提供一個以數組形試輸出的雷區狀態接口
      //LQ形參用于返回計算提示后的雷區信息
      int x,y;
      for(y=0;y<LEI_Y;y++)
      {
        for(x=0;x<LEI_X;x++)
        {
         LQ[y][x]=BJ[y][x];
        }
      }
      return 1;
    }
/////////////////////////////////////////////////////
}   

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品久久网 | 精品久久久久久久久久久 | 亚洲国产18| 粉嫩一区二区三区四区公司1 | 国产精品久久久久久久岛一牛影视 | 粉嫩av在线 | 中文字幕国产精品 | 国产精品一区二区在线 | 欧美一区二区三区视频在线观看 | 国产精品爱久久久久久久 | 一级黄色网页 | 中文成人无字幕乱码精品 | 欧美精品一区二区三区在线 | 欧美成人a∨高清免费观看 老司机午夜性大片 | av大全在线观看 | 色综合欧美 | 99热欧美 | 国产资源在线播放 | 在线观看国产wwwa级羞羞视频 | 国产精品成人国产乱 | 九九国产 | 国产高清视频在线播放 | 色欧美综合 | 国产精品一二区 | www国产亚洲精品久久网站 | 成人在线播放网址 | 精品欧美乱码久久久久久1区2区 | 国产色99精品9i | 久久九精品 | 色婷婷av一区二区三区软件 | www.嫩草| 福利视频网站 | 在线观看亚洲 | 日韩在线精品视频 | 日韩成人在线播放 | 亚洲小说图片 | 韩国理论电影在线 | 日本不卡一区二区三区 | 超碰免费在 | 欧美日韩综合一区 | 黄久久久 |