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

📄 coremine.java

📁 扫雷游戏应实现的功能:点击“开始”或点击“笑脸”进入游戏
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
                        }                        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 + -