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

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

?? map.java

?? JAVA版的連連看畢業(yè)設(shè)計
?? JAVA
字號:
/*
 * 用戶名 AXL 日 期 2007-7-13 所在公司 常州清華IT
 */

package cn.elva.model;

import java.util.Random;

import cn.elva.Settings;

/**
 * @author AXL 數(shù)據(jù)部分,一個內(nèi)部數(shù)組來表示頁面上的具體情況
 */
public class Map
{
	public static int LEFTCOUNT = Settings.ROWS * Settings.COLUMNS;

	// 讓其最外層的數(shù)據(jù)不顯示,可以解決邊框消除不掉的情況
	private int[][] map = new int[Settings.ROWS + 2][Settings.COLUMNS + 2];

	// private ArrayPoint prePoint;

	// private ArrayPoint currPoint;

	// 出現(xiàn)的不同圖片個數(shù)
	private int maxKinds = 4;

	public Map()
	{
		init();
	}

	public int[][] getMap()
	{
		return map;
	}

	/**
	 * 實現(xiàn)了二維數(shù)組的產(chǎn)生
	 */
	private void init()
	{
		int[] tempArr = new int[Settings.ROWS * Settings.COLUMNS];
		int len = tempArr.length;

		// 根據(jù)圖片的種類數(shù)來確定數(shù)組大小,如有64張圖片,每四個為一樣的,則需要圖片數(shù)為64/4=16
		for (int i = 0; i < len / maxKinds; i++)
		{
			tempArr[i * 4] = i + 1;
			tempArr[i * 4 + 1] = i + 1;
			tempArr[i * 4 + 2] = i + 1;
			tempArr[i * 4 + 3] = i + 1;
		}

		// 打亂一維數(shù)組內(nèi)數(shù)據(jù)的排列
		random(tempArr);

		// 填充到二維數(shù)組中
		for (int i = 1; i < Settings.ROWS + 1; i++)
		{
			for (int j = 1; j < Settings.COLUMNS + 1; j++)
			{
				this.map[i][j] = tempArr[(i - 1) * Settings.COLUMNS
						+ (j - 1)];
			}
		}
	}

	/**
	 * 將數(shù)組進行重排,使其成無序狀態(tài)
	 * 
	 * @param array
	 *              要重排的數(shù)組
	 */
	private void random(int[] array)
	{
		Random random = new Random();
		int len = array.length;
		for (int i = len; i > 0; i--)
		{
			int j = random.nextInt(i);
			int temp = array[i - 1];
			array[i - 1] = array[j];
			array[j] = temp;
		}
	}

	/**
	 * 判斷是否在一條直線上,這里不去比較兩者值是否相等,主要用于后面兩個拐點的情況
	 * 
	 * @param p1
	 *              之前的點
	 * @param p2
	 *              當(dāng)前所點的點
	 * @return true 相通,false 不通
	 */
	public boolean oneLineWithoutValue(ArrayPoint p1, ArrayPoint p2)
	{
		if (horizonMatch(p1, p2))
		{
			return true;
		}
		else if (verticalMatch(p1, p2))
		{
			return true;
		}
		return false;
	}

	/**
	 * 判斷是否在一條直線上,其中包括了垂直和水平兩種情況
	 * 
	 * @param p1
	 *              之前的點
	 * @param p2
	 *              當(dāng)前所點的點
	 * @return true 相通,false 不通
	 */
	public boolean oneLine(ArrayPoint p1, ArrayPoint p2)
	{
		
		if (p1.value != p2.value)
		{
			return false;
		}
		if (oneLineWithoutValue(p1, p2))
		{
			return true;
		}
		return false;
	}

	/**
	 * 豎線上的判斷
	 * 
	 * @param p1
	 *              之前的點
	 * @param p2
	 *              當(dāng)前所點的點
	 * @return true 相通,false 不通
	 */
	public boolean verticalMatch(ArrayPoint p1, ArrayPoint p2)
	{
		if (p1.j != p2.j)
		{
			return false;
		}
		if (p1.i > p2.i)
		{
			ArrayPoint temp = null;
			temp = p1;
			p1 = p2;
			p2 = temp;
		}
		// 之間的相隔的棋子數(shù)
		int spaceCount = p2.i - p1.i;

		// 如果相鄰,直接消除
		if (spaceCount == 1 && p1.value == p2.value)
		{
			return true;
		}

		for (int i = p1.i + 1; i < p2.i; i++)
		{
			ArrayPoint point = new ArrayPoint(i, p1.j, map[i][p1.j]);
			// 只要其值為0就表示沒有棋子
			if (point.value != 0)
			{
				return false;
			}
		}
		return true;
	}

	/**
	 * 水平方向的判斷
	 * 
	 * @param p1
	 *              之前所選的點
	 * @param p2
	 *              當(dāng)前選中的點
	 * @return true 相通,false 不通
	 */
	public boolean horizonMatch(ArrayPoint p1, ArrayPoint p2)
	{
		// 如果行行號不等的話,剛不是水平方向的結(jié)果
		if (p1.i != p2.i)
		{
			return false;
		}
		if (p1.j > p2.j)
		{
			ArrayPoint temp = null;
			temp = p1;
			p1 = p2;
			p2 = temp;
		}
		// 水平相隔棋子數(shù)
		int spaceCount = p2.j - p1.j;
		// 如果相鄰,直接消除
		if (spaceCount == 1 && p1.value == p2.value)
		{
			return true;
		}
		for (int i = p1.j + 1; i < p2.j; i++)
		{
			ArrayPoint p = new ArrayPoint(p1.i, i, map[p1.i][i]);
			if (p.value != 0)
			{
				return false;
			}
		}
		return true;
	}

	/**
	 * 判斷前后點擊的是不是同一個點,i,j相同就是一個點
	 * 
	 * @param p1
	 *              之前所選的點
	 * @param p2
	 *              當(dāng)前選中的點
	 * @return true 同一個點,false 不同點
	 */
	private boolean isSameOne(ArrayPoint p1, ArrayPoint p2)
	{
		if (p1.i == p2.i && p1.j == p2.j)
		{
			return true;
		}
		else
		{
			return false;
		}
	}

	/**
	 * 帶一個拐點的情況,但不比較值的大小是否相等
	 * 
	 * @param p1
	 *              初始點
	 * @param p2
	 *              結(jié)束點
	 * @return true 相通,false 不通
	 */
	public boolean oneConnerWithoutValue(ArrayPoint p1, ArrayPoint p2)
	{
		// 獲取P1水平方向的拐點
		ArrayPoint p1H = new ArrayPoint(p1.i, p2.j, map[p1.i][p2.j]);
		// 獲取P1垂直方向的拐點
		ArrayPoint p1V = new ArrayPoint(p2.i, p1.j, map[p2.i][p1.j]);

		if (horizonMatch(p1, p1H) && (p1H.value == 0))
		{
			if (this.verticalMatch(p1H, p2))
			{
				return true;
			}
		}

		if (verticalMatch(p1, p1V) && (p1V.value == 0))
		{
			if (horizonMatch(p1V, p2))
			{
				return true;
			}
		}
		return false;
	}

	/**
	 * 帶一個拐點的情況
	 * 
	 * @param p1
	 *              初始點
	 * @param p2
	 *              結(jié)束點
	 * @return true 相通,false 不通
	 */
	public boolean oneConner(ArrayPoint p1, ArrayPoint p2)
	{
		// 獲取P1水平方向的拐點
		ArrayPoint p1H = new ArrayPoint(p1.i, p2.j, map[p1.i][p2.j]);
		// 獲取P1垂直方向的拐點
		ArrayPoint p1V = new ArrayPoint(p2.i, p1.j, map[p2.i][p1.j]);

		if (p1.value != p2.value)
		{
			return false;
		}

		if (oneConnerWithoutValue(p1, p2))
		{
			return true;
		}
		return false;
	}

	/**
	 * 帶兩個拐點的情況,分四個方向走,上下左右,只要一個方向通過,即通過
	 * 
	 * @param p1
	 *              初始點
	 * @param p2
	 *              結(jié)束點
	 * @return true 相通,false 不通
	 */
	public boolean twoConner(ArrayPoint p1, ArrayPoint p2)
	{
		if (p1.value != p2.value)
		{
			return false;
		}

		int count = 0;
		ArrayPoint temp = null;

		// 左
		for (int col = p1.j - 1; col >= 0; col--)
		{
			temp = new ArrayPoint(p1.i, col, map[p1.i][col]);
			if ((temp.value == 0) && this.oneLineWithoutValue(p1, temp))
			{
				if (this.oneConnerWithoutValue(temp, p2))
				{
					return true;
				}
			}
			else
			{
				break;
			}
		} // 右

		count = Settings.COLUMNS + 2 - p1.j;
		for (int col = p1.j; col < Settings.COLUMNS + 2; col++)
		{
			temp = new ArrayPoint(p1.i, col, map[p1.i][col]);
			if ((temp.value == 0) && oneLineWithoutValue(p1, temp))
			{
				if (oneConnerWithoutValue(temp, p2))
				{
					return true;
				}
			}
		}
		// 上
		count = p1.i;
		for (int row = count - 1; row >= 0; row--)
		{
			temp = new ArrayPoint(row, p1.j, map[row][p1.j]);
			if ((temp.value == 0) && oneLineWithoutValue(p1, temp))
			{
				if (oneConnerWithoutValue(temp, p2))
				{
					return true;
				}
			}
		}
		// 下
		for (int row = p1.i + 1; row < Settings.ROWS + 2; row++)
		{
			temp = new ArrayPoint(row, p1.j, map[row][p1.j]);
			if ((temp.value == 0) && oneLineWithoutValue(p1, temp))
			{
				if (oneConnerWithoutValue(temp, p2))
				{
					return true;
				}
			}
		}
		//
		return false;
	}

	/**
	 * 判斷兩點是否匹配,包括直線,一個拐點,兩個拐點三種情況
	 * 
	 * @param p1
	 *              初始點
	 * @param p2
	 *              結(jié)束點
	 * @return true 相通,false 不通
	 */
	public boolean match(ArrayPoint p1, ArrayPoint p2)
	{
		if (this.isSameOne(p1, p2))
		{
			return false;
		}

		if (oneLine(p1, p2))
		{
			map[p1.i][p1.j] = 0;
			map[p2.i][p2.j] = 0;
			LEFTCOUNT -= 2;
			return true;
		}
		if (oneConner(p1, p2))
		{
			map[p1.i][p1.j] = 0;
			map[p2.i][p2.j] = 0;
			LEFTCOUNT -= 2;
			return true;
		}
		if (twoConner(p1, p2))
		{
			map[p1.i][p1.j] = 0;
			map[p2.i][p2.j] = 0;
			LEFTCOUNT -= 2;
			return true;
		}
		return false;
	}
	
	
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产91精品欧美| 日韩一区二区视频| 91精品欧美久久久久久动漫 | 韩国精品一区二区| eeuss影院一区二区三区| 欧美一级精品在线| 樱桃视频在线观看一区| 狠狠v欧美v日韩v亚洲ⅴ| 色国产精品一区在线观看| 久久蜜臀精品av| 视频在线观看一区二区三区| 99久久精品免费精品国产| 精品国产一区二区亚洲人成毛片| 一区二区三区精品| 国产aⅴ综合色| 久久亚区不卡日本| 视频一区二区不卡| 欧美日韩中文另类| 亚洲精选免费视频| 99久久免费精品高清特色大片| 日韩欧美成人一区| 日本麻豆一区二区三区视频| 欧美这里有精品| 伊人夜夜躁av伊人久久| 不卡一二三区首页| 国产精品九色蝌蚪自拍| 国产精品一区二区91| 日韩美女视频在线| 奇米精品一区二区三区四区 | 亚洲成a人v欧美综合天堂| 99免费精品视频| 国产丝袜美腿一区二区三区| 精品一区二区久久| 精品国产电影一区二区| 精品在线亚洲视频| 日韩欧美国产麻豆| 看片网站欧美日韩| 精品99999| 国产成人精品免费| 国产精品久久久久久久久久免费看 | 免费黄网站欧美| 制服.丝袜.亚洲.中文.综合| 日本不卡一二三区黄网| 日韩区在线观看| 麻豆久久久久久| 久久精品欧美日韩| 99国产精品久久久久| 亚洲女子a中天字幕| 91麻豆免费看片| 亚洲自拍另类综合| 欧美一级片免费看| 国产福利一区二区| 亚洲欧美怡红院| 欧美性感一区二区三区| 麻豆精品新av中文字幕| 国产无一区二区| 一本一道久久a久久精品| 婷婷成人激情在线网| www久久精品| 91视频观看视频| 日韩成人精品在线| 国产日韩精品一区二区浪潮av | 婷婷成人激情在线网| 日韩视频中午一区| 从欧美一区二区三区| 亚洲国产精品一区二区尤物区| 欧美一区二区三区影视| 丁香六月综合激情| 性做久久久久久久免费看| 精品福利一区二区三区免费视频| 成人自拍视频在线观看| 午夜国产精品一区| 国产精品拍天天在线| 欧美色手机在线观看| 国产美女一区二区| 亚洲图片一区二区| 久久久久久久久久久久久久久99 | 日本sm残虐另类| 亚洲欧洲日韩av| 精品乱人伦小说| 欧美系列日韩一区| 国产精品一卡二| 亚洲va天堂va国产va久| 中文字幕一区二区三区在线观看| 欧美精品亚洲一区二区在线播放| 成人开心网精品视频| 亚洲二区在线视频| 亚洲欧美综合另类在线卡通| 欧美一级日韩免费不卡| 色婷婷狠狠综合| 成人性色生活片免费看爆迷你毛片| 亚洲成人黄色小说| 中文字幕一区二区在线观看| 欧美www视频| 欧美精品一级二级| 久久久久久久综合| 91精品在线一区二区| 日本韩国欧美一区二区三区| 国产成人亚洲综合a∨婷婷| 日本vs亚洲vs韩国一区三区| 亚洲自拍偷拍麻豆| 亚洲精品国产视频| 成人免费一区二区三区视频| 国产亚洲一区二区在线观看| 日韩欧美视频一区| 欧美一区二区三区免费视频| 欧美日韩一级黄| 在线免费观看一区| 欧洲一区二区三区在线| 91网站最新地址| 波多野结衣91| 成人毛片视频在线观看| 福利一区福利二区| av一区二区三区在线| www.99精品| jvid福利写真一区二区三区| 成人在线视频首页| av在线一区二区三区| 91香蕉视频mp4| 色婷婷亚洲精品| 欧美日韩一区二区三区在线| 日本道免费精品一区二区三区| 色综合视频在线观看| 在线看国产一区二区| 在线观看日韩电影| 欧美精品xxxxbbbb| 在线电影一区二区三区| 69堂国产成人免费视频| 日韩一区二区三区在线| 精品欧美黑人一区二区三区| 国产三级一区二区| 国产精品卡一卡二卡三| 亚洲精品日韩专区silk| 亚洲aaa精品| 日本sm残虐另类| 国产电影一区在线| 成人激情电影免费在线观看| 欧美自拍偷拍午夜视频| 在线成人av网站| 精品成人佐山爱一区二区| 久久久99精品免费观看| 亚洲免费观看视频| 日韩av一级片| 国产精品中文字幕日韩精品| 97精品久久久午夜一区二区三区| 在线观看av一区| 7777精品伊人久久久大香线蕉 | 日韩欧美高清一区| 中文字幕免费不卡| 亚洲成av人**亚洲成av**| 久久99久国产精品黄毛片色诱| 成人一级片在线观看| 欧美日韩精品一区二区在线播放| 精品99一区二区| 亚洲男人的天堂一区二区| 日本一区中文字幕 | 久久国产乱子精品免费女| 国产99久久久久| 欧美体内she精高潮| 久久综合丝袜日本网| 亚洲一区在线电影| 成人爽a毛片一区二区免费| 欧美羞羞免费网站| 国产日韩欧美一区二区三区综合 | 蓝色福利精品导航| 色综合天天性综合| 久久久精品免费观看| 亚洲免费大片在线观看| 精品一区二区三区视频| 欧美视频中文一区二区三区在线观看| 久久综合久久鬼色中文字| 亚洲丶国产丶欧美一区二区三区| 成人一道本在线| 欧美精品一区二| 丝袜美腿一区二区三区| 99久久久国产精品| 日本一区二区三区四区在线视频| 美女视频黄免费的久久| 91精品婷婷国产综合久久竹菊| 国产精品动漫网站| 国产在线一区观看| 7777精品伊人久久久大香线蕉 | 国产亚洲va综合人人澡精品| 天天综合网天天综合色 | 99精品桃花视频在线观看| 2021国产精品久久精品| 麻豆精品一区二区三区| 欧美精品久久一区| 午夜精品久久久久久久蜜桃app| 99久久精品免费看国产免费软件| 久久精品视频免费观看| 国产一区二区在线电影| 欧美大片在线观看一区| 蜜桃视频在线观看一区二区| 欧美日韩一区二区在线观看视频| 亚洲免费av观看| 欧美在线影院一区二区| 一区二区三区资源| 欧美视频一区二区在线观看| 亚洲激情综合网|