📄 coremine.java
字号:
} 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);//哭脸 //md.playSound(2); 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(i>=0 && i<GRIDX &&//防止超出数组 j>=0 && j<GRIDY && FACE[i][j]==3){ md.showMap(i,j,10); } } } }else if(MOUSE_LEFT_PRESSED){ if(x>=0 && x<GRIDX &&//防止超出数组 y>=0 && y<GRIDY && FACE[x][y]==1){ md.showMap(x,y,0); } else if(x>=0 && x<GRIDX &&//防止超出数组 y>=0 && y<GRIDY && FACE[x][y]==3){ md.showMap(x,y,10); } } } //更新地图图示 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,15); break; case 2://插棋子 md.showMap(i,j,14); break; case 3://问号 md.showMap(i,j,13); break; } } } } } //清除空白区 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||FACE[i][j]==3) && //表示未探测 !(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||FACE[i][j]==3)&& !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]=12;//地雷加红边 else{ for(int i=(MOUSE_X-1);i<=(MOUSE_X+1);i++){ for(int j=(MOUSE_Y-1);j<=(MOUSE_Y+1);j++){ if(i>=0 && i<GRIDX &&//防止超出数组 j>=0 && j<GRIDY && FACE[i][j]!=2&&//未插旗 MAP[i][j]==9){ MAP[i][j]=12;//地雷加红边 } } } } GAME_RUN=-1;//游戏停止 GAME_STATE=-1;//失败 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]=11; FACE[ii][jj]=0; } if(FACE[ii][jj]==2 &&//插对棋子 MAP[ii][jj]==9){//地雷 MAP[ii][jj]=14; FACE[ii][jj]=0; } if(FACE[ii][jj]==1 &&//未探索 MAP[ii][jj]==9) FACE[ii][jj]=0; } } md.showSmile(4);//哭脸 //md.playSound(2); } //检查是否完成 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]=14; FACE[i][j]=0; } } GAME_RUN=-1;//游戏停止 GAME_STATE=1;//成功 timer.stop(); md.showSmile(3);//戴眼镜 md.showCount(md.MCOUNT_X,md.MCOUNT_Y,0); }else{ if(GAME_RUN==1) md.showSmile(0);//笑脸 else{ if(GAME_STATE==-1){ md.showSmile(4);//哭脸 //md.playSound(2); } } } } //重置游戏 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); } /*public void setSound(boolean so){ if(so) sound=true; else sound=false; }*/}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -