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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? global.java

?? 俄羅斯方塊游戲java開發(fā)源代碼
?? JAVA
字號:
package cn.itcast.tetris.util;

import java.awt.Color;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Properties;
import java.util.Random;
import java.util.Set;


/**
 * 
 * 
 * 工具類<BR>
 * <BR>
 * 此類中存放了其他類中用到的一些常量<BR>
 * 并且支持配置文件<BR>
 * 配置文件的路徑為游戲運行的目錄, 文件名為 tetris.ini<BR>
 * <BR>
 * 配置文件的寫法請參見字段的注釋<BR>
 * <BR>
 * 配置文件中設(shè)置項可以只寫需要配置的, 沒有寫的設(shè)置項默認(rèn)為缺省值<BR>
 * 各配置項的缺省值請參見字段的注釋<BR>
 * <BR>
 * 每個配置項都有設(shè)置值范圍, 超出范圍(無效)的設(shè)置值將不起作用<BR>
 * 設(shè)置值的范圍請參見字段的注釋<BR>
 * 
 * @version 1.0, 08/01/08
 * 
 * @author 湯陽光
 * 
 */
public class Global {

	private static Properties properties = new Properties();

	/**
	 * 配置文件的路徑(默認(rèn)為當(dāng)前目錄下的 snake.ini文件)
	 */
	private static String CONFIG_FILE = "tetris.ini";

	/**
	 * 一個格子的寬度, 單位:像素 <BR>
	 * 對應(yīng)的配置文件中的關(guān)鍵字為: cell_width, 或用 cell_size指定<BR>
	 * 范圍1 至 100<BR>
	 * 缺省值為 23
	 */
	public static final int CELL_WIDTH;

	/**
	 * 一個格子的高度, 單位:像素 <BR>
	 * 對應(yīng)的配置文件中的關(guān)鍵字為: cell_width, 或用 cell_size指定<BR>
	 * 范圍1 至 100<BR>
	 * 缺省值為 23
	 */
	public static final int CELL_HEIGHT;
	/**
	 * 用格子表示的寬度, (寬度為多少個格子) 單位:格 <BR>
	 * 對應(yīng)的配置文件中的關(guān)鍵字為: width<BR>
	 * 范圍10 至 80<BR>
	 * 缺省值為 15
	 */
	public static final int WIDTH;

	/**
	 * 用格子表示的高度, (高度為多少個格子), 單位:格<BR>
	 * 對應(yīng)的配置文件中的關(guān)鍵字為: height<BR>
	 * 范圍10 至 60<BR>
	 * 缺省值為20
	 */
	public static final int HEIGHT;

	/**
	 * 圖形下落的初始速度 (單位: 毫秒/格)<BR>
	 * 對應(yīng)的配置文件中的關(guān)鍵字為: speed<BR>
	 * 范圍10 至 無限大<BR>
	 * 缺省值為 200
	 */
	public static final int DEFAULT_SPEED;

	/**
	 * 保存當(dāng)前游戲中圖形的下落速度
	 */
	public static int CURRENT_SPEED;

	/**
	 * 圖形快速下落的速度 (單位: 毫秒/格)<BR>
	 * 對應(yīng)的配置文件中的關(guān)鍵字為: swift_speed<BR>
	 * 范圍0 至 無限大<BR>
	 * 缺省值為 15
	 */
	public static final int SWIFT_SPEED;

	/**
	 * 每次加速或減速的幅度 (單位: 毫秒/格)<BR>
	 * 對應(yīng)的配置文件的關(guān)鍵字為: speed_step<BR>
	 * 范圍1 至 無限大<BR>
	 * 缺省值為 25
	 */
	public static final int SPEED_STEP;

	/**
	 * 消除滿行前暫停效果的時間(單位: 毫秒)<BR>
	 * 對應(yīng)的配置文件的關(guān)鍵字為: stay_time<BR>
	 * 范圍0 至 無限大<BR>
	 * 缺省值為 200
	 */
	public static final int DEFAULT_STAY_TIME;

	/**
	 * 消除滿行前暫停效果的時間
	 */
	public static int STAY_TIME;

	private static Random random = new Random();

	public static final String TITLE_LABEL_TEXT;

	public static final String INFO_LABEL_TEXT;

	private static final Color[] DEFAULT_COLORS = new Color[] {
			new Color(0x990066), new Color(0x990099), new Color(0x330099),
			new Color(0x663300), new Color(0x009966), new Color(0x003333) };

	public static final List<Color> COMMON_COLORS;

	/**
	 * 返回一個隨機的顏色
	 * 
	 * @return
	 */
	public static Color getRandomColor() {
		return DEFAULT_COLORS[random.nextInt(DEFAULT_COLORS.length)];
	}

	/**
	 * 默認(rèn)的構(gòu)造器, 私有的, 不能生成這個類的實例
	 */
	private Global() {
	}

	/**
	 * 初始化常量
	 */
	static {
		InputStream inputStream = null;

		try {
			inputStream = new FileInputStream(CONFIG_FILE);
			properties.load(inputStream);
		} catch (FileNotFoundException e) {
			System.out.println("沒有配置文件");
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				if (inputStream != null)
					inputStream.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		Integer temp = null;
		WIDTH = (temp = getIntValue("width")) != null && temp <= 80
				&& temp >= 10 ? temp : 15;
		HEIGHT = (temp = getIntValue("height")) != null && temp <= 60
				&& temp >= 10 ? temp : 20;
		DEFAULT_SPEED = CURRENT_SPEED = (temp = getIntValue("speed")) != null
				&& temp >= 10 ? temp : 300;
		SWIFT_SPEED = (temp = getIntValue("swift_speed")) != null && temp >= 0 ? temp
				: 15;
		SPEED_STEP = (temp = getIntValue("speed_step")) != null && temp >= 1 ? temp
				: 25;
		DEFAULT_STAY_TIME = STAY_TIME = (temp = getIntValue("stay_time")) != null
				&& temp >= 0 ? temp : 200;
		int defaultCellSize = (temp = getIntValue("cell_size")) != null
				&& temp > 0 && temp <= 100 ? temp : 23;
		CELL_WIDTH = (temp = getIntValue("cell_width")) != null && temp > 0
				&& temp <= 100 ? temp : defaultCellSize;
		CELL_HEIGHT = (temp = getIntValue("cell_height")) != null && temp > 0
				&& temp <= 100 ? temp : defaultCellSize;

		String tempStr = null;
		TITLE_LABEL_TEXT = (tempStr = getValue("title")) == null ? "說明:"
				: tempStr;
		INFO_LABEL_TEXT = (tempStr = getValue("info")) == null ? "方向鍵控制方向, 回車鍵暫停/繼續(xù)\nPAGE UP, PAGE DOWN 加速或減速\n\n更多請看 www.itcast.cn "
				: tempStr;

		COMMON_COLORS = loadColors();
	}

	/**
	 * 要考慮多種情況<BR>
	 * 1. 沒有這個key和value<BR>
	 * 2 有key 沒有 value
	 */
	private static Integer getIntValue(String key) {
		if (key == null)
			throw new RuntimeException("key 不能為空");
		try {
			return new Integer(properties.getProperty(key));
		} catch (NumberFormatException e) {
			return null;
		}
	}

	private static String getValue(String key) {
		try {
			return new String(properties.getProperty(key).getBytes("iso8859-1"));
		} catch (Exception e) {
			return null;
		}
	}

	@SuppressWarnings("unchecked")
	private static List<Color> loadColors() {

		List<Color> l = new ArrayList<Color>(7);
		for (int i = 0; i < 7; i++)
			l.add(null);

		Set set = properties.keySet();
		Iterator iter = set.iterator();
		while (iter.hasNext()) {
			String key = (String) iter.next();
			if ("1".equals(key.trim()))
				addColor(l, 0, getValue(key));
			else if ("2".equals(key.trim()))
				addColor(l, 1, getValue(key));
			else if ("3".equals(key.trim()))
				addColor(l, 2, getValue(key));
			else if ("4".equals(key.trim()))
				addColor(l, 3, getValue(key));
			else if ("5".equals(key.trim()))
				addColor(l, 4, getValue(key));
			else if ("6".equals(key.trim()))
				addColor(l, 5, getValue(key));
			else if ("7".equals(key.trim()))
				addColor(l, 6, getValue(key));
		}

		for (int i = 0; i < 7; i++) {
			l.remove(null);
		}

		if (l.size() < 1) {
			for (int i = 0; i < DEFAULT_COLORS.length; i++) {
				l.add(DEFAULT_COLORS[i]);
			}
		} else {
			if (l.size() != 7)
				System.out.println("您一共設(shè)置了 " + l.size() + " 種有效顏色, 建議設(shè)置七種");

			return l.subList(0, l.size() > 7 ? 7 : l.size());
		}
		return l;
	}

	@SuppressWarnings("unchecked")
	private static void addColor(List l, int index, String str) {
		str = str.trim();
		if (!str.startsWith("0x") || str.length() < 3) {
			System.out.println("顏色設(shè)置有誤,請檢查 : " + str + " (key)");
			return;
		}

		try {
			String strRGB = str.substring(2, str.length() >= 8 ? 8 : str
					.length());
			int rgb = Integer.valueOf(strRGB, 16);
			Color c = new Color(rgb);
			if (c != null) {
				l.add(index, c);
			}
		} catch (Exception e) {
			System.out.println("(e)顏色設(shè)置有誤,請檢查:" + str + "(key)");
			e.printStackTrace();
			return;
		}
	}

}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一级二级在线观看| 成人一区二区三区| 欧美在线高清视频| 亚洲一区二区三区在线看| 欧美日韩激情一区| 免费高清在线视频一区·| 精品日韩成人av| 国产乱码精品一区二区三区五月婷| 欧美精品一区二区三区久久久| 国内精品久久久久影院薰衣草| 国产亚洲制服色| www.爱久久.com| 亚洲妇女屁股眼交7| 日韩欧美aaaaaa| 成人午夜视频免费看| 亚洲一区二区三区精品在线| 欧美一级精品大片| 成人av网在线| 丝袜亚洲精品中文字幕一区| 精品成人免费观看| 色屁屁一区二区| 免费黄网站欧美| ...xxx性欧美| 日韩视频在线一区二区| 成人av在线一区二区三区| 亚洲成人av福利| 国产欧美日韩亚州综合| 色乱码一区二区三区88| 精油按摩中文字幕久久| 亚洲另类春色校园小说| 日韩三级电影网址| 色哟哟一区二区| 国产精品99精品久久免费| 亚洲成人免费影院| 日本一区二区三区四区| 91精品国产色综合久久不卡蜜臀 | 亚洲大片免费看| 国产欧美视频一区二区三区| 欧美日韩精品福利| www.亚洲人| 国产在线精品视频| 日韩中文字幕一区二区三区| 国产精品伦一区二区三级视频| 9191精品国产综合久久久久久| av成人动漫在线观看| 蓝色福利精品导航| 亚洲线精品一区二区三区八戒| 国产欧美一区二区精品忘忧草| 5858s免费视频成人| bt7086福利一区国产| 精久久久久久久久久久| 香港成人在线视频| 亚洲三级电影网站| 亚洲精品在线免费观看视频| 欧美日韩成人综合在线一区二区 | 日本韩国一区二区三区| 懂色av一区二区三区免费观看 | 久久影音资源网| 欧美电影一区二区| 91黄色激情网站| av男人天堂一区| 成人小视频在线| 国产成人综合亚洲91猫咪| 久久99久久久欧美国产| 日韩国产一区二| 亚洲国产精品综合小说图片区| 亚洲色图清纯唯美| 亚洲三级免费观看| 国产精品美女久久久久久2018| 久久综合色之久久综合| 欧美zozozo| 日韩欧美精品三级| 欧美一级午夜免费电影| 在线综合+亚洲+欧美中文字幕| 欧美日韩中字一区| 3751色影院一区二区三区| 欧美日韩国产一级二级| 欧美在线观看你懂的| 欧美性视频一区二区三区| 欧美日韩aaa| 欧美一区二区精品| 欧美成人r级一区二区三区| 欧美一区二区久久久| 日韩精品一区国产麻豆| 欧美成人欧美edvon| 久久天堂av综合合色蜜桃网| 国产亚洲成aⅴ人片在线观看| 国产午夜精品一区二区三区四区| 国产日产欧美一区二区三区| 中文字幕成人av| 亚洲欧美国产三级| 亚洲成av人片一区二区梦乃| 人人爽香蕉精品| 国产成人一区在线| 色综合久久六月婷婷中文字幕| 99久久精品国产观看| 精品视频在线看| 欧美一级午夜免费电影| 久久久久久9999| 中文字幕综合网| 亚州成人在线电影| 国产乱理伦片在线观看夜一区| 99久久伊人精品| 欧美日韩小视频| 久久精品夜色噜噜亚洲aⅴ| **欧美大码日韩| 日韩福利电影在线观看| 国产一区二区在线影院| eeuss鲁片一区二区三区在线看 | 欧美军同video69gay| 日韩免费观看2025年上映的电影 | 99re这里只有精品6| 欧美久久久久久蜜桃| 国产精品网站在线| 夜夜嗨av一区二区三区四季av | 国产一区二区三区免费| 97aⅴ精品视频一二三区| 欧美疯狂性受xxxxx喷水图片| 国产网红主播福利一区二区| 亚洲欧美日韩成人高清在线一区| 奇米精品一区二区三区在线观看一 | 中文字幕在线观看一区二区| 亚洲不卡av一区二区三区| 国产成人精品1024| 欧美精品国产精品| 国产精品污污网站在线观看| 日韩和欧美一区二区三区| 成人av综合一区| 欧美成人猛片aaaaaaa| 一区二区三区四区亚洲| 国产寡妇亲子伦一区二区| 欧美自拍丝袜亚洲| 国产精品欧美久久久久一区二区| 午夜精品一区二区三区免费视频 | 91国内精品野花午夜精品| 久久综合久久鬼色| 亚洲aⅴ怡春院| 色成人在线视频| 国产日韩欧美激情| 美腿丝袜亚洲一区| 在线看不卡av| 自拍av一区二区三区| 国产伦精品一区二区三区在线观看| 欧美这里有精品| 亚洲图片你懂的| 东方aⅴ免费观看久久av| 精品成人a区在线观看| 国产成人精品综合在线观看 | 五月婷婷另类国产| 91久久精品一区二区| 国产欧美精品区一区二区三区 | 色久优优欧美色久优优| 国产精品人人做人人爽人人添| 久久精品99国产精品| 91精品国产综合久久福利软件| 亚洲一区二区高清| 日本高清成人免费播放| 国产精品久久久久久亚洲伦| 国产一区二区三区免费看| 欧美成人福利视频| 精品一区二区三区日韩| 精品少妇一区二区三区日产乱码 | 亚洲大片一区二区三区| 色国产精品一区在线观看| 亚洲欧美另类久久久精品2019| 99re热这里只有精品视频| 亚洲国产精品二十页| www.欧美色图| 亚洲精品免费在线播放| 91麻豆产精品久久久久久 | 欧美午夜精品久久久久久超碰| 亚洲图片另类小说| 91麻豆swag| 亚洲一级在线观看| 在线不卡免费av| 久久国产精品色婷婷| 精品成a人在线观看| 国产福利一区二区三区视频在线 | 岛国一区二区在线观看| 精品中文av资源站在线观看| 欧美精品久久99久久在免费线 | 亚洲在线视频一区| 欧美欧美欧美欧美首页| 日韩av一区二区在线影视| 欧美一区二区三区的| 国产呦精品一区二区三区网站| 欧美国产国产综合| 在线一区二区观看| 蜜乳av一区二区| 国产精品网曝门| 欧美视频在线观看一区二区| 蜜乳av一区二区| 国产精品麻豆网站| 欧美三级电影在线观看| 免费国产亚洲视频| 亚洲男人的天堂一区二区| 欧美一区二区三区的| 高清beeg欧美| 亚洲午夜精品网| 国产性做久久久久久|