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

📄 gametest.java

📁 与WINDOWS自带相同的扫雷游戏,用SWING编写的.请支持
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
					DefineFrame defineFrm=new DefineFrame(GameFrame.this,true,x,y);
				}
			} );
		//复选菜单项
		JCheckBoxMenuItem colorItem=new MyCheckBoxMenuItem("颜色(L)");
		JCheckBoxMenuItem soundItem=new MyCheckBoxMenuItem("声音(S)");
		JCheckBoxMenuItem iconItem=new MyCheckBoxMenuItem("标记(M)");
		//设置复选菜单项快捷键
		colorItem.setMnemonic(KeyEvent.VK_L);
		soundItem.setMnemonic(KeyEvent.VK_S);
		iconItem.setMnemonic(KeyEvent.VK_M);
		//将元素加入菜单
		gameSetMenu.add(startItem);
		gameSetMenu.addSeparator();
		gameSetMenu.add(easyItem);
		gameSetMenu.add(normalItem);
		gameSetMenu.add(hardItem);
		gameSetMenu.add(definedItem);
		gameSetMenu.addSeparator();
		gameSetMenu.add(iconItem);
		gameSetMenu.add(colorItem);
		gameSetMenu.add(soundItem);
		gameSetMenu.addSeparator();
		gameSetMenu.add(heroListItem);
		gameSetMenu.addSeparator();
		gameSetMenu.add(exitItem);
		helpMenu.add(indexItem);
		helpMenu.add(serHelpItem);
		helpMenu.add(helpItem);
		helpMenu.add(aboutItem);
		// 设置分隔符
		helpMenu.insertSeparator(3);
		menuTitle.add(gameSetMenu);
		menuTitle.add(helpMenu);
		this.setJMenuBar(menuTitle); 		
	}
	//初始化窗口
	private void initialFrame(){
		//设置观感为WINDOWS观感
		String plaf="com.sun.java.swing.plaf.windows.WindowsLookAndFeel";
		try{	
			UIManager.setLookAndFeel(plaf);
			SwingUtilities.updateComponentTreeUI(this);
		}
		catch(Exception e){
			e.printStackTrace();
		}	
		this.setResizable(false);
		panelX=9;
		panelY=9;
		//设置窗口相关信息
		this.setTitle("扫雷");
		this.setLocation(200,100);
		this.setVisible(true);
		Toolkit tk=Toolkit.getDefaultToolkit();	
		this.setIconImage(tk.createImage("images\\title.gif"));
		Container cont=this.getContentPane();
		panelScore=new JPanel(new BorderLayout());
		panelBody=new JPanel(new GridLayout(panelY,panelX));
		panelMine=new JPanel(new FlowLayout(FlowLayout.LEFT,0,0));
		panelTime=new JPanel(new FlowLayout(FlowLayout.RIGHT,0,0));
		JPanel panelSmile=new JPanel(new FlowLayout(FlowLayout.CENTER,5,7));
		JPanel panelWest=new JPanel(new FlowLayout(FlowLayout.LEFT,10,7));
		JPanel panelEast=new JPanel(new FlowLayout(FlowLayout.RIGHT,10,7));
		JPanel panelMain=new JPanel(new BorderLayout());
		//设置颜色
		this.setBackground(Color.LIGHT_GRAY);
		panelBody.setBackground(Color.LIGHT_GRAY);
		panelScore.setBackground(Color.LIGHT_GRAY);
		panelWest.setBackground(Color.LIGHT_GRAY);
		panelEast.setBackground(Color.LIGHT_GRAY);
		panelSmile.setBackground(Color.LIGHT_GRAY);
		cont.add(panelMain);
		panelMain.setBorder(BorderFactory.createRaisedBevelBorder());
		panelMain.add("Center",panelScore);
		panelMain.add("South",panelBody);
		//设置边框
		Border panelBorder=BorderFactory.createCompoundBorder(BorderFactory.createEmptyBorder(5,5,3,5),BorderFactory.createBevelBorder(BevelBorder.LOWERED));
		panelScore.setBorder(panelBorder);	
		panelBorder=BorderFactory.createCompoundBorder(BorderFactory.createEmptyBorder(2,5,5,5),BorderFactory.createBevelBorder(BevelBorder.LOWERED));	
		//panelBorder=BorderFactory.createCompoundBorder(panelBorder,BorderFactory.createEmptyBorder(1,1,1,1));	
		panelBody.setBorder(panelBorder);
		//设置按钮图片
		URL url = GameTest.class.getResource("images/face1.gif");
		imgSmile=new ImageIcon(url);
		url=GameTest.class.getResource("images/face2.gif");
		ico=new ImageIcon(url);
		btnSmile=new JButton(imgSmile);
		btnSmile.setFocusable(false);
		btnSmile.setPreferredSize(new Dimension(22,22));
		btnSmile.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				openGame();
			}
		});
		//添加雷数面板
		mineLabelBai =new JLabel();
		mineLabelShi =new JLabel();
		mineLabelGe =new JLabel();
		panelMine.add(mineLabelBai);
		panelMine.add(mineLabelShi);
		panelMine.add(mineLabelGe);
		url = GameTest.class.getResource("images/d0.gif");
		mineLabelBai.setIcon(new ImageIcon(url));
		mineLabelShi.setIcon(new ImageIcon(url));
		mineLabelGe.setIcon(new ImageIcon(url));
		timeH =new JLabel();
		timeM =new JLabel();
		timeL =new JLabel();
		panelTime.add(timeH);
		panelTime.add(timeM);
		panelTime.add(timeL);
		timeH.setIcon(new ImageIcon(url));
		timeM.setIcon(new ImageIcon(url));
		timeL.setIcon(new ImageIcon(url));
		panelSmile.add(btnSmile);
		panelWest.add(panelMine);
		panelEast.add(panelTime);
		panelScore.add("West",panelWest);
		panelScore.add("Center",panelSmile);
		panelScore.add("East",panelEast);
		//生成菜单
		createMenu();
		//生成计时器
		ActionListener timePerformed=new ActionListener(){
			public void actionPerformed(ActionEvent evt){
				showTime++;
				showTime(showTime);
			} 
		};
		clock=new Timer(1000,timePerformed);
		//生成雷
		setLevel(9,9,10);
	}
	/*方法:设置难度
	  输入参数:width 宽 height 高
	  如果 宽或高的一个小于9 默认产生9*9的窗口
	*/
public void setLevel(int width,int height,int mine){
		clock.stop();
		btnSmile.setIcon(imgSmile);
		pass=false;
		gameStart=false;
		panelBody.removeAll();
		if ((width<9)||(height<9)){
			width=9;
			height=9;
		}
		panelX=width;
		panelY=height;
		mine_Count=mine;
		mine_AllCount=mine;
		showTime=0;
		showTime(showTime);
		showMineCount(mine_Count);
		panelBody.setLayout(new GridLayout(panelY,panelX));
		panelScore.setPreferredSize(new Dimension(0,50));
		btn=null;
		btn=new MyButton[panelX][panelY];
		for(int j=0;j<panelY;j++){
			for(int i=0;i<panelX;i++){
			btn[i][j]=new MyButton();
			btn[i][j].setLocate(i,j);
			btn[i][j].addMouseMotionListener(new MouseMotionAdapter(){
				public void mouseDragged(MouseEvent e){
//						((MyButton)(e.getSource())).setBorder(null);
//						URL url=GameTest.class.getResource("images/0.gif");
//						((MyButton)(e.getSource())).setIcon(new ImageIcon(url));
				}
			});
			btn[i][j].addMouseListener( new MouseAdapter(){
				public void mousePressed(MouseEvent e){
							btnSmile.setIcon(ico);	
						if (e.getModifiersEx()==e.BUTTON1_DOWN_MASK+e.BUTTON3_DOWN_MASK){
								((MyButton)(e.getSource())).both=2;
								((MyButton)(e.getSource())).roundDown();
							}
							//System.out.println ("x="+String.valueOf(((MyButton)(e.getSource())).getLocate().x)+"y="+String.valueOf(((MyButton)(e.getSource())).getLocate().y));
							if ((!((MyButton)(e.getSource())).isFlag())&&(!((MyButton)(e.getSource())).isOpen())&&e.getButton()!=3){
							((MyButton)(e.getSource())).setBorder(null);
							URL url=GameTest.class.getResource("images/0.gif");
							((MyButton)(e.getSource())).setIcon(new ImageIcon(url));
							}
							if ((!gameStart)&&e.getButton()==1){
							setMine(((MyButton)(e.getSource())).getLocate().x,((MyButton)(e.getSource())).getLocate().y);
							countRoundMine();
							gameStart=true;
							clock.start();
							}
					}
			public void mouseReleased(MouseEvent e){			
					btnSmile.setIcon(imgSmile);	
//					//左右键
					if ((((MyButton)(e.getSource())).both==2)&&((MyButton)(e.getSource())).isOpen()){
						((MyButton)(e.getSource())).doubleQuick();
							if (!((MyButton)(e.getSource())).isOpen()){
							((MyButton)(e.getSource())).setBorder(BorderFactory.createRaisedBevelBorder());
							URL url=GameTest.class.getResource("images/blank.gif");
							((MyButton)(e.getSource())).setIcon(new ImageIcon(url));
							}
								
					}
					else
						{
							if (!((MyButton)(e.getSource())).isOpen()&&!((MyButton)(e.getSource())).isFlag()){
							((MyButton)(e.getSource())).setBorder(BorderFactory.createRaisedBevelBorder());
							URL url=GameTest.class.getResource("images/blank.gif");
							((MyButton)(e.getSource())).setIcon(new ImageIcon(url));
							}
							((MyButton)(e.getSource())).roundUp();
						}	
					if (!((MyButton)(e.getSource())).isOpen()&&((MyButton)(e.getSource())).both==0){
					//左键
						if ((e.getButton()==e.BUTTON1)&&(!((MyButton)(e.getSource())).isFlag())){
							((MyButton)(e.getSource())).showMine();	
							//showAllMine();						
						}
					//右键
						if ((e.getButton()==e.BUTTON3)){
							((MyButton)(e.getSource())).setOpen(false);
							if ((!((MyButton)(e.getSource())).isFlag())&&(!((MyButton)(e.getSource())).isAsk())){
								URL url=GameTest.class.getResource("images/flag.gif");		
								((MyButton)(e.getSource())).setIcon(new ImageIcon(url));
								mine_Count--;
								((MyButton)(e.getSource())).setFlag(true);	
							}
							else if(!((MyButton)(e.getSource())).isAsk()){
								URL url=GameTest.class.getResource("images/ask.gif");
								((MyButton)(e.getSource())).setIcon(new ImageIcon(url));
								mine_Count++;
								((MyButton)(e.getSource())).setFlag(false);		
								((MyButton)(e.getSource())).setAsk(true);	
							}
							else{
								URL url=GameTest.class.getResource("images/blank.gif");
								((MyButton)(e.getSource())).setIcon(new ImageIcon(url));
								//((MyButton)(e.getSource())).setFlag(false);		
								((MyButton)(e.getSource())).setAsk(false);		
								
							}						
						}
					}
					
					if (mine_Count==0){
						boolean vflag=true;
						for(int i=0;i<panelX;i++){
							for(int j=0;j<panelY;j++){
								if (btn[i][j].isMine()){
									if(btn[i][j].isFlag()){
									}
									else{
										vflag=false;
										break;
									}	
								}
								else
								{
									if(btn[i][j].isOpen()){
									}
									else{
										vflag=false;
										break;	
									}
								}
							}
						}
						if(vflag){
							pass();
						}
					}
					//非雷全部展开自动获胜
					boolean flag2=true;
					for(int i=0;i<panelX;i++){
						for(int j=0;j<panelY;j++){
							if (!btn[i][j].isMine()){
								if(!btn[i][j].isOpen()){
									flag2=false;
									break;
								}
							}
						}
					}
					if((flag2)){
						pass();
						
					}
					//更新雷显示屏
					if(!pass){
					showMineCount(mine_Count);
					}
					if (((MyButton)(e.getSource())).both>0){
						((MyButton)(e.getSource())).both--;
					}
//					if (((MyButton)(e.getSource()))both>0){
//						((MyButton)(e.getSource())).both--;
//						}
					
			}  			
			});
			panelBody.add(btn[i][j]);
			}
		}
		this.pack();
	
	}
//布雷
private void setMine(int beginX,int beginY){
	for(int i=0;i<mine_Count;i++){
		int m,n=0;
		m=(int)(Math.random()*panelX);
		n=(int)(Math.random()*panelY);
		if ((btn[m][n].isMine())||((beginX==m)&&(beginY==n))){
			i--;
		}
		else{
			btn[m][n].setMine(true);
		}
		
		
	}
	}
//展示雷
private void showAllMine(){
	for(int i=0;i<panelX;i++){
		for(int j=0;j<panelY;j++)
		{
		btn[i][j].setBorder(BorderFactory.createEmptyBorder());	
		btn[i][j].showMine();
	}
}
}
//判断周围的雷
private void countRoundMine(){
	for(int i=0;i<panelX;i++){
		for(int j=0;j<panelY;j++){
			if (((i-1)>=0)&&((j-1)>=0)){
				if (btn[i-1][j-1].isMine())
				btn[i][j].upMine();
			}
			if ((j-1)>=0){
				if (btn[i][j-1].isMine())
				btn[i][j].upMine();
			}
			if (((i+1)<panelX)&&((j-1)>=0)){
				if (btn[i+1][j-1].isMine())
				btn[i][j].upMine();
			}
			if ((i-1)>=0){
				if (btn[i-1][j].isMine())
				btn[i][j].upMine();
			}
			if ((i+1)<panelX){
				if (btn[i+1][j].isMine())
				btn[i][j].upMine();
			}
			if (((i-1)>=0)&&((j+1)<panelY)){
				if (btn[i-1][j+1].isMine())
				btn[i][j].upMine();
			}
			if ((j+1)<panelY){
				if (btn[i][j+1].isMine())
				btn[i][j].upMine();
			}
			if (((i+1)<panelX)&&((j+1)<panelY)){
				if (btn[i+1][j+1].isMine())
				btn[i][j].upMine();
			}
		}
	}
	
}
//开局
private void openGame(){
	setLevel(panelX,panelY,mine_AllCount);
	//showAllMine();
}

}

⌨️ 快捷键说明

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