亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mainframe.java

?? 掃雷源程序絕結經典真的是好東東啊
?? JAVA
?? 第 1 頁 / 共 2 頁
字號:
package nicholas.game.mine;

import java.awt.*;
import java.awt.event.*;
import java.io.*;

import javax.swing.*;

import nicholas.awt.LedNumber;
import nicholas.swing.AboutDialog;

public class MainFrame extends JFrame implements ActionListener {
	
	//UI components	
	private JLabel mineLabel;
	private JLabel timeLabel;
	private JLabel statusButton;
	private JPanel gridPanel;
	private JPanel statusPanel;
	
	private Dimension gpd;
	private Dimension spd;
	private MineGrid grid[][];
	private boolean mode[][];
	
	private final int margin = 7;
	private final int titleh = 52;
	
	private int xBound;
	private int yBound;
	private int mineCount;
	private int showCount;		//the amount of grids opened
	private int leftCount;		//the amount of mines not labeled
	private int timepassed;
	private boolean firstClick;
	private boolean markCheck;
	
	//Menu Components
	private JMenuItem startItem;
	private JMenuItem exitItem;
	private JMenuItem logItem;
	private JMenuItem aboutItem;
	private JRadioButtonMenuItem levelItem[];
	private JCheckBoxMenuItem markCheckItem;
		
	//Game informations
	private LevelInfo levelInfo;
	private int currentLevel;
	private LevelLog log[];
	
	private LedNumber led;
	
	private GridMouseAdapter gma;
	private StatusMouseAdapter sma;
	private TimeThread timeThread;
	
	public MainFrame() {
		
		super("掃雷");
		
		//default
		currentLevel = 0;
		levelInfo = LevelInfo.DEFAULT_LEVEL[currentLevel];
		
		log = new LevelLog[3];
		for(int i=0;i<3;i++)
			log[i] = new LevelLog();
		
		//read from file
		readLog();
		
		led = new LedNumber();
			
		gma = new GridMouseAdapter();
		sma = new StatusMouseAdapter();
		
		//setup menus
		setMenuBar();
		
		setStatusPanel();
		resetPane();
		
		addWindowListener(
			new WindowAdapter() {
				public void windowClosing(WindowEvent e) {
					writeLog();
					System.exit(0);
				}
			}
		);
		
		setIconImage(ImageFactory.getInstance().getImageicon(16).getImage());
		setResizable(false);
	}
	
	//execution application
	public static void main(String args[]) {
		MainFrame application = new MainFrame();
		try {
			UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
		} catch(Exception e) {}
	}
	
	//file operation
	private void readLog() {
		try {
			File logFile = new File("mine.log");
			if(!logFile.exists()) return;
			ObjectInputStream ois = new ObjectInputStream(new FileInputStream(logFile));
			for(int i=0;i<3;i++) {
				log[i] = (LevelLog)ois.readObject();
			}
			markCheck = ois.readBoolean();
			currentLevel = ois.readInt();
			if(currentLevel==3) {
				levelInfo = (LevelInfo)ois.readObject();
			} else {
				levelInfo = LevelInfo.DEFAULT_LEVEL[currentLevel];
			}
			ois.close();
		} catch (Exception e) {System.out.println("read fail");}
	}
	
	private void writeLog() {
		try {
			File logFile = new File("mine.log");
			ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(logFile));
			for(int i=0;i<3;i++) {
				oos.writeObject(log[i]);
			}
			oos.writeBoolean(markCheck);
			oos.writeInt(currentLevel);
			if(currentLevel==3) {
				oos.writeObject(levelInfo);
			}
			oos.close();
		} catch (Exception e) {System.out.println("write fail");}
	}
	
	/*
	 *add status label to status panel
	 */
	private void setStatusPanel() {
		
		JPanel temp;
		statusPanel = new JPanel(new BorderLayout());
		
		mineLabel = new JLabel();
		mineLabel.setBorder(BorderFactory.createLoweredBevelBorder());
		temp = new JPanel(new FlowLayout(1,4,4));
		temp.add(mineLabel);
		temp.setBackground(Color.LIGHT_GRAY);
		statusPanel.add(temp,BorderLayout.WEST);
		
		timeLabel = new JLabel();
        timeLabel.setBorder(BorderFactory.createLoweredBevelBorder());
		temp = new JPanel(new FlowLayout(1,4,4));
		temp.add(timeLabel);
		temp.setBackground(Color.LIGHT_GRAY);
		statusPanel.add(temp,BorderLayout.EAST);
        
        statusButton = new JLabel();
		statusButton.setBorder(BorderFactory.createRaisedBevelBorder());
		statusButton.addMouseListener(sma);
		temp = new JPanel(new FlowLayout(1,0,4));
		temp.setBackground(Color.LIGHT_GRAY);
		temp.add(statusButton);
		statusPanel.add(temp,BorderLayout.CENTER);
		
		statusPanel.setSize(10,37);
		statusPanel.setBorder(BorderFactory.createLoweredBevelBorder());
		
		spd = statusPanel.getSize();
	}
	
	private void resetStatusPanel() {
		mineLabel.setIcon(new ImageIcon(led.getLedImage(leftCount,3)));
		timeLabel.setIcon(new ImageIcon(led.getLedImage(timepassed,3)));
		statusButton.setIcon(ImageFactory.getInstance().getImageicon(17));
	}

	private void setGridPanel() {
		
		xBound = levelInfo.getXBound();
		yBound = levelInfo.getYBound();
		mineCount = levelInfo.getMineCount();
		MineGrid.xBound = this.xBound;
		MineGrid.yBound = this.yBound;
		grid = new MineGrid[xBound][yBound];
		mode = new boolean[xBound][yBound];
		
		gridPanel = new JPanel();
		gridPanel.setBackground(Color.GRAY);
		//initialize grid panel
		gridPanel.setLayout(null);
		
		for(int x = 0; x < xBound; x++) {
			for(int y =0; y < yBound; y++) {
				grid[x][y] = new MineGrid(x,y);
				grid[x][y].setIcon(ImageFactory.getInstance().getImageicon(9));
				grid[x][y].setBounds(1+y*MineGrid.SIZE,x*MineGrid.SIZE,MineGrid.SIZE,MineGrid.SIZE);
				grid[x][y].addMouseListener(gma);
				gridPanel.add(grid[x][y],null);
			}
		}
		gpd = new Dimension(yBound*MineGrid.SIZE+6, xBound*MineGrid.SIZE+6);
	}//end of set grid panel
	
	private void resetGridPanel() {
		
		leftCount = 0;
		int x,y,i,j;
		boolean temp;
		for(x = 0; x < xBound; x++) {
			for(y =0; y < yBound; y++) {
				grid[x][y].setIcon(ImageFactory.getInstance().getImageicon(9));
				grid[x][y].setStatus(MineGrid.NORMAL);
				//lay mines
				if(leftCount < mineCount) {
					mode[x][y] = true;
					leftCount++;
				} else {
					mode[x][y] = false;
				}
			}
		}
		//exchange
		showCount = leftCount;
		for(x = 0; x < xBound; x++) {
			for(y =0; y < yBound; y++) {
				if(showCount==0) break;
				i = (int)(Math.random()*xBound);
				j = (int)(Math.random()*yBound);
				temp = mode[x][y];
				mode[x][y] = mode[i][j];
				mode[i][j] = temp;
				showCount--;
			}
		}
	}
	
	/*
	 *set up menu bar
	 */
	private void setMenuBar() {
		
        JMenuBar menuBar = new JMenuBar();
        menuBar.setBorder(BorderFactory.createLineBorder(Color.WHITE, 2));
        
        JMenu gameMenu = new JMenu("游戲(G)");
        JMenu helpMenu = new JMenu("幫助(H)");
        gameMenu.setMnemonic('G');
        helpMenu.setMnemonic('H');
        
        startItem = new JMenuItem("開局(N)");
		startItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F2,0));
        logItem = new JMenuItem("掃雷英雄榜(T)...");
        markCheckItem = new JCheckBoxMenuItem("標記(?)(M)");
        exitItem = new JMenuItem("退出(X)");
        aboutItem = new JMenuItem("關于掃雷(A)...");
        startItem.setMnemonic('N');
        exitItem.setMnemonic('X');
        aboutItem.setMnemonic('A');
		aboutItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F1,0));
        logItem.setMnemonic('T');
        markCheckItem.setMnemonic('M');
        markCheckItem.setSelected(markCheck);
        
        gameMenu.add(startItem);
        gameMenu.addSeparator();
        
        //radio group
        levelItem = new JRadioButtonMenuItem[4];
        ButtonGroup levelGroup = new ButtonGroup();
        levelItem[0] = new JRadioButtonMenuItem("初級(B)");
        levelItem[1] = new JRadioButtonMenuItem("中級(I)");
        levelItem[2] = new JRadioButtonMenuItem("高級(E)");
        levelItem[3] = new JRadioButtonMenuItem("自定義(C)...");
        levelItem[0].setMnemonic('B');
        levelItem[1].setMnemonic('I');
        levelItem[2].setMnemonic('E');
        levelItem[3].setMnemonic('C');
        for(int i=0;i<4;i++) {
	        levelGroup.add(levelItem[i]);
	        levelItem[i].addActionListener(this);
			gameMenu.add(levelItem[i]);
        }
        levelItem[currentLevel].setSelected(true);
        
        gameMenu.addSeparator();
        gameMenu.add(markCheckItem);
        gameMenu.addSeparator();
        gameMenu.add(logItem);
        gameMenu.addSeparator();
        gameMenu.add(exitItem);
        
        helpMenu.add(aboutItem);
        
        startItem.addActionListener(this);
        markCheckItem.addActionListener(this);
        logItem.addActionListener(this);
        exitItem.addActionListener(this);
        aboutItem.addActionListener(this);
        
        menuBar.add(gameMenu);
        menuBar.add(helpMenu);
        setJMenuBar(menuBar);
	}
	
	private void showAboutDialog() {
		String readme = "";
		File file = new File("readme.txt");
		if(file.exists()) {
			try {
				BufferedReader input = new BufferedReader(new FileReader(file));
				StringBuffer buffer = new StringBuffer();
				String text;
				while((text = input.readLine())!=null)
					buffer.append(text+"\n");
				input.close();
				readme = buffer.toString();
			} catch(IOException ioException) {}
		}
		AboutDialog dialog = new AboutDialog(this, "掃雷",readme,
		ImageFactory.getInstance().getImageicon(14),
		ImageFactory.getInstance().getImageicon(16));
		dialog = null;
	}
	
	public void actionPerformed(ActionEvent ae) {
		
		if(ae.getSource()==startItem) {
			restartGame();
		} else if(ae.getSource()==markCheckItem) {
			markCheck = markCheckItem.isSelected();
		} else if(ae.getSource()==logItem) {
			//show heros
			LogDialog dialog = new LogDialog(this, log);
			dialog = null;
		} else if(ae.getSource()==exitItem) {
			writeLog();
			System.exit(0);
		} else if(ae.getSource()==aboutItem) {
			showAboutDialog();
		} else {
			//radio buttons
			int x;
			for(x = 0; x < 3; x++) {
				if(ae.getSource()==levelItem[x]) break;
			}
			if(x < 3) {
				if(currentLevel!=x) {
					currentLevel = x;
					levelInfo = LevelInfo.DEFAULT_LEVEL[currentLevel];
					resetPane();
				}
			} else {
				LevelInfo newLevel = CustomDialog.getUserLevel(this, levelInfo);
				if(newLevel!=null) {
					currentLevel = x;
					levelInfo = newLevel;
					resetPane();
				}
				levelItem[currentLevel].setSelected(true);
			}
		}//radio buttons
	}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美丰满少妇xxxxx高潮对白| 色哟哟国产精品免费观看| 亚洲欧美国产三级| 国产日韩av一区二区| 精品欧美一区二区久久| 精品电影一区二区| 精品91自产拍在线观看一区| 精品福利在线导航| 国产亚洲精品资源在线26u| 337p粉嫩大胆色噜噜噜噜亚洲| 欧美一区二区三区四区在线观看 | 亚洲午夜电影在线观看| 亚洲国产成人av| 婷婷丁香激情综合| 老司机精品视频导航| 国产精品亚洲人在线观看| 国产福利一区二区三区视频在线 | 亚洲午夜精品网| 日韩影院免费视频| 国产一区二区主播在线| a亚洲天堂av| 欧美日韩国产成人在线免费| 欧美成人精精品一区二区频| 欧美国产禁国产网站cc| 一个色综合av| 精品在线观看视频| 99久久免费精品| 欧美乱熟臀69xxxxxx| 久久亚洲精品国产精品紫薇| 国产精品免费视频一区| 亚洲成av人片观看| 国产传媒一区在线| 欧美婷婷六月丁香综合色| 精品免费99久久| 中文字幕亚洲综合久久菠萝蜜| 亚洲高清不卡在线观看| 国产一级精品在线| 欧美日韩一区二区三区在线看| 欧美videossexotv100| 最新国产成人在线观看| 日韩影院在线观看| 99re视频这里只有精品| 日韩视频在线一区二区| 亚洲精品日韩综合观看成人91| 麻豆极品一区二区三区| 91国模大尺度私拍在线视频| 欧美成人精精品一区二区频| 亚洲一二三四在线| 成人在线视频一区二区| 7777精品伊人久久久大香线蕉超级流畅 | 不卡电影一区二区三区| 69av一区二区三区| 夜夜嗨av一区二区三区| 国产夫妻精品视频| 日韩亚洲欧美在线| 亚洲成av人片在线观看无码| 99久久久久久| 亚洲国产高清aⅴ视频| 免费成人美女在线观看.| 色久优优欧美色久优优| 中文一区二区在线观看| 久久aⅴ国产欧美74aaa| 制服丝袜日韩国产| 亚洲一区二区三区激情| 91首页免费视频| 中文字幕第一区综合| 国产在线乱码一区二区三区| 69堂精品视频| 天天综合网 天天综合色| 一本久道久久综合中文字幕| 中文字幕av资源一区| 国产一区二区三区四区五区美女 | 精品第一国产综合精品aⅴ| 天涯成人国产亚洲精品一区av| 色婷婷av久久久久久久| 亚洲靠逼com| 色香色香欲天天天影视综合网| 国产精品美女视频| a亚洲天堂av| 亚洲三级小视频| 91麻豆国产在线观看| 日韩一区日韩二区| 91久久精品一区二区二区| 亚洲精品免费在线播放| 欧美视频一二三区| 性久久久久久久| 日韩欧美一级特黄在线播放| 久久精品国内一区二区三区| 精品国产一区a| 国产成人综合在线观看| 国产精品久久久久桃色tv| 在线精品视频一区二区| 亚洲自拍都市欧美小说| 日韩一区二区三区高清免费看看| 美女尤物国产一区| 国产精品网友自拍| 色狠狠av一区二区三区| 日日夜夜精品视频天天综合网| 日韩一区二区在线看| 国产精品一区免费视频| 亚洲婷婷综合色高清在线| 欧美性受极品xxxx喷水| 日韩高清在线电影| 日本一区二区视频在线观看| 亚洲精品一区二区三区影院| 国产精品自在在线| 亚洲伦理在线免费看| 欧美剧情片在线观看| 国产精品一区在线观看乱码| 亚洲另类在线视频| 欧美一区二区三区思思人| 国产成人精品免费| 午夜视频一区在线观看| 国产精品污网站| 91精品国产综合久久精品麻豆| 国产99久久久国产精品| 亚洲午夜电影在线观看| 国产女人18水真多18精品一级做| 欧美色图激情小说| 成人综合在线视频| 蜜臀av在线播放一区二区三区 | 色老汉一区二区三区| 美女视频黄 久久| 一区二区在线观看视频在线观看| 精品久久久久香蕉网| 欧美三级三级三级| 成人三级伦理片| 日本少妇一区二区| 亚洲国产精品一区二区www在线| 国产亚洲一区二区三区在线观看| 欧美色综合网站| 成人看片黄a免费看在线| 美女视频黄 久久| 亚洲成国产人片在线观看| 中文av字幕一区| 欧美一区二区三区男人的天堂| 色8久久人人97超碰香蕉987| 粉嫩aⅴ一区二区三区四区 | 一区二区成人在线| 国产女主播在线一区二区| 欧美精品一区二区三区视频| 欧美日韩久久久久久| 色成人在线视频| 波多野结衣亚洲一区| 国产伦精品一区二区三区在线观看| 天天av天天翘天天综合网| 亚洲一区二区三区爽爽爽爽爽| 中文字幕一区三区| 国产日韩精品一区二区三区在线| 精品日韩在线观看| 日韩欧美区一区二| 日韩一区二区在线观看视频| 91精品国产综合久久香蕉的特点| 欧美日韩精品一区二区三区四区| 色哟哟一区二区三区| 色综合一个色综合| 91官网在线观看| 欧美日韩国产另类不卡| 精品婷婷伊人一区三区三| 欧美日韩一二区| 欧美区一区二区三区| 在线综合视频播放| 精品国产乱子伦一区| 欧美精品一区二| 国产精品美女久久久久久久久久久 | 日韩一区和二区| 久久免费午夜影院| 国产精品久久久久久久久久久免费看 | 国产色婷婷亚洲99精品小说| 国产农村妇女毛片精品久久麻豆 | 精品国产乱码久久久久久老虎| 久久五月婷婷丁香社区| 欧美极品aⅴ影院| 一区二区三区国产精华| 亚洲成人动漫一区| 久草在线在线精品观看| 国产精品18久久久| 日本乱码高清不卡字幕| 欧美丰满一区二区免费视频| 精品国产乱码久久久久久影片| 国产清纯白嫩初高生在线观看91 | 在线成人午夜影院| 久久精品视频在线看| 亚洲免费在线看| 久久精品国产精品亚洲红杏| 成人黄色网址在线观看| 欧美日韩一区精品| 中文字幕成人av| 午夜av电影一区| 丁香六月综合激情| 欧美理论电影在线| 中文字幕av不卡| 午夜日韩在线观看| 高潮精品一区videoshd| 欧美日本一区二区三区| 日本一区二区视频在线| 视频一区二区不卡| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 国产美女视频91| 欧美日韩精品欧美日韩精品|