返回   ShareGet 社群討論 > ≡ 電腦網路 ≡ > □ -- 程式設計討論

發表新主題 回覆
 
主題工具 顯示模式
  #1  
舊 2008-05-21, 05:46 AM
高級會員
 
註冊日期: 2004-06-20
文章: 155
給予: 0 | 感謝 0 | 共 0 篇
積分: 246 | 給分能力: 19
[問題][java]有關踩地雷

【問題敘述】:基本上大致完成,不過在回圈設定次數方面,因沒考慮到使用者會重覆
按鍵,而次數還是一直持續增加!
目前想做的地方是,利用ARRAY和使用者輸入的同時判段是否重覆再決定
是否 s 要++
註:紅字的地方為弟的問題(寫得很想放棄 ),還請大大們幫忙一下


代碼:
//隨機選 10 個不重複的位置(地雷)
//可檢測任一位至周圍的地雷數

import java.util.Scanner;
import javax.swing.JOptionPane;

public class Question18B_3{
	public static void main(String args[]){
		
		//首先指定 a1為11*11的矩陣 ,0~10 共11位置
	    int [][] a1 = new int[7][7];
	    int [][] a2 = new int[7][7];
	    //a2 是給user 紀錄選過的 陣列
	    int s = 0;

	       Scanner scan = new Scanner(System.in);
	       randomMine(a1);
	       computeAll(a1);
	       arrayPos(a2,0);
	       //引數紀錄a2和初始值=0
	       int x;
	       int y;
           
	    
           
	       do{
	   	
	       System.out.print("選擇一個位置 11 ~ 99 : ");
	       int pos = scan.nextInt();
	       int row = pos/10;
	       int column = pos%10;
	       a2[row][column] = 1;
	       /*多加一個a2[row][column] = 1;如果不加這行則顯示一個都沒按過的矩陣,
	         不管是否輸入數字進去;
	         若指定為0,則會跟最後的displayAll設定衝突到;
	         但我不懂為什麼要加1不加2*/
	       
	       
	       
	       System.out.println("你選的位置是 " + pos);
	       int result = computeOne(a1, row, column);


	    
	           if(result == -1){
		                             System.out.println("踩到地雷了!!" );
		                             System.out.println(displayAll(a1 , a2));
		                             break;
	           }else{	
	                                 System.out.println("周圍共有 " + result + " 個地雷!!");
	                                 System.out.println(displayAll(a1 , a2));
	                                 //老師多加一個引數displayAll(a1 , a2)
	                                 
	                }

	             
	   	     }while(++s !=14);

       
      
	           if(++s == 14)
               
                                     System.out.println("你找到全部的地雷!!!");
    

	   

        /*JOptionPane.showMessageDialog(null,displayAll(a1,a2));*/
        	    
	    
	    System.exit(0);
      }
	    
	
	
	//判斷是否踩到地雷
	public static int computeOne(int[][] mine, int x, int y){
		if(x < 1 || x > 4 || y < 1 || y > 4)
            return -2;
		int result = 0;
		if(mine[x][y] == -1)
			return -1;
			
		for(int i = -1; i<=1; i++)
	    	for(int j = -1; j<=1; j++){
	    		if(i!=0 || j!=0){
	    			/*i , j 為 user 選擇的位置,
	    			  以 i 和 j 各減 1 後的位置開始計算矩陣
	    			  所以 user 選的位置不能計算
	    			*/
	    			if(mine[x+i][y+j] == -1)
	    			/*[x+i][y+j],是說明 x 到 i 之間 和 y 到 j 之間
	    			  若為指定變數 -1 ,則為地雷	    			
	    			*/
	    			//說明result 自動加 1 ; result++
	    			result++;
	    		}
	    	}
		return result; 		
	}
	
    //標記所有的位置
    public static void computeAll(int[][] mine){
    	for(int i=1; i<=5; i++){
    		for(int j=1; j<=5; j++){
    			mine[i][j] = computeOne(mine, i, j);
    		}
    	}
    }
   
   //給定一個array(陣列)來紀錄 user 選過的Pos
    public static void arrayPos(int [][] mine,int s){
   	
    	
        for(int p1 = 0; p1 <= 5; p1++)
            for(int p2 = 0; p2 <= 5; p2++){

                   	  mine[p1][p2] = s;

          }

    }
   
//判斷是否重覆的位置,以 s=0 來算計
   public static void doubles(int a1[][],int a2[][]){
   	
		for(int i=1; i<5; i++){
	        for(int j=1; j<5; j++){
	        	if(a2){
	        		s = 0;
	        	}
	        }
		}	
    }
   
   //隨機給定20個地雷位置
	public static void randomMine(int[][] mine){
		int n=0, m=0;
		
		for(int i=0; i<2; i++){
	      do{
	        n = (int)(Math.random()*4) + 1;
	        m = (int)(Math.random()*4) + 1;
	      }while(mine[n][m] == -1);
	      mine[n][m] = -1;
	    }
	}
	
	


	
	public static String displayAll(int[][] mine , int a2[][]){
		
		// "" 代表 空字串
		String result = "   \n";
		char c ='○';

		for(int i=1; i<5; i++){
	        for(int j=1; j<5; j++){

                                               if(a2[i][j] != 0){
                                                           
                                                           
	                                                            if(mine[i][j] == -1)
                     					                                        result += '●';  // ● 代表 地雷                					                                        // ● 代表 地雷
	                                                            else
	                                                                            result += " " + mine [i][j] ;
	                                                             }
	                                                   
	                                           else{
	            	                                result += c;
	                                               }
                          	                       /* result += '\n';         */
                          	                       //刪掉就正常的矩陣出現
                          	         
	                                }
	                                 result += '\n';
	                                
	                                


	                        }
	                             
	           return result;
            }
	}
回覆時引用此文章
發表新主題 回覆

書簽

主題工具
顯示模式

發文規則
不可以發表新主題
不可以發表回覆
不可以上傳附件
不可以編輯自己的文章

啟用 BB 代碼
論壇啟用 表情符號
論壇啟用 [IMG] 代碼
論壇禁用 HTML 代碼
Trackbacks are 禁用
Pingbacks are 禁用
Refbacks are 禁用
論壇跳轉


所有時間均為GMT -5。現在的時間是 07:56 AM


Powered by vBulletin® Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.2.0 ©2008, Crawlability, Inc.