⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 singlemine.java~1~

📁 带声音的扫雷
💻 JAVA~1~
📖 第 1 页 / 共 2 页
字号:
				}
				break;
			}
			break;

		case MouseEvent.BUTTON3://右键
			//纪录右键状态
			MOUSE_RIGHT_PRESSED=false;
			switch(GAME_RUN){
			case 1://进行中
				//break;
			case 0://初始
				if(MOUSE_PRESSED_START!=0){
					if(!MOUSE_LEFT_PRESSED && !UNDO){//左键未按下松开右键
						md.showSmile(0);//笑脸
					}else if(MOUSE_LEFT_PRESSED){//左键按下松开右键
						UNDO=true;
						if(MOUSE_PRESSED_START!=0 && GAME_RUN==1){
							checkAutoOpen();
							checkFinal();
						}
					}else if(UNDO){
						md.showSmile(0);//笑脸
					}
					reloadMap();
				}else{
					md.showSmile(0);//笑脸
				}
				break;
			case -1://停止
				break;
			}
			break;
		}
		md.update();
		MOUSE_PRESSED_START=2;
	}

	//鼠标事件
	public void mouseMoved(MouseEvent e){
		setMousePosition(e);//设定鼠标所在区域
	}

	public void mouseDragged(MouseEvent e){

		//设定鼠标所在区域
		setMousePosition(e);
		setMouseMapPosition(e);

		//依游戏状态
		switch(GAME_RUN){
		case 1://进行中
		case 0://初始完成
			if(!UNDO){
				if(MOUSE_PRESSED_START!=0)
					showMouseDownMap(MOUSE_X,MOUSE_Y);
			}

			if(MOUSE_PRESSED_START==0){//起始在笑脸区
				switch(MOUSE_POSITION){
				case 0://笑脸区
					md.showSmile(1);//笑脸陷下
					break;
				case 1://地雷区
				case 2://一般区
					md.showSmile(0);//笑脸
					break;
				}
			}
			break;
		case -1://停止
			if(MOUSE_LEFT_PRESSED && MOUSE_PRESSED_START==0){
				switch(MOUSE_POSITION){
				case 0://笑脸区
					md.showSmile(1);//笑脸陷下
					break;

				case 1://地雷区
				case 2://一般区
					switch(GAME_STATE){
					case 1://成功
						md.showSmile(3);//戴眼镜


						break;
					case 0://一般
						md.showSmile(0);//笑脸
						break;
					case -1://失败
						md.showSmile(4);//哭脸
                                                break;
					}
					break;
				}
			}
			break;
		}
		md.update();

	}

	//设定鼠标所在区域
	public void setMousePosition(MouseEvent e){

		//笑脸区
		if((e.getX())>=md.SMILE_X &&
		   (e.getX())<(md.SMILE_X+md.SMILE_WIDTH) &&
		   (e.getY())>=md.SMILE_Y &&
		   (e.getY())<(md.SMILE_Y+md.SMILE_HEIGHT)){
		   	MOUSE_POSITION=0;

		//地雷区
		}else if((e.getX())>=md.MAP_X &&
		   		 (e.getX())<(md.MAP_X+GRIDX*md.MAP_WIDTH) &&
		   		 (e.getY())>=md.MAP_Y &&
		   		 (e.getY())<(md.MAP_Y+GRIDY*md.MAP_HEIGHT)){
		   	MOUSE_POSITION=1;

		//其它区
		}else{
			MOUSE_POSITION=2;
		}

	}

	//设定鼠标在地图上坐标
	public void setMouseMapPosition(MouseEvent e){
		MOUSE_X=(e.getX()-md.MAP_X)/md.MAP_WIDTH;
		MOUSE_Y=(e.getY()-md.MAP_Y)/md.MAP_HEIGHT;
	}

	//显示鼠标按下的地雷区
	public void showMouseDownMap(int x,int y){

		reloadMap();//更新地图图示

		if(MOUSE_LEFT_PRESSED && MOUSE_RIGHT_PRESSED){


			for(int i=(x-1);i<=(x+1);i++){
				for(int j=(y-1);j<=(y+1);j++){
					if(i>=0 && i<GRIDX &&//防止超出数组
					   j>=0 && j<GRIDY &&
					   FACE[i][j]==1){
						md.showMap(i,j,0);
					}
				}
			}

		}else if(MOUSE_LEFT_PRESSED){
			if(x>=0 && x<GRIDX &&//防止超出数组
			   y>=0 && y<GRIDY &&
			   FACE[x][y]==1){
				md.showMap(x,y,0);
			}
		}
	}

	//更新地图图示
	public void reloadMap(){
		for(int i=0;i<GRIDX;i++){
			for(int j=0;j<GRIDY;j++){
				if(FACE[i][j]==0){//已探测
					md.showMap(i,j,MAP[i][j]);
				}else{//未探测
					switch(FACE[i][j]){
					case 1://未探测
						md.showMap(i,j,12);
						break;
					case 2://插棋子
						md.showMap(i,j,13);
						break;
					case 3://问号
						md.showMap(i,j,14);
						break;
					}
				}
			}
		}
	}

	//设定地图表面状态
	public void setFace(int mode){
		if(MOUSE_X>=0 && MOUSE_X<GRIDX &&//防止超出数组
		   MOUSE_Y>=0 && MOUSE_Y<GRIDY){
			FACE[MOUSE_X][MOUSE_Y]=mode;
		}
	}

	//清除空白区
	public void doClear(int x,int y){
		for(int i=(x-1);i<=(x+1);i++){
			for(int j=(y-1);j<=(y+1);j++){
				if(i>=0 && i<GRIDX &&
				   j>=0 && j<GRIDY &&
				   FACE[i][j]==1 && //表示未探测
				   !(i==x && j==y)){
					switch(MAP[i][j]){
					case 0:
						FACE[i][j]=0;
						doClear(i,j);
						break;
					case 1:
					case 2:
					case 3:
					case 4:
					case 5:
					case 6:
					case 7:
					case 8:
						FACE[i][j]=0;
						break;
					}
				}
			}
		}
	}

	//鼠标两件按下时松开任一键检查自动翻开
	public void checkAutoOpen(){
		int x=MOUSE_X;
		int y=MOUSE_Y;
		int n=MAP[x][y];
		for(int i=(x-1);i<=(x+1);i++){
			for(int j=(y-1);j<=(y+1);j++){
				if(i>=0 && i<GRIDX &&
				   j>=0 && j<GRIDY &&
				   FACE[i][j]==2)
					n--;
			}
		}
		if(n==0){
			for(int i=(x-1);i<=(x+1);i++){
				for(int j=(y-1);j<=(y+1);j++){
					if(i>=0 && i<GRIDX &&
					   j>=0 && j<GRIDY &&
					   FACE[i][j]==1 &&
					   !GAME_OVER){
						FACE[i][j]=0;
						if(MAP[i][j]==0)
							doClear(i,j);
						else if(MAP[i][j]==9)
							onMine(false);
					}
				}
			}
		}
	}

	//踩到地雷
	public void onMine(boolean right){
		if(right)//是否在正上方
			MAP[MOUSE_X][MOUSE_Y]=11;//地雷加红边

		GAME_RUN=-1;//游戏停止
		GAME_STATE=-1;//失败
                try{
                inFail=new FileInputStream("Audio/fail.au");
             //   asFail=new AudioStream(inFail);
		AudioPlayer.player.start(inFail);
                }
                catch(Exception e){
                  e.printStackTrace();
                }
                if(timer!=null){
			timer.stop();
			timer=null;
		}

		for(int ii=0;ii<GRIDX;ii++){
			for(int jj=0;jj<GRIDY;jj++){
				if(FACE[ii][jj]==2 &&//插错棋子
				   MAP[ii][jj]!=9){//非地雷
					MAP[ii][jj]=10;
					FACE[ii][jj]=0;
				}
				if(FACE[ii][jj]==2 &&//插对棋子
				   MAP[ii][jj]==9)//地雷
				   	FACE[ii][jj]=0;
				if(FACE[ii][jj]==1 &&//未探索
				   MAP[ii][jj]==9)
					FACE[ii][jj]=0;
			}
		}
		md.showSmile(4);//哭脸
	}

	//检查是否完成
	public void checkFinal(){
		int m=MINES;
		for(int i=0;i<GRIDX;i++){
			for(int j=0;j<GRIDY;j++){
				if(FACE[i][j]!=0)
					m--;
			}
		}

		if(m==0){
			for(int i=0;i<GRIDX;i++){
				for(int j=0;j<GRIDY;j++){
					if(MAP[i][j]==9)
						MAP[i][j]=13;
					FACE[i][j]=0;
				}
			}

			GAME_RUN=-1;//游戏停止
			GAME_STATE=1;//成功
			timer.stop();
			md.showSmile(3);//戴眼镜
			md.showCount(md.MCOUNT_X,md.MCOUNT_Y,0);
               try{
                   inSuccess=new FileInputStream("Audio/success.au");
        //           asSuccess=new AudioStream(inSuccess);
                   AudioPlayer.player.start(inSuccess);
                }
                catch(Exception e){
                    e.printStackTrace();
                }

	   	}else{
			if(GAME_RUN==1)
				md.showSmile(0);//笑脸
			else{
				if(GAME_STATE==-1)
					md.showSmile(4);//哭脸
			}
		}
	}

	//重置游戏
	public void reset(){
		for(int i=0;i<GRIDX;i++){
			for(int j=0;j<GRIDY;j++){
				FACE[i][j]=1;//地雷表面设定(未探索)
				MAP[i][j]=0;//地雷设定(空白)
			}
		}

		GAME_RUN=0;  //游戏初始完成
		GAME_STATE=0;//一般状态
		MOUSE_LEFT_PRESSED=false;
		MOUSE_RIGHT_PRESSED=false;
		UNDO=false;

		//定时器重置
		if(timer!=null)
			timer.stop();
		TIME_COUNT=0;//时间计数设定
		MMINES=MINES;//标记地雷数设定
		reloadMap();
		md.showSmile(0);
		md.showCount(md.MCOUNT_X,md.MCOUNT_Y,MINES);
		md.showCount(md.COUNT_X,md.COUNT_Y,TIME_COUNT);
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -