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

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

?? handbone.java

?? 移動平臺游戲開發
?? JAVA
?? 第 1 頁 / 共 2 頁
字號:
		int index2 = m_aPengIndex[1];
		
		m_aPengBone[m_nPeng] = bone;
		m_aPengBone[m_nPeng+1] = m_aHandBone[index1];
		m_aPengBone[m_nPeng+2] = m_aHandBone[index2];
		m_nPeng += 3;
		//將手中碰掉的拍去掉
		int num = 0;
		for( int n = 0; n < m_nHand; n ++ )
		{
			if( n == index1 || n == index2 )
				continue;
			m_aHandBone[num] = m_aHandBone[n];
			num ++;
		}
		m_nHand = m_nHand - 3; 
		m_nSelectIndex = m_nHand;
		m_HoldBone = m_aHandBone[m_nHand];
		return true;
	}	
	
	//顯示圖像,參數g對應手機屏幕
	//參數bChi為true表示當前正在選擇吃牌的方法
	//(如是三萬、四萬吃五萬,還是用四萬、六萬吃五萬)
	//參數bSelect為true表示當前正在選擇要打出的牌
	//參數scrWidth為屏幕的寬
	//參數bHu為true表示胡了,需要把牌都翻轉過來
	public void Paint(Graphics g, boolean bChi, boolean bSelect, boolean bHu, int scrWidth){
		int x = m_nX;
		int y = m_nY;
		int arrDisX	 = 4;
		int arrDisY	 = 13;
		int w1 	= 13;
		int w2	= 3;
		int h	= 5;
		if( !m_bPlayer )
		{//玩家的牌是從左向右畫,電腦的牌則從右向左畫
			w1 = -w1;
			w2 = -w2;
			h  = -h;
			arrDisX = - arrDisX;
			arrDisY = - arrDisY;
		}
		//顯示杠牌
		int num = 0;
		while( num < m_nGang )
		{//四張牌為一組,中間的牌羅起來
			m_aGangBone[num].setRefPixelPosition(x, y);
			m_aGangBone[num].setState(Bone.BASE_FALL_F);
			m_aGangBone[num].Paint(g);
			num ++;
			x = x + w1;
			m_aGangBone[num].setRefPixelPosition(x, y);
			m_aGangBone[num].setState(Bone.BASE_FALL_F);
			m_aGangBone[num].Paint(g);
			num ++;
			m_aGangBone[num].setRefPixelPosition(x, y - h);
			m_aGangBone[num].setState(Bone.BASE_FALL_F);
			m_aGangBone[num].Paint(g);
			num ++;
			x = x + w1;
			m_aGangBone[num].setRefPixelPosition(x, y);
			m_aGangBone[num].setState(Bone.BASE_FALL_F);
			m_aGangBone[num].Paint(g);
			num ++;
			x = x + w1;
		}
		
		//顯示暗杠
		num = 0;
		while( num < m_nAnGang )
		{//四張牌為一組,中間的牌羅起來
			m_aAnGangBone[num].setRefPixelPosition(x, y);
			m_aAnGangBone[num].setState(Bone.BASE_FALL_B);
			m_aAnGangBone[num].Paint(g);
			num ++;
			x = x + w1;
			m_aAnGangBone[num].setRefPixelPosition(x, y);
			m_aAnGangBone[num].setState(Bone.BASE_FALL_B);
			m_aAnGangBone[num].Paint(g);
			num ++;
			m_aAnGangBone[num].setRefPixelPosition(x, y - h);
			if( m_bPlayer || bHu )
				m_aAnGangBone[num].setState(Bone.BASE_FALL_F);
			else
				m_aAnGangBone[num].setState(Bone.BASE_FALL_B);
			m_aAnGangBone[num].Paint(g);
			num ++;
			x = x + w1;
			m_aAnGangBone[num].setRefPixelPosition(x, y);
			m_aAnGangBone[num].setState(Bone.BASE_FALL_B);
			m_aAnGangBone[num].Paint(g);
			num ++;
			x = x + w1;
		}
		
		//顯示吃牌
		num = 0;
		while( num < m_nChi )
		{//三張牌為一組
			m_aChiBone[num].setRefPixelPosition(x, y);
			m_aChiBone[num].setState(Bone.BASE_FALL_F);
			m_aChiBone[num].Paint(g);
			num ++;
			x = x + w1;
			m_aChiBone[num].setRefPixelPosition(x, y);
			m_aChiBone[num].setState(Bone.BASE_FALL_F);
			m_aChiBone[num].Paint(g);
			num ++;
			x = x + w1;
			m_aChiBone[num].setRefPixelPosition(x, y);
			m_aChiBone[num].setState(Bone.BASE_FALL_F);
			m_aChiBone[num].Paint(g);
			num ++;
			x = x + w1;
		}
		
		//顯示碰牌
		num = 0;
		while( num < m_nPeng )
		{//三張牌為一組
			m_aPengBone[num].setRefPixelPosition(x, y);
			m_aPengBone[num].setState(Bone.BASE_FALL_F);
			m_aPengBone[num].Paint(g);
			num ++;
			x = x + w1;
			m_aPengBone[num].setRefPixelPosition(x, y);
			m_aPengBone[num].setState(Bone.BASE_FALL_F);
			m_aPengBone[num].Paint(g);
			num ++;
			x = x + w1;
			m_aPengBone[num].setRefPixelPosition(x, y);
			m_aPengBone[num].setState(Bone.BASE_FALL_F);
			m_aPengBone[num].Paint(g);
			num ++;
			x = x + w1;
		}
		
		//顯示手中的牌
		x = x + w2;	//手中的牌與前面的牌稍微錯開點距離
		
		//當前選擇的手中吃牌的索引
		int chi1 = m_aChiIndex[m_nChiIndex];
		int chi2 = m_aChiIndex[m_nChiIndex+1];
		
		for( int n = 0; n < m_nHand; n ++ ){
			m_aHandBone[n].setRefPixelPosition(x, y);
			if( bHu )				//胡了,都翻轉過來
				m_aHandBone[n].setState(Bone.BASE_FALL_F);
			else if( m_bPlayer )	//玩家的牌正面朝屏幕
				m_aHandBone[n].setState(Bone.BASE_FRONT);
			else					//電腦的背正面朝屏幕
				m_aHandBone[n].setState(Bone.BASE_BACK);
			m_aHandBone[n].Paint(g);
			if( bChi )
			{//正在選擇吃牌方法
				if( n == chi1 || n == chi2 )
				{	
					g.drawImage(m_ArrowImg, x-arrDisX, y-arrDisY, 0);
				}
			}
			if( bSelect && m_nSelectIndex == n )
			{//正在選擇所出的牌
				g.drawImage(m_ArrowImg, x-arrDisX, y-arrDisY, 0);
			}
			x = x + w1;
		}
		
		//顯示摸到的牌
		if( m_HoldBone != null ){
			if( m_bPlayer ){
				x = scrWidth - 7;
				y = m_nY - 23;
			}
			else{
				x = 7;
				y = m_nY + 18;
			}
			m_HoldBone.setRefPixelPosition(x, y);
			if( bHu )				//胡了,都翻轉過來
				m_HoldBone.setState(Bone.BASE_FALL_F);
			else if( m_bPlayer )
				m_HoldBone.setState(Bone.BASE_FRONT);
			else
				m_HoldBone.setState(Bone.BASE_BACK);
			m_HoldBone.Paint(g);
			if( bSelect && m_nSelectIndex == m_nHand )
			{//正在選擇所出的牌
				g.drawImage(m_ArrowImg, x-arrDisX, y-arrDisY, 0);
			}
		}
	} 
	//電腦出牌
	public Bone ComOutBone(){
		//將指定的牌與手中的牌組成新的數組
		Bone atemp[] = new Bone[m_nHand + 1];
		for( int n = 0; n < m_nHand; n++ ){
			atemp[n] = m_aHandBone[n];
		}
		atemp[m_nHand] = m_HoldBone;
		//Divide中會不斷地拆分atemp中的牌,如果能拆出胡牌的結構則返回null
		Bone bone = Divide( atemp, false );
		
		for( int n = 0; n <= m_nHand; n ++ ){
			if( atemp[n] == bone ){
				if( n == m_nHand )
					m_HoldBone = null;
				else{
					m_aHandBone[n] = m_HoldBone;
					m_HoldBone = null;
				}
			}
		}
		return bone;
	}
	//按麻將規則拆分存儲牌的數組
	//返回無法組合的牌,如果組成胡牌的結構則返回null
	//參數bDouble為true表示已拆除的牌中存在將牌
	public Bone Divide( Bone abone[], boolean bDouble )
	{
		/*
		if( abone.length == 3 && bDouble == false )
		{//剩下三張牌了,還沒有“將”,則肯定不能胡
			return abone[0];
		}
		if( abone.length == 2 && bDouble == true )
		{//剩兩張牌,但是已經有“將”了,則也肯定不能胡
			return abone[0];
		}
		if( abone.length == 1 )
		{//拆得剩1張牌了,肯定也不能胡了
			return abone[0];
		}
		if( abone.length == 0 )
		{//理論上不會有這種情況
			System.out.print("Dividie...Line16");
			return null;
		}*/
			
		int word 	= abone[0].getWord();
		int value 	= abone[0].getValue();
		
		
		int aShun[]	= new int[5];		//與第一張牌能組成順子的牌
		int aSame[]	= new int[3];		//與第一張牌能組成“碰”的牌
		int nSameNum = 0;
		for( int n = 0; n < aShun.length; n ++ )
		{
			aShun[n] = -1;
			if( n < 3 )
				aSame[n] = -1;
		}
		
		//找出與第一張牌能組成“碰”的牌及組成順子的牌
		for( int n = 1; n < abone.length; n ++ )
		{
			if( abone[n].getWord() == word )
			{
				if( abone[n].getValue() == value )
				{//如果牌的值相同
					aSame[nSameNum] = n;
					nSameNum ++;
				}
				else if( word != Bone.WORD_ZI )
				{//如果能組成順子
					int index = abone[n].getValue() - value;
					if( index >= -2 && index <= 2 )
					{
						aShun[index+2] = n;
					}
				}
			}
		}
				
		Bone retBone = abone[0];
		
				
		if( nSameNum >= 2 )
		{//拆除abone中與第一張組成“碰”的牌
			if( abone.length == 3 )
			{//剛好剩三張一樣的牌
				aShun = null;
				aSame = null;
				return null;
			}
			Bone atemp[] = new Bone[abone.length - 3];
			int num = 0;
			for( int n = 1; n < abone.length; n ++ )
			{
				if( n != aSame[0] && n != aSame[1] )
				{
					atemp[num] = abone[n];
					num ++;
				}
			}
			//繼續拆分剩余的牌
			Bone bone = Divide(atemp, bDouble);
			if( bone == null )		//能胡牌,直接返回
			{
				atemp = null;
				aShun = null;
				aSame = null;
				return null;
			}
			retBone = bone;
				
		}
		
		if( aShun[0] != -1 && aShun[1] != -1 )
		{//拆除abone中與第一張組成第一種順子的牌,如第一張為五萬,其他兩張為三萬和四萬
			if( abone.length == 3 )
			{//剛好剩三張順的牌
				aShun = null;
				aSame = null;
				return null;
			}
			Bone atemp[] = new Bone[abone.length - 3];
			int num = 0;
			for( int n = 1; n < abone.length; n ++ )
			{
				if( n != aShun[0] && n != aShun[1] )
				{
					atemp[num] = abone[n];
					num ++;
				}
			}
			//繼續拆分剩余的牌
			Bone bone = Divide(atemp, bDouble);
			if( bone == null )		//能胡牌,直接返回
			{
				atemp = null;
				aShun = null;
				aSame = null;
				return null;
			}
			retBone = bone;
		}

		if( aShun[1] != -1 && aShun[3] != -1 )
		{//拆除abone中與第一張組成第二種順子的牌,如第一張為五萬,其他兩張為四萬和六萬
			if( abone.length == 3 )
			{//剛好剩三張順的牌
				aShun = null;
				aSame = null;
				return null;
			}
			Bone atemp[] = new Bone[abone.length - 3];
			int num = 0;
			for( int n = 1; n < abone.length; n ++ )
			{
				if( n != aShun[1] && n != aShun[3] )
				{
					atemp[num] = abone[n];
					num ++;
				}
			}
			//繼續拆分剩余的牌
			Bone bone = Divide(atemp, bDouble);
			if( bone == null )		//能胡牌,直接返回
			{
				atemp = null;
				aShun = null;
				aSame = null;
				return null;
			}
			retBone = bone;
		}

		if( aShun[3] != -1 && aShun[4] != -1 )
		{//拆除abone中與第一張組成第三種順子的牌,如第一張為五萬,其他兩張為六萬和七萬
			if( abone.length == 3 )
			{//剛好剩三張順的牌
				aShun = null;
				aSame = null;
				return null;
			}
			Bone atemp[] = new Bone[abone.length - 3];
			int num = 0;
			for( int n = 1; n < abone.length; n ++ )
			{
				if( n != aShun[3] && n != aShun[4] )
				{
					atemp[num] = abone[n];
					num ++;
				}
			}
			//繼續拆分剩余的牌
			Bone bone = Divide(atemp, bDouble);
			if( bone == null )		//能胡牌,直接返回
			{
				atemp = null;
				aShun = null;
				aSame = null;
				return null;
			}
			retBone = bone;
		}
		if(  nSameNum >= 1 && bDouble == false )
		{//拆除abone中與第一張組成“將”的牌
			if( abone.length == 2 )
			{//剛好剩兩張一樣的牌
				aShun = null;
				aSame = null;
				return null;
			}
			Bone atemp[] = new Bone[abone.length - 2];
			int num = 0;
			for( int n = 1; n < abone.length; n ++ )
			{
				if( n != aSame[0] )
				{
					atemp[num] = abone[n];
					num ++;
				}
			}
			Bone bone = Divide(atemp, true);
			if( bone == null )		//能胡牌,直接返回
			{
				atemp = null;
				aShun = null;
				aSame = null;
				return null;
			}
			retBone = bone;
		}
		
		aShun = null;
		aSame = null;
		//返回不能組合的牌
		return retBone;
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美性色aⅴ视频一区日韩精品| 精品人伦一区二区色婷婷| av不卡免费电影| 岛国一区二区三区| 精品一区精品二区高清| 国产制服丝袜一区| 丁香桃色午夜亚洲一区二区三区| 国产一区二区三区四区在线观看| 国产精品一区三区| 成人永久看片免费视频天堂| 成人免费精品视频| 欧美一级一级性生活免费录像| 91久久精品一区二区三区| 91视频在线观看| 精品污污网站免费看| 欧美视频在线不卡| 日韩免费高清av| 国产亚洲欧美日韩日本| 1区2区3区国产精品| 亚洲在线一区二区三区| 奇米精品一区二区三区四区| 国产伦精品一区二区三区视频青涩 | 亚洲精品美腿丝袜| 夜夜嗨av一区二区三区中文字幕| 亚洲成人一区在线| 久草精品在线观看| av资源站一区| 欧美日韩一区二区三区四区五区| 欧美一区二区人人喊爽| 久久综合久久综合久久| 国产精品电影院| 午夜影视日本亚洲欧洲精品| 免费xxxx性欧美18vr| 国产传媒日韩欧美成人| 在线视频国产一区| 欧美成人高清电影在线| 国产精品福利一区二区| 亚洲不卡av一区二区三区| 奇米一区二区三区| 福利视频网站一区二区三区| 91丨porny丨首页| 日韩一区二区三区四区| 国产精品无遮挡| 亚洲成a人片综合在线| 久久精品国内一区二区三区| av中文字幕一区| 欧美一区二区黄| 国产精品国产三级国产| 日韩成人一区二区| 成人av网址在线观看| 欧美放荡的少妇| 国产欧美日韩不卡| 日韩国产欧美一区二区三区| 成人福利视频在线看| 91精品国产一区二区三区| 国产精品久久久一区麻豆最新章节| 亚洲福利一区二区| 风间由美一区二区av101| 欧美片网站yy| 亚洲天堂网中文字| 激情久久五月天| 欧美午夜视频网站| 国产精品乱人伦中文| 男女视频一区二区| 欧洲日韩一区二区三区| 日本一区免费视频| 另类小说图片综合网| 99精品一区二区三区| 久久综合久久综合久久| 国产乱一区二区| 欧美区视频在线观看| 中文字幕在线一区免费| 久久99热国产| 欧美日韩黄色影视| 亚洲精品国产一区二区精华液| 国产精品影视天天线| 欧美一区二区在线视频| 亚洲少妇30p| 粉嫩aⅴ一区二区三区四区| 日韩一级片在线观看| 亚洲精品高清在线观看| 成人动漫在线一区| 精品sm捆绑视频| 免费日韩伦理电影| 欧美日韩国产大片| 一区二区三区免费看视频| eeuss影院一区二区三区| 久久久久久一级片| 精品一区二区三区久久| 欧美一区二区在线免费播放| 亚洲v日本v欧美v久久精品| 99精品视频中文字幕| 国产精品久久久久四虎| 国产精品一区二区黑丝| 精品成人在线观看| 久久成人av少妇免费| 在线电影国产精品| 日韩电影免费在线| 91精品久久久久久蜜臀| 肉色丝袜一区二区| 91麻豆精品国产综合久久久久久 | 蜜臀av一级做a爰片久久| 欧美日韩大陆一区二区| 亚洲国产成人高清精品| 欧美日韩亚洲综合| 午夜视频在线观看一区| 欧美乱熟臀69xxxxxx| 午夜精彩视频在线观看不卡| 7777精品伊人久久久大香线蕉经典版下载 | 国产农村妇女精品| 成人aa视频在线观看| 国产欧美精品一区二区色综合朱莉| 国产麻豆精品在线| 国产精品美女一区二区在线观看| 风间由美一区二区av101| 国产精品国产a| 91福利国产成人精品照片| 亚洲国产综合91精品麻豆| 欧美日本韩国一区| 麻豆精品久久精品色综合| 亚洲精品在线观看网站| 成人少妇影院yyyy| 亚洲精品美腿丝袜| 在线91免费看| 国产精品99久久久| 亚洲摸摸操操av| 欧美视频你懂的| 精品一区二区日韩| 国产精品久久久久久久久免费相片 | 国产日韩欧美精品综合| av在线不卡电影| 午夜影院久久久| 久久综合色婷婷| 91同城在线观看| 日本vs亚洲vs韩国一区三区二区| 日韩精品一区二区三区四区| 国产成人av一区二区三区在线观看| 日本亚洲视频在线| 久久看人人爽人人| 在线观看成人小视频| 另类小说色综合网站| 成人欧美一区二区三区黑人麻豆| 欧美午夜在线观看| 国产在线国偷精品产拍免费yy| 中文字幕一区av| 欧美一区二区视频免费观看| 成人综合婷婷国产精品久久蜜臀 | 国产一区二区三区精品欧美日韩一区二区三区 | 久久久综合视频| 在线免费av一区| 国产精品一区一区三区| 亚洲伊人色欲综合网| 日韩三区在线观看| 97国产一区二区| 美女一区二区在线观看| 亚洲人精品一区| 日韩欧美一级二级| 色综合咪咪久久| 国产一区二区三区在线观看精品| 一区二区三区高清在线| 日韩精品一区二区三区蜜臀| 色嗨嗨av一区二区三区| 国产在线视频精品一区| 亚洲成人黄色小说| 国产欧美精品一区aⅴ影院| 欧美精品在线观看一区二区| 国产成人精品1024| 美女视频一区二区三区| 亚洲欧美日本在线| 国产欧美在线观看一区| 91精品国产综合久久久久| 色综合咪咪久久| 国产精品亚洲一区二区三区在线 | 91在线视频官网| 国产一区二区伦理| 天堂蜜桃一区二区三区| 综合激情成人伊人| 国产偷国产偷精品高清尤物 | 日韩电影一二三区| 中文字幕一区二区5566日韩| wwwwxxxxx欧美| 欧美老女人第四色| 色网综合在线观看| 波多野结衣亚洲| 国产91精品露脸国语对白| 老司机精品视频线观看86| 亚洲国产视频a| 亚洲美女一区二区三区| 国产精品乱码妇女bbbb| 精品国产一二三| 91精品欧美久久久久久动漫 | 91精品欧美久久久久久动漫| 在线观看av不卡| 99精品黄色片免费大全| 国产精品一级片| 国产精品99久| 韩国av一区二区三区四区| 久久精品国产澳门| 免费观看一级特黄欧美大片| 香蕉av福利精品导航|