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

📄 coremine.java

📁 扫雷游戏应实现的功能:点击“开始”或点击“笑脸”进入游戏
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/** * 文件:CoreMine.java * 说明:扫雷游戏主要控制类 */package javamine;import java.awt.*;import java.awt.event.*;import java.util.Random;import javax.swing.*;public class CoreMine implements MouseListener,MouseMotionListener{        int GRIDX;  //地图x轴格数    int GRIDY;  //地图y轴格数    int MINES;  //地雷数	    int MMINES; //已标示地雷数int TIME_COUNT;//时间计数    int TIME_COUNT;//时间计数    int MAP[][];//地雷布置情形;0:空白,1-8:外围地雷数,9:地雷    int FACE[][];//地雷表面情形;0:已探测,1:未探测,2:插棋子,3:疑问    Container c;//容器    MineDraw md;    Timer timer;//定时器    int MOUSE_POSITION;//鼠标位置;0:笑脸,1:地图,2:其它    int MOUSE_PRESSED_START;//鼠标按下位置;0:笑脸,1:地图,2:其它    int MOUSE_X;//鼠标相对应地雷区坐标    int MOUSE_Y;    boolean MOUSE_RIGHT_PRESSED;//鼠标右键按下    boolean MOUSE_LEFT_PRESSED;//鼠标左键按下    boolean GAME_START;//游戏开始    boolean GAME_OVER;//游戏结束    boolean GAME_FINAL;//游戏完成    boolean UNDO;//左右键不动作;    //boolean sound;//游戏是否有声音    int GAME_RUN;//游戏是否执行 [true:进行中],[false:停止]    int GAME_STATE;//游戏状态 [1:成功],[0:一般],[-1:失败]        public CoreMine(int gridx,   //地图x轴格数                      int gridy,   //地图y轴格数		      int mines,   //地雷数                      Container c){//容器        //资料初始        this.GRIDX=gridx;	this.GRIDY=gridy;	this.MINES=mines;	this.MMINES=mines;			//产生绘图对象	md=new MineDraw(gridx,gridy,mines,c);			//产生地雷布置数组及表面情形并初始数组值	MAP=new int[gridx][gridy];	FACE=new int[gridx][gridy];			//游戏重置	reset();  	md.update();				}	    private class EventListener implements ActionListener{        public void actionPerformed(ActionEvent e){            TIME_COUNT++;            md.showCount(md.COUNT_X,md.COUNT_Y,TIME_COUNT);        }    }        //以随机数布置地雷位置    public void setMinePosition(){        int m=this.MINES;        //当地雷未布置完时持续布置        while(m>0){            //随机数产生坐标            Random r=new Random();            int x=r.nextInt(GRIDX);            int y=r.nextInt(GRIDY);            //判断产生的坐标是否成立            if(x>=0 && x<GRIDX &&//防止超出数组                    y>=0 && y<GRIDY &&MAP[x][y]!=9 && //数组值不表示地雷                    !(x==MOUSE_X && y==MOUSE_Y)){//保证第一次按键不会踩到雷                m--;//布置地雷剩余数                MAP[x][y]=9;//地图坐标标示为地雷                //将地雷周围数字加一                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 &&MAP[i][j]!=9){//数组值不表示地雷                            MAP[i][j]++;                        }                    }                }            }        }    }        //取得窗口大小    public static Dimension getDimension(int x,int y){        return new Dimension((x+2)*16+6,(y+6)*16+58);    }        //鼠标按键    public void mouseClicked(MouseEvent e){}    public void mouseEntered(MouseEvent e){}    public void mouseExited(MouseEvent e){}    public void mousePressed(MouseEvent e){        setMouseMapPosition(e);//设定鼠标在地图上坐标        switch(e.getButton()){            case MouseEvent.BUTTON1://左键                UNDO=false;                                //纪录左键状态                MOUSE_LEFT_PRESSED=true;                //设定鼠标左键按下的起始区域                MOUSE_PRESSED_START=MOUSE_POSITION;                //游戏状态                switch(GAME_RUN){                    case 1://进行中                     case 0://初始完成                        //鼠标所在区域                        switch(MOUSE_POSITION){                            case 0://笑脸区                                md.showSmile(1);//笑脸陷下                                break;                            case 1://地雷区                                if(MOUSE_PRESSED_START!=0){                                    if(MOUSE_RIGHT_PRESSED){//右键按下时按下左键                                        showMouseDownMap(MOUSE_X,MOUSE_Y);                                    }                                    if(FACE[MOUSE_X][MOUSE_Y]==1)                                        md.showMap(MOUSE_X,MOUSE_Y,0);//空白                                    else if(FACE[MOUSE_X][MOUSE_Y]==3)                                        md.showMap(MOUSE_X,MOUSE_Y,10);//按下的问号                                        md.showSmile(2);//笑脸张嘴                                }                                break;                            case 2://一般区                                md.showSmile(2);//笑脸张嘴                                break;                        }                        break;                    case -1://停止                        if(MOUSE_POSITION==0)                                md.showSmile(1);//笑脸陷下                        break;                }                break;                		case MouseEvent.BUTTON2://中键                        UNDO=false;                        MOUSE_LEFT_PRESSED=true;                        MOUSE_RIGHT_PRESSED=true;                        md.showSmile(2);//笑脸张嘴                    		case MouseEvent.BUTTON3://右键			UNDO=false;			//纪录右键状态			MOUSE_RIGHT_PRESSED=true;			if(GAME_RUN!=-1 && MOUSE_PRESSED_START!=0){                            if(MOUSE_LEFT_PRESSED){//左键按下时按下右键                                showMouseDownMap(MOUSE_X,MOUSE_Y);                            }else{//只有右键按下时                                if(MOUSE_POSITION==1){                                    if(FACE[MOUSE_X][MOUSE_Y]!=0){                                        FACE[MOUSE_X][MOUSE_Y]++;                                        if(FACE[MOUSE_X][MOUSE_Y]>=4){                                            FACE[MOUSE_X][MOUSE_Y]=1;                                        }                                        if(FACE[MOUSE_X][MOUSE_Y]==2)                                            MMINES--;                                        else if(FACE[MOUSE_X][MOUSE_Y]==3)                                            MMINES++;                                        md.showCount(md.MCOUNT_X,md.MCOUNT_Y,MMINES);                                        reloadMap();                                    }                                }                            }                        }                        break;        }        md.update();    }    public void mouseReleased(MouseEvent e){        setMouseMapPosition(e);//设定鼠标在地图上坐标        switch(e.getButton()){            case MouseEvent.BUTTON1://左键                //纪录左键状态                MOUSE_LEFT_PRESSED=false;                //游戏状态                switch(GAME_RUN){                    case 1://进行中                        //鼠标所在区域                        switch(MOUSE_POSITION){                            case 0://笑脸区                                if(MOUSE_PRESSED_START==0){//在笑脸区起始(重置游戏游戏)                                    reset();//游戏重置                                }                                md.showSmile(0);//笑脸                                break;                            case 1://地雷区                                if(MOUSE_PRESSED_START!=0){//不在笑脸区起始                                    if(!MOUSE_RIGHT_PRESSED &&                                            !UNDO && //右键未按下松开左键                                            (FACE[MOUSE_X][MOUSE_Y]==1||//表示未探测                                            FACE[MOUSE_X][MOUSE_Y]==3)){//表示疑问                                        FACE[MOUSE_X][MOUSE_Y]=0;                                        switch(MAP[MOUSE_X][MOUSE_Y]){                                            case 0://空白                                                doClear(MOUSE_X,MOUSE_Y);//清除空白                                                checkFinal();//检查是否完成                                                break;                                            case 9://地雷(游戏结束)                                                onMine(true);                                                break;                                            default:                                                checkFinal();//检查是否完成                                        }                                    }else if(MOUSE_RIGHT_PRESSED){//右键按下松开左键                                        UNDO=true;                                        md.showSmile(0);//笑脸                                        if(MOUSE_PRESSED_START!=0){                                            checkAutoOpen();                                            checkFinal();                                        }                                    }else{                                        md.showSmile(0);//笑脸                                    }                                    reloadMap();                                }                                break;                            case 2://一般区                                md.showSmile(0);//笑脸                                break;                        }                        break;                    case 0://初始完成                        //鼠标所在区域                        switch(MOUSE_POSITION){                            case 0://笑脸区                                if(MOUSE_PRESSED_START==0)                                    reset();                                md.showSmile(0);//笑脸                                break;                            case 1://地雷区                                if(MOUSE_PRESSED_START!=0 ){//不是在笑脸区起始(开始游戏)                                    if(!MOUSE_RIGHT_PRESSED && //右键未按下松开左键                                            !UNDO &&                                            (FACE[MOUSE_X][MOUSE_Y]==1||                                            FACE[MOUSE_X][MOUSE_Y]==3)){                                        setMinePosition();//设定地雷位置                                        GAME_RUN=1;//游戏开始                                        //启动定时器                                        timer=new Timer(1000,new EventListener());                                        timer.start();                                        FACE[MOUSE_X][MOUSE_Y]=0;//表示已探测                                        switch(MAP[MOUSE_X][MOUSE_Y]){                                            case 0://空白                                                doClear(MOUSE_X,MOUSE_Y);                                                break;                                        }                                        md.showSmile(0);//笑脸                                        checkFinal();//检查是否完成                                        reloadMap();//重新显示地雷区状况                                    }else if(MOUSE_RIGHT_PRESSED){//右键按下松开左键                                        UNDO=true;                                        reloadMap();//重新显示地雷区状况                                    }else{                                        md.showSmile(0);//笑脸                                    }                                }else{                                    md.showSmile(0);//笑脸                                }                                break;                            case 2://一般区                                md.showSmile(0);//笑脸                                break;                        }                        break;                    case -1://停止                        switch(MOUSE_POSITION){                            case 0://笑脸区                                if(MOUSE_PRESSED_START==0){                                    reset();//游戏重置                                }                                break;                        }                        break;                }                break;                            case MouseEvent.BUTTON2://中键                                if(MOUSE_PRESSED_START!=0&&GAME_RUN==1&&MOUSE_POSITION==1){                    UNDO=true;                    checkAutoOpen();                    checkFinal();                }                md.showSmile(0);//笑脸                reloadMap();                MOUSE_LEFT_PRESSED=false;                MOUSE_RIGHT_PRESSED=false;                break;                            case MouseEvent.BUTTON3://右键                //纪录右键状态                MOUSE_RIGHT_PRESSED=false;                switch(GAME_RUN){                    case 1://进行中                    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);//笑脸

⌨️ 快捷键说明

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