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

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

?? sortedmovenodes.java

?? 一個網(wǎng)絡(luò)對弈的中國象棋程序 操作: 1、Setting,選擇對戰(zhàn)方式。如果選擇“網(wǎng)絡(luò)對戰(zhàn)”
?? JAVA
字號:
package org.acerge.engine;
public class SortedMoveNodes {
	public int MoveNum;
	public MoveNode[] MoveList;
	public int[] ValueList;
	public SortedMoveNodes(MoveNode[] MList,int[] VList){
		MoveList=MList;
		ValueList=VList;
	}
	public SortedMoveNodes(){
		MoveList=new MoveNode[ActiveBoard.MAX_MOVE_NUM];
		ValueList=new int[ActiveBoard.MAX_MOVE_NUM];
		for (int i=0;i<ActiveBoard.MAX_MOVE_NUM;i++){
			MoveList[i]=new MoveNode();
			ValueList[i]=0;
		}
	}
	public void GenMoves(final ActiveBoard Position, final int HistTab[][]) {
		MoveNum=0;
		GenKingMoves(Position, HistTab);
		GenAdvisorMoves(Position, HistTab);
		GenBishopMoves(Position, HistTab);
		GenKnightMoves(Position, HistTab);
		GenRookMoves(Position, HistTab);
		GenCannonMoves(Position, HistTab);
		GenPawnMoves(Position, HistTab);
	}

	//Sort Procedures

	//"1, 4, 13, 40 ..." is better than "1, 2, 4, 8, ..."
	public static final int[] ShellStep = {0, 1, 4, 13, 40, 121, 364, 1093};
	public final int[] MvvValues = {//int 48
		//被攻擊者的損失:帥仕相馬車炮兵
		-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
		0, 4, 4, 4, 4, 8, 8, 12, 12, 8, 8, 4, 4, 4, 4, 4,
		0, 4, 4, 4, 4, 8, 8, 12, 12, 8, 8, 4, 4, 4, 4, 4
	};

	public void ShellSort() {
		int Step, StepIndex;
		int i, j, BestValue;
		MoveNode BestMove;
		StepIndex = 1;
		do {
			StepIndex ++;
		} while (ShellStep[StepIndex] < MoveNum);
		StepIndex --;
		while (StepIndex!=0) {
			Step = ShellStep[StepIndex];
			for (i = Step; i < MoveNum; i ++) {
				BestMove = MoveList[i];
				BestValue = ValueList[i];
				j = i - Step;
				while (j >= 0 && BestValue > ValueList[j]) {
					MoveList[j + Step] = MoveList[j];
					ValueList[j + Step] = ValueList[j];
					j -= Step;
				}
				MoveList[j + Step] = BestMove;
				ValueList[j + Step] = BestValue;
			}
			StepIndex --;
		}
	} 

	public void BubbleSortMax(int Index) {
		int i, TempValue;
		MoveNode TempMove;
		for (i = MoveNum - 1; i > Index; i --) {
			if (ValueList[i - 1] < ValueList[i]) {
				TempMove = MoveList[i - 1];
				MoveList[i - 1] = MoveList[i];
				MoveList[i] = TempMove;
				TempValue = ValueList[i - 1];
				ValueList[i - 1] = ValueList[i];
				ValueList[i] = TempValue;
			}
		}
	}

	//Move Generation Procedures, including MVV/LVA (for Caps) and History (for All) Heuristic
	
	public void GenKingMoves(final ActiveBoard Position, final int HistTab[][]) {
		int SrcSq, DstSq, Attack, AttTag;
		int[] DstArr=new int[8];
		int indexDst=0;
		int listIndex=MoveNum;
		AttTag = Position.getPlayer()!=0 ? 16 : 32;
		SrcSq = Position.getPieces(48 - AttTag);
		if (SrcSq != -1) {
			copyArray(DstArr, PreMoveNodesGen.KingMoves[SrcSq], 8);
			indexDst=0;
			DstSq = DstArr[indexDst]; 
			while (DstSq != -1) {
				Attack = Position.getSquares(DstSq);
				if ((Attack & AttTag)!=0) {//吃子
					MoveList[listIndex].src =SrcSq;
					MoveList[listIndex].dst =DstSq;
					if (HistTab == null) {
						ValueList[listIndex] = MvvValues[Attack]; // King = 3
					} else {
						ValueList[listIndex] = HistTab[SrcSq][DstSq];
					}
					listIndex++;
				} else if (HistTab != null && Attack==0) {
					MoveList[listIndex].src =SrcSq;
					MoveList[listIndex].dst =DstSq;
					ValueList[listIndex] = HistTab[SrcSq][DstSq];
					listIndex++;
				}
				indexDst++;
				DstSq = DstArr[indexDst];
			}
		}
		MoveNum = listIndex;//MovePtr - MoveList;
	}

	public void GenAdvisorMoves(final ActiveBoard Position, final int HistTab[][]) {
		int i, SrcSq, DstSq, Attack, AttTag;
		int DstArr[]=new int[8];
		int indexDst=0;
		int listIndex=MoveNum;
		AttTag = Position.getPlayer()!=0 ? 16 : 32;
		for (i = 1; i <= 2; i ++) {
			SrcSq = Position.getPieces(48 - AttTag + i);
			if (SrcSq != -1) {
				copyArray(DstArr, PreMoveNodesGen.AdvisorMoves[SrcSq], 8);
				indexDst=0;
				DstSq = DstArr[indexDst];
				while (DstSq != -1) {
					Attack = Position.getSquares(DstSq);
					if ((Attack & AttTag)!=0) {
						MoveList[listIndex].src =SrcSq;
						MoveList[listIndex].dst =DstSq;
						if (HistTab == null) {
							ValueList[listIndex] = MvvValues[Attack] + 3; // Advisor = 0;
						} else {
							ValueList[listIndex] = HistTab[SrcSq][DstSq];
						}
						listIndex ++;
					} else if (HistTab != null && Attack==0) {
						MoveList[listIndex].src =SrcSq;
						MoveList[listIndex].dst =DstSq;						
						ValueList[listIndex] = HistTab[SrcSq][DstSq];
						listIndex++;
					}
					indexDst++;
					DstSq = DstArr[indexDst];
				}
			}
		}
		MoveNum = listIndex;
	}

	public void GenBishopMoves(final ActiveBoard Position, final int HistTab[][]) {
		int i, SrcSq, DstSq, Attack, AttTag;
		int DstArr[]=new int[8], EyeArr[]=new int[4];
		int indexDst=0;
		int indexEye=0;
		int listIndex=MoveNum;
		AttTag = Position.getPlayer()!=0 ? 16 : 32;
		for (i = 3; i <= 4; i ++) {
			SrcSq = Position.getPieces(48 - AttTag + i);
			if (SrcSq != -1) {
				copyArray(DstArr, PreMoveNodesGen.BishopMoves[SrcSq], 8);
				copyArray(EyeArr, PreMoveNodesGen.ElephantEyes[SrcSq], 4);
				indexDst=0;
				indexEye=0;
				DstSq = DstArr[indexDst];
				while (DstSq != -1) {
					Attack = Position.getSquares(DstSq);
					if ((Attack & AttTag)!=0) {
						if (Position.getSquares(EyeArr[indexEye])==0) {
							MoveList[listIndex].src =SrcSq;
							MoveList[listIndex].dst =DstSq;
							if (HistTab == null) {
								ValueList[listIndex] = MvvValues[Attack] + 3; // Bishop = 0;
							} else {
								ValueList[listIndex] = HistTab[SrcSq][DstSq];
							}
							listIndex++;
						}
					} else if (HistTab != null && Attack==0) {
						if (Position.getSquares(EyeArr[indexEye])==0) {
							MoveList[listIndex].src =SrcSq;
							MoveList[listIndex].dst =DstSq;
							ValueList[listIndex] = HistTab[SrcSq][DstSq];
							listIndex++;
						}
					}
					indexDst++;
					DstSq = DstArr[indexDst];
					indexEye++;
				}
			}
		}
		MoveNum=listIndex;
	}

	public void GenKnightMoves(final ActiveBoard Position, final int HistTab[][]) {
		int i, SrcSq, DstSq, Attack, AttTag;
		int[] DstArr=new int[12], LegArr=new int[8];
		int indexDst=0;
		int indexLeg=0;
		int listIndex=MoveNum;
		AttTag = Position.getPlayer()!=0 ? 16 : 32;
		for (i = 5; i <= 6; i ++) {
			SrcSq = Position.getPieces(48 - AttTag + i);			
			if (SrcSq != -1) {
				copyArray(DstArr, PreMoveNodesGen.KnightMoves[SrcSq], 12);
				copyArray(LegArr, PreMoveNodesGen.HorseLegs[SrcSq], 8);
				indexLeg = 0;
				indexDst = 0;
				DstSq = DstArr[indexDst];
				while (DstSq != -1) {
					Attack = Position.getSquares(DstSq);
					if ((Attack & AttTag)!=0) {
						if (Position.getSquares(LegArr[indexLeg])==0) {
							MoveList[listIndex].src =SrcSq;
							MoveList[listIndex].dst =DstSq;
							if (HistTab == null) {
								ValueList[listIndex] = MvvValues[Attack] + 2; // Knight = 1;
							} else {
								ValueList[listIndex] = HistTab[SrcSq][DstSq];
							}
							listIndex++;
						}
					} else if (HistTab != null && Attack==0) {
						if (Position.getSquares(LegArr[indexLeg])==0) {
							MoveList[listIndex].src =SrcSq;
							MoveList[listIndex].dst =DstSq;
							ValueList[listIndex] = HistTab[SrcSq][DstSq];
							listIndex++;
						}
					}
					indexDst ++;
					DstSq = DstArr[indexDst];
					indexLeg++;
				}
			}
		}
		MoveNum = listIndex;
	}

	public void GenRookMoves(final ActiveBoard Position, final int HistTab[][]) {
		int i, SrcSq, DstSq, Attack, AttTag;
		int x, y, Shift, BitWord;
		int[] DstArr=new int[12];
		int indexDst=0;
		int listIndex=MoveNum;
		AttTag = Position.getPlayer()!=0 ? 16 : 32;
		for (i = 7; i <= 8; i ++) {
			SrcSq = Position.getPieces(48 - AttTag + i);
			if (SrcSq != -1) {
				x = ActiveBoard.FILE[SrcSq];
				y = ActiveBoard.RANK[SrcSq];
				Shift = ActiveBoard.BOTTOM[x];
				BitWord = Position.getBitFiles(x);
				copyArray(DstArr, PreMoveNodesGen.FileRookCapMoves[y][BitWord], 4);
				indexDst = 0;
				DstSq = DstArr[indexDst];
				while (DstSq != -1) {
					DstSq += Shift;
					Attack = Position.getSquares(DstSq);
					if ((Attack & AttTag)!=0) {
						MoveList[listIndex].src =SrcSq;
						MoveList[listIndex].dst =DstSq;
						if (HistTab == null) {
							ValueList[listIndex] = MvvValues[Attack] + 1; // Rook = 2
						} else {
							ValueList[listIndex] = HistTab[SrcSq][DstSq];
						}
						listIndex++;
					}
					indexDst++;
					DstSq = DstArr[indexDst];
				}
				if (HistTab != null) {
					copyArray(DstArr, PreMoveNodesGen.FileNonCapMoves[y][BitWord], 12);
					indexDst=0;
					DstSq = DstArr[indexDst];
					while (DstSq != -1) {
						DstSq += Shift;
						MoveList[listIndex].src =SrcSq;
						MoveList[listIndex].dst =DstSq;
						ValueList[listIndex] = HistTab[SrcSq][DstSq];
						listIndex++;
						indexDst++;
						DstSq = DstArr[indexDst];
					}
				}
				Shift = y;
				BitWord = Position.getBitRanks(y);
				copyArray(DstArr, PreMoveNodesGen.RankRookCapMoves[x][BitWord], 4);
				indexDst=0;
				DstSq = DstArr[indexDst];
				
				while (DstSq != -1) {
					DstSq += Shift;
					Attack = Position.getSquares(DstSq);
					if ((Attack & AttTag)!=0) {
						MoveList[listIndex].src =SrcSq;
						MoveList[listIndex].dst =DstSq;
						if (HistTab == null) {
							ValueList[listIndex] = MvvValues[Attack] + 1; // Rook = 2;
						} else {
							ValueList[listIndex] = HistTab[SrcSq][DstSq];
						}
						listIndex ++;
					}
					indexDst ++;
					DstSq = DstArr[indexDst];
				}
				if (HistTab != null) {
					copyArray(DstArr, PreMoveNodesGen.RankNonCapMoves[x][BitWord], 12);
					indexDst = 0;
					DstSq = DstArr[indexDst];
					while (DstSq != -1) {
						DstSq += Shift;
						MoveList[listIndex].src =SrcSq;
						MoveList[listIndex].dst =DstSq;
						ValueList[listIndex] = HistTab[SrcSq][DstSq];
						listIndex++;
						indexDst ++;
						DstSq = DstArr[indexDst];
					}
				}
			}
		}
		MoveNum = listIndex;
	}

	public void GenCannonMoves(final ActiveBoard Position, final int HistTab[][]) {
		int i, SrcSq, DstSq, Attack, AttTag;
		int x, y, Shift, BitWord;
		int DstArr[]=new int[12];
		int indexDst=0;
		int listIndex=MoveNum;
		AttTag = Position.getPlayer()!=0 ? 16 : 32;
		for (i = 9; i <= 10; i ++) {
			SrcSq = Position.getPieces(48 - AttTag + i);
			if (SrcSq != -1) {
				x = ActiveBoard.FILE[SrcSq];
				y = ActiveBoard.RANK[SrcSq];
				Shift = ActiveBoard.BOTTOM[x];
				BitWord = Position.getBitFiles(x);
				copyArray(DstArr, PreMoveNodesGen.FileCannonCapMoves[y][BitWord], 4);
				indexDst = 0;
				DstSq = DstArr[indexDst];
				while (DstSq != -1) {
					DstSq += Shift;
					Attack = Position.getSquares(DstSq);
					if ((Attack & AttTag)!=0) {
						MoveList[listIndex].src =SrcSq;
						MoveList[listIndex].dst =DstSq;
						if (HistTab == null) {
							ValueList[listIndex] = MvvValues[Attack] + 2; // Cannon = 1
						} else {
							ValueList[listIndex] = HistTab[SrcSq][DstSq];
						}
						listIndex++;
					}
					indexDst ++;
					DstSq = DstArr[indexDst];
				}
				if (HistTab != null) {
					copyArray(DstArr, PreMoveNodesGen.FileNonCapMoves[y][BitWord], 12);
					indexDst = 0;
					DstSq = DstArr[indexDst];
					while (DstSq != -1) {
						DstSq += Shift;
						MoveList[listIndex].src =SrcSq;
						MoveList[listIndex].dst =DstSq;
						ValueList[listIndex] = HistTab[SrcSq][DstSq];
						listIndex ++;
						indexDst ++;
						DstSq = DstArr[indexDst];
					}
				}
				Shift = y;
				BitWord = Position.getBitRanks(y);
				copyArray(DstArr, PreMoveNodesGen.RankCannonCapMoves[x][BitWord], 4);
				indexDst = 0;
				DstSq = DstArr[indexDst];
				while (DstSq != -1) {
					DstSq += Shift;
					Attack = Position.getSquares(DstSq);
					if ((Attack & AttTag)!=0) {
						MoveList[listIndex].src =SrcSq;
						MoveList[listIndex].dst =DstSq;
						if (HistTab == null) {
							ValueList[listIndex] = MvvValues[Attack] + 2; // Cannon = 1
						} else {
							ValueList[listIndex] = HistTab[SrcSq][DstSq];
						}
						listIndex ++;
					}
					indexDst ++;
					DstSq = DstArr[indexDst];
				}
				if (HistTab != null) {
					copyArray(DstArr, PreMoveNodesGen.RankNonCapMoves[x][BitWord], 12);
					indexDst = 0;
					DstSq = DstArr[indexDst];
					while (DstSq != -1) {
						DstSq += Shift;
						MoveList[listIndex].src =SrcSq;
						MoveList[listIndex].dst =DstSq;
						ValueList[listIndex] = HistTab[SrcSq][DstSq];
						listIndex ++;
						indexDst ++;
						DstSq = DstArr[indexDst];
					}
				}
			}
		}
		MoveNum = listIndex;
	}

	public void GenPawnMoves(final ActiveBoard Position, final int HistTab[][]) {
		int i, SrcSq, DstSq, Attack, AttTag;
		int DstArr[]=new int[4];
		int indexDst=0;
		int listIndex=MoveNum;
		AttTag = Position.getPlayer()!=0 ? 16 : 32;

		for (i = 11; i <= 15; i ++) {
			SrcSq = Position.getPieces(48 - AttTag + i);
			if (SrcSq != -1) {
				copyArray(DstArr, PreMoveNodesGen.PawnMoves[SrcSq][Position.getPlayer()], 4);
				indexDst = 0;
				DstSq = DstArr[indexDst];
				while (DstSq != -1) {
					Attack = Position.getSquares(DstSq);
					if ((Attack & AttTag)!=0) {
						MoveList[listIndex].src =SrcSq;
						MoveList[listIndex].dst =DstSq;
						if (HistTab == null) {
							ValueList[listIndex] = MvvValues[Attack] + 3; // Pawn = 0
						} else {
							ValueList[listIndex] = HistTab[SrcSq][DstSq];
						}
						listIndex ++;
					} else if (HistTab != null && Attack==0) {
						MoveList[listIndex].src =SrcSq;
						MoveList[listIndex].dst =DstSq;
						ValueList[listIndex] = HistTab[SrcSq][DstSq];
						listIndex++;
					}
					indexDst ++;
					DstSq = DstArr[indexDst];
				}
			}
		}
		MoveNum = listIndex;
	}
	private void copyArray(int[] DstArr,final int[] SrcArr,int len){
		for (int i=0;i<len;i++){
			DstArr[i]=SrcArr[i];
		}
		for (int i=len;i<DstArr.length;i++){
			DstArr[i]= -1;
		}
	}
	//for test
	public String toString(){
		String tmpStr="";
		for (int i=0;i<MoveNum;i++){
			tmpStr = tmpStr + "["+ MoveList[i]+"]";
			if ((i+1)%8==0) tmpStr+="\n";
		}
		return tmpStr;
	}
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品美女一区二区三区| 91黄色免费看| 久久久精品国产免大香伊| 国产在线精品不卡| 久久综合av免费| 国产999精品久久久久久| 欧美国产欧美亚州国产日韩mv天天看完整| 精品一区二区久久久| 久久夜色精品国产噜噜av| 福利91精品一区二区三区| 亚洲欧美偷拍另类a∨色屁股| 日本乱码高清不卡字幕| 日韩中文字幕不卡| 久久亚洲二区三区| 99久久精品免费观看| 午夜视黄欧洲亚洲| 久久精子c满五个校花| 一本色道**综合亚洲精品蜜桃冫 | 国产99久久久久久免费看农村| 国产精品毛片大码女人| 欧美在线你懂得| 国精产品一区一区三区mba桃花| 欧美经典一区二区| 欧美视频在线观看一区| 日本一不卡视频| 国产精品国产三级国产aⅴ中文| 欧美在线视频你懂得| 经典三级一区二区| 亚洲色图.com| 精品国产污网站| 99精品视频中文字幕| 美女高潮久久久| 亚洲四区在线观看| 精品国产乱码久久久久久久久| gogogo免费视频观看亚洲一| 日韩av不卡一区二区| 国产精品久久777777| 日韩欧美国产1| 在线视频欧美精品| 成人久久久精品乱码一区二区三区| 一区二区视频在线看| 日韩欧美国产一区二区三区| 在线精品视频一区二区| 国产成人福利片| 首页亚洲欧美制服丝腿| 国产精品久久久久影院老司| 欧美一级一区二区| 91美女视频网站| 成人免费视频网站在线观看| 久久精品国产亚洲5555| 亚洲一线二线三线久久久| 久久综合国产精品| 日韩视频免费观看高清完整版| 色8久久精品久久久久久蜜 | 丝袜a∨在线一区二区三区不卡| 国产日产欧美一区二区三区| 日韩一区二区三区观看| 欧美又粗又大又爽| 成人av在线电影| 国产精品一区专区| 狠狠久久亚洲欧美| 蜜桃视频一区二区三区| 亚洲图片自拍偷拍| 亚洲精品美腿丝袜| 亚洲视频狠狠干| 国产精品久久精品日日| 亚洲国产精品二十页| 久久久亚洲午夜电影| 精品国产凹凸成av人导航| 日韩欧美在线不卡| 制服丝袜亚洲精品中文字幕| 欧美三级欧美一级| 欧美精品一二三| 日韩网站在线看片你懂的| 91精品国产一区二区人妖| 欧美一区三区四区| 日韩一区二区三区免费看| 欧美不卡一区二区三区| 日韩欧美一区二区视频| 亚洲精品一区二区三区福利 | 久久久久久麻豆| 欧美va亚洲va在线观看蝴蝶网| 日韩一区二区三区视频在线观看| 欧美一区二区三区免费视频| 日韩欧美中文字幕一区| 日韩美女在线视频| 国产调教视频一区| 欧美高清一级片在线观看| 中文字幕一区二区三区在线播放| 综合分类小说区另类春色亚洲小说欧美| 中文字幕一区二区三区av| 亚洲欧美日韩在线| 亚洲v日本v欧美v久久精品| 日韩制服丝袜先锋影音| 久久电影网站中文字幕| 国产一区二区不卡| 国产精华液一区二区三区| 成人视屏免费看| 色成人在线视频| 欧美一级理论性理论a| 亚洲免费毛片网站| 亚洲精品福利视频网站| 亚洲一区二区美女| 久久se这里有精品| 99精品视频在线观看免费| 欧美日韩综合一区| 久久香蕉国产线看观看99| 中文字幕高清不卡| 午夜精品久久久久久久久| 国产最新精品免费| 在线免费精品视频| 欧美一级在线免费| 1024精品合集| 日韩高清欧美激情| 成人手机电影网| 91精品久久久久久久99蜜桃| 国产日韩精品一区| 亚洲444eee在线观看| 国产乱子伦视频一区二区三区 | 国产精品一区二区三区99| 色综合久久88色综合天天免费| 91精品婷婷国产综合久久性色| 久久九九久久九九| 三级成人在线视频| 成人a级免费电影| 日韩精品中文字幕一区二区三区| 欧美激情综合五月色丁香 | 欧美电影影音先锋| 国产精品免费视频网站| 日韩精品高清不卡| 色哟哟日韩精品| 国产日韩欧美激情| 日日夜夜免费精品| 成人v精品蜜桃久久一区| 日韩亚洲欧美成人一区| 亚洲精品一二三| 国产精品白丝jk黑袜喷水| 欧美老年两性高潮| 中文字幕在线不卡| 国产黄色成人av| 欧美大肚乱孕交hd孕妇| 亚洲aaa精品| 欧美专区亚洲专区| 中文字幕一区三区| 成人免费看黄yyy456| 欧美一区二区视频在线观看2020 | 懂色中文一区二区在线播放| 8v天堂国产在线一区二区| 亚洲午夜免费电影| 97成人超碰视| 亚洲国产激情av| 国产麻豆成人精品| 精品久久久久香蕉网| 蜜桃av一区二区三区| 91精品国产欧美一区二区| 亚洲国产欧美在线人成| 在线观看亚洲精品| 亚洲视频一区二区在线| 不卡视频一二三四| 中文字幕一区二区三区在线不卡 | 天涯成人国产亚洲精品一区av| av高清久久久| 久久久综合精品| 99国产精品国产精品久久| 国产午夜一区二区三区| 精品在线观看视频| 欧美电影免费观看高清完整版在| 日韩精品乱码免费| 欧美精品亚洲一区二区在线播放| 亚洲成年人影院| 欧美一级片在线观看| 欧美一卡在线观看| 欧美日韩三级在线| 国产精品资源网| 欧美性淫爽ww久久久久无| 日韩精品一区国产麻豆| 精品一区二区三区在线播放| 精品三级在线观看| 国产一区欧美日韩| 欧美激情在线免费观看| 国产91丝袜在线观看| 国产精品久久久久久妇女6080| 95精品视频在线| 亚洲综合色区另类av| 欧美高清精品3d| 国产乱码字幕精品高清av| 国产精品国产三级国产普通话蜜臀 | 一本大道久久a久久精品综合| 亚洲女人****多毛耸耸8| 欧美日韩国产天堂| 久久91精品久久久久久秒播| 国产欧美中文在线| 色94色欧美sute亚洲线路一久| 午夜国产不卡在线观看视频| 日韩精品一区二区三区在线播放| 国产精一品亚洲二区在线视频| 亚洲视频免费看| 日韩视频一区二区三区在线播放| 国产成人免费视| 亚洲午夜精品17c|