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

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

?? activeboard.java

?? 一個(gè)網(wǎng)絡(luò)對弈的中國象棋程序 操作: 1、Setting,選擇對戰(zhàn)方式。如果選擇“網(wǎng)絡(luò)對戰(zhàn)”
?? JAVA
?? 第 1 頁 / 共 2 頁
字號:
package org.acerge.engine;

import java.io.Serializable;
import java.util.ArrayList;

public class ActiveBoard implements Serializable{
	//Rank[x],File[x],Bottom[x] 比 x % 10,x / 10,x * 10運(yùn)算快
	public static final int[] RANK = {// File[19]=1,Rank[19]=9;
		0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
		0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
		0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
		0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
		0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
		0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
		0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
		0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
		0, 1, 2, 3, 4, 5, 6, 7, 8, 9
	};

	public static final int FILE[] = {// File[12]=1,Rank[12]=2;
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
		2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
		3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
		4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
		5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
		6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
		7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
		8, 8, 8, 8, 8, 8, 8, 8, 8, 8
	};

	public static final int[] BOTTOM = {
		0, 10, 20, 30, 40, 50, 60, 70, 80
	};

	public static final int[] HORSE_LEG_TABLE = {//int 
		-10,  0,-10,  0,  0,  0,  0,  0,  0, -1,  0,  
		  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,
		  0,  0,  0,  0,  0,  0,  0, -1,  0,  0,  0,
		  1,  0,  0,  0,  0,  0,  0,	10,  0, 10
		//Move.Dst - Move.Src={-21,-19,-12,-8,8,12,19,21}
		//HorseLeg[Dst-Src+21]={-10,-10,-1,1,-1,,1,10,10}:蹩馬腿的增量
		//Legal Move: return Squares[Move.Src + HorseLegTab[Move.Dst - Move.Src + 21]]==0
	};

	public static final int[] PIECE_TYPES = {
		-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
		0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 6, 6, 6,
		7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 13, 13, 13
	};
	public final static int MAX_MOVE_NUM = 256;
	public final static int LOOP_HASH_MASK = 0x3ff;
	public final static int MAX_CONSECUTIVE_MOVES = 200;

	private int player; // 0 = Red(White) and 1 = Black
	private int[] evalue;//int[2]Total Value of Red(0)/Black(1) Pieces
	private int[] squares;//int[90]Piece Indexes of each square, Squares[i] = 0:Unoccupied, 16-31:Red, 32-47 = Black
	private int[] pieces;//int[48]Square Indexes of each piece, -1 = Captured//被吃了
	// Square[x]=y(y: index of PieceTypes in Square[x]),
	// Pieces[y]=x(y is the pieceType, x represent pieceType Y in Square 5),
	// x:index of location in board(0~89)
	private int[] bitFiles;//[9]方便按行位縱線查詢BitFiles[1]表示第1列(b縱線)上的棋子
	private int[] bitRanks;//[10]方便按列位橫線查詢
	private BitBoard[] pieceBits;//[14]分兵種及紅黑的棋子位棋盤
	private BitBoard allPieces;//整個(gè)棋盤

	// Zobrist Key and Lock
	private long zobristKey, zobristLock;
	
	// History MoveNodes,用來作為循環(huán)重復(fù)檢測
	private int moveNum;
	MoveNode[] moveList;//[ChessStruct.MaxMoveNum];
	char[] loopHash;//[LoopHashMask + 1];
	
	public ActiveBoard() {
		int i;
		player = 0;
		evalue = new int[2];
		evalue[0] = evalue[1] = 0;
		squares = new int[90];
		for (i = 0; i < 90; i ++) {
			squares[i] = 0;
		}
		pieces = new int[48];
		for (i = 16; i < 48; i ++) {
			pieces[i] = -1;
		}
		bitFiles = new int[9];
		for (i = 0; i < 9; i ++) {
			bitFiles[i] = 0;
		}
		bitRanks = new int[10];
		for (i = 0; i < 10; i ++) {
			bitRanks[i] = 0;
		}
		pieceBits = new BitBoard[14];
		for (i = 0; i < 14; i ++) {
			pieceBits[i] = new BitBoard(0);
		}
		allPieces = new BitBoard(0);
		zobristKey = zobristLock = 0;
		moveNum = 1;
		moveList = new MoveNode[MAX_MOVE_NUM];
		for (i = 0;i< MAX_MOVE_NUM;i++){
			moveList[i]=new MoveNode();
		}
		loopHash=new char[LOOP_HASH_MASK+1];
		for (i = 0; i < LOOP_HASH_MASK+1; i ++) {
			loopHash[i] = 0;
		}
	}
	private void changeSide() {
		player = 1 - player;
		zobristKey ^= PreMoveNodesGen.ZobristKeyPlayer;
		zobristLock ^= PreMoveNodesGen.ZobristLockPlayer;
	}
	private void clearSquare(int Square) {
		int Piece;
		Piece = squares[Square];
		squares[Square] = 0;
		pieces[Piece] = -1;
		changePiece(Square, Piece);
	}
	private void clearPiece(int Piece) {
		int Square;
		Square = pieces[Piece];
		squares[Square] = 0;
		pieces[Piece] = -1;
		changePiece(Square, Piece);
	}
	private void setPiece(int Square, int Piece) {
		squares[Square] = Piece;
		pieces[Piece] = Square;
		changePiece(Square, Piece, true);
	}
	public void nullMove() {
		MoveNode ThisMove=new MoveNode();
		changeSide();
		ThisMove.src = ThisMove.dst = ThisMove.cap = -1;
		ThisMove.chk = false;
		moveList[moveNum] = ThisMove;
		moveNum ++;
	}
	public void undoNull() {
		moveNum --;
		changeSide();
	}
	// Move Detection Procedures
	public boolean narrowCap(MoveNode Move){
		return narrowCap(Move,false);
	}
	public boolean narrowCap(MoveNode Move, boolean AdvisorBishop){//是否吃子
		int Captured;
		//Move.Dst=00010001 or 00010010:red仕相
		//Move.Dst=00100010 or 00100010:black士象
		//>00010010 or >00100010:其他棋子
		Captured = squares[Move.dst] & 0xf;
		if (Captured > 10) {
			Captured = RANK[Move.dst];
			return (player!=0) ? (Captured >= 5) : (Captured <= 4);
		} else {
			return AdvisorBishop || Captured > 4;
		}
	}
	public MoveNode lastMove(){
		return moveList[moveNum - 1];
	}
	public int evaluation() {
		return evalue[player] - evalue[1 - player];
	}
	private void changePiece(int Square, int Piece){
		changePiece(Square,Piece,false);
	}
	private void changePiece(int Square, int Piece, boolean IsAdd) {
		int x, y, PieceType, Side, Value;
		allPieces.assignXor(PreMoveNodesGen.BitMask[Square]);
		x = FILE[Square];
		y = RANK[Square];
		bitFiles[x] ^= 1 << y;
		bitRanks[y] ^= 1 << x;
		PieceType = PIECE_TYPES[Piece];
		pieceBits[PieceType].assignXor(PreMoveNodesGen.BitMask[Square]);
		zobristKey ^= PreMoveNodesGen.ZobristKeyTable[PieceType][Square];
		zobristLock ^= PreMoveNodesGen.ZobristLockTable[PieceType][Square];
		if (PieceType < 7) {
			Side = 0;
			Value = CCEvalue.BasicValues[PieceType] + CCEvalue.PosValues[PieceType][Square];
		} else {
			Side = 1;
			Value = CCEvalue.BasicValues[PieceType - 7] + CCEvalue.PosValues[PieceType - 7][89 - Square];
		}
		if (IsAdd) {
			evalue[Side] += Value;
		} else {
			evalue[Side] -= Value;
		}
	}
	public boolean movePiece(MoveNode Move){
		int Moved, Captured;
		MoveNode ThisMove;
		long OldZobristKey;
		if (Move.src<0 || Move.dst<0) return false;//add for search function
		OldZobristKey = zobristKey;
		Moved = squares[Move.src];
		Captured = squares[Move.dst];
		if (Captured!=0) {
			clearSquare(Move.dst);
		}
		clearSquare(Move.src);
		setPiece(Move.dst, Moved);
		if (checked(player)) {
			Moved = squares[Move.dst];
			clearSquare(Move.dst);
			setPiece(Move.src, Moved);
			if (Captured!=0) {
				setPiece(Move.dst, Captured);
			}
			return false;
		} else {
			if (loopHash[(int) (OldZobristKey & LOOP_HASH_MASK)]==0) {
				loopHash[(int) (OldZobristKey & LOOP_HASH_MASK)] = (char) moveNum;
			}
			changeSide();
			ThisMove = Move;
			ThisMove.cap = Captured;
			ThisMove.chk = checked(player);
			moveList[moveNum] = ThisMove;
			moveNum ++;
			return true;
		}
	}
	public void undoMove() {
		int Moved;
		MoveNode ThisMove;
		moveNum --;
		ThisMove = moveList[moveNum];
		Moved = squares[ThisMove.dst];
		clearSquare(ThisMove.dst);
		setPiece(ThisMove.src, Moved);
		if (ThisMove.cap!=0) {
			setPiece(ThisMove.dst, ThisMove.cap);
		}
		changeSide();
		if (loopHash[(int) (zobristKey & LOOP_HASH_MASK)] == moveNum) {
			loopHash[(int) (zobristKey & LOOP_HASH_MASK)] = 0;
		}
	}

	//	Leagal Move Detection Procedures
	public boolean leagalMove(MoveNode Move){
		int Piece, Attack, x, y, BitWord;
		Piece = squares[Move.src];
		if ((Piece & (player!=0 ? 32 : 16))==0) {
			return false;//所選的棋子是否是當(dāng)前Player的
		}
		Attack = squares[Move.dst];
		if ((Attack & (player!=0 ? 32 : 16))!=0) {
			return false;//所吃的棋子是否是對方的
		}
		switch (PIECE_TYPES[Piece] - (player!=0 ? 7 : 0)) {
		case 5://炮,吃子時(shí)中間要有炮架
			x = FILE[Move.src];
			y = RANK[Move.src];
			if (x == FILE[Move.dst]) {//進(jìn)退
				BitWord = bitFiles[x];
				if (Move.src < Move.dst) {//進(jìn)
					if ((Attack & (player!=0 ? 16 : 32))!=0) {//吃子
						return Move.dst == PreMoveNodesGen.FileCannonCapMax[y][BitWord] + BOTTOM[x];
					} else {//不吃子
						return Move.dst <= PreMoveNodesGen.FileNonCapMax[y][BitWord] + BOTTOM[x];
					}
				} else {//Move.Src > Move.Dst,退
					if ((Attack & (player!=0 ? 16 : 32))!=0) {
						return Move.dst == PreMoveNodesGen.FileCannonCapMin[y][BitWord] + BOTTOM[x];
					} else {
						return Move.dst >= PreMoveNodesGen.FileNonCapMin[y][BitWord] + BOTTOM[x];
					}
				}
			} else {//平
				BitWord = bitRanks[y];
				if (Move.src < Move.dst) {
					if ((Attack & (player!=0 ? 16 : 32))!=0) {
						return Move.dst == PreMoveNodesGen.RankCannonCapMax[x][BitWord] + y;
					} else {
						return Move.dst <= PreMoveNodesGen.RankNonCapMax[x][BitWord] + y;
					}
				} else {
					if ((Attack & (player!=0 ? 16 : 32))!=0) {
						return Move.dst == PreMoveNodesGen.RankCannonCapMin[x][BitWord] + y;
					} else {
						return Move.dst >= PreMoveNodesGen.RankNonCapMin[x][BitWord] + y;
					}
				}
			}
		case 4://車,吃子時(shí),中間不能有間隔
			x = FILE[Move.src];
			y = RANK[Move.src];
			if (x == FILE[Move.dst]) {
				BitWord = bitFiles[x];
				if (Move.src < Move.dst) {
					if ((Attack & (player!=0 ? 16 : 32))!=0) {
						return Move.dst == PreMoveNodesGen.FileRookCapMax[y][BitWord] + BOTTOM[x];
					} else {
						return Move.dst <= PreMoveNodesGen.FileNonCapMax[y][BitWord] + BOTTOM[x];
					}
				} else {
					if ((Attack & (player!=0 ? 16 : 32))!=0) {
						return Move.dst == PreMoveNodesGen.FileRookCapMin[y][BitWord] + BOTTOM[x];
					} else {
						return Move.dst >= PreMoveNodesGen.FileNonCapMin[y][BitWord] + BOTTOM[x];
					}
				}
			} else {
				BitWord = bitRanks[y];
				if (Move.src < Move.dst) {
					if ((Attack & (player!=0 ? 16 : 32))!=0) {
						return Move.dst == PreMoveNodesGen.RankRookCapMax[x][BitWord] + y;
					} else {
						return Move.dst <= PreMoveNodesGen.RankNonCapMax[x][BitWord] + y;
					}
				} else {
					if ((Attack & (player!=0 ? 16 : 32))!=0) {
						return Move.dst == PreMoveNodesGen.RankRookCapMin[x][BitWord] + y;
					} else {
						return Move.dst >= PreMoveNodesGen.RankNonCapMin[x][BitWord] + y;
					}
				}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 欧美色图免费看| 国产女人aaa级久久久级| 精品系列免费在线观看| www亚洲一区| 国产传媒欧美日韩成人| 国产亲近乱来精品视频 | 亚洲国产精品影院| 欧美人动与zoxxxx乱| 麻豆成人免费电影| 国产欧美日韩中文久久| 99视频一区二区| 亚洲国产精品影院| 精品国产一区二区三区久久久蜜月| 久久机这里只有精品| 欧美国产精品一区二区| 91色porny在线视频| 天堂久久久久va久久久久| 日韩精品一区国产麻豆| 日韩国产精品久久久久久亚洲| 欧美图片一区二区三区| 日韩福利视频导航| 国产亚洲综合性久久久影院| aa级大片欧美| 五月综合激情婷婷六月色窝| 精品国产一区a| 色欲综合视频天天天| 麻豆一区二区三| 中文字幕一区二区不卡| 91精品国模一区二区三区| 国产高清视频一区| 亚洲动漫第一页| 国产女人水真多18毛片18精品视频 | 99精品欧美一区| 视频一区欧美精品| 国产精品每日更新| 91精品蜜臀在线一区尤物| 国产 日韩 欧美大片| 亚洲va欧美va人人爽午夜| 亚洲国产高清aⅴ视频| 欧美视频中文一区二区三区在线观看| 久久99精品久久久久久久久久久久| 国产精品成人网| 精品日韩欧美一区二区| 色欧美日韩亚洲| 国产福利不卡视频| 日韩 欧美一区二区三区| 亚洲色图丝袜美腿| 久久久另类综合| 欧美一区二区三区白人| 欧美在线一区二区三区| 国产成人在线视频网站| 久久精品72免费观看| 亚洲一区二区美女| 亚洲欧洲av在线| 久久精品夜夜夜夜久久| 日韩欧美亚洲国产精品字幕久久久| 99re这里都是精品| 国产精品资源网站| 裸体健美xxxx欧美裸体表演| 亚洲精品一二三| 欧美国产欧美综合| 国产性天天综合网| 精品国产一区二区三区忘忧草| 欧美日韩国产大片| 在线精品视频小说1| 色综合久久综合中文综合网| 99久久亚洲一区二区三区青草| 国产福利一区二区三区视频 | 国产呦萝稀缺另类资源| 美女视频网站久久| 视频一区中文字幕国产| 亚洲成人在线网站| 日韩和的一区二区| 午夜久久久影院| 天天综合天天做天天综合| 一区二区三区欧美激情| 一区二区三区成人| 艳妇臀荡乳欲伦亚洲一区| 亚洲女人的天堂| 亚洲精品乱码久久久久久久久| 中文字幕在线不卡国产视频| 亚洲视频电影在线| 亚洲人成网站精品片在线观看| 日韩伦理电影网| 一区二区三区产品免费精品久久75| 亚洲欧美日韩综合aⅴ视频| 亚洲欧美日韩国产另类专区| 亚洲欧美日韩中文字幕一区二区三区 | 青草国产精品久久久久久| 蜜臀久久久久久久| 日本系列欧美系列| 久久国产精品露脸对白| 国产91综合网| 色天使久久综合网天天| 在线精品视频一区二区三四| 欧美剧在线免费观看网站| 日韩一区二区在线看片| 久久久亚洲高清| 成人免费一区二区三区在线观看| 亚洲女厕所小便bbb| 亚洲一区二区欧美| 精品一区二区在线视频| 粉嫩高潮美女一区二区三区| 91浏览器在线视频| 欧美日韩免费电影| 久久久91精品国产一区二区精品| 国产精品的网站| 亚洲国产一区二区视频| 韩国欧美国产1区| 97精品超碰一区二区三区| 欧美在线你懂得| 欧美xxxxxxxx| 亚洲欧美另类久久久精品2019| 亚洲一线二线三线视频| 久久99精品国产麻豆婷婷| 不卡影院免费观看| 欧美精品少妇一区二区三区| 久久色视频免费观看| 亚洲欧美日韩国产综合在线| 日本女人一区二区三区| 91影院在线免费观看| 欧美xxxxxxxx| 亚洲不卡av一区二区三区| 国产成人免费9x9x人网站视频| 欧美影院午夜播放| 国产婷婷一区二区| 蜜臀a∨国产成人精品| 日本黄色一区二区| 久久久不卡网国产精品二区| 亚洲va韩国va欧美va| 成人av集中营| 久久在线观看免费| 视频一区二区三区中文字幕| 99精品国产91久久久久久| 精品999久久久| 日韩精品亚洲专区| 日本韩国欧美一区二区三区| 日本一区二区三级电影在线观看 | 久久久综合视频| 日韩中文字幕亚洲一区二区va在线| 粗大黑人巨茎大战欧美成人| 在线播放日韩导航| 亚洲欧美日韩精品久久久久| 乱一区二区av| 欧美一级夜夜爽| 夜夜揉揉日日人人青青一国产精品| 久久国产精品99久久久久久老狼| 在线这里只有精品| 国产偷v国产偷v亚洲高清| 五月婷婷欧美视频| 波多野结衣亚洲| 精品人在线二区三区| 一卡二卡三卡日韩欧美| 成人91在线观看| 精品国产乱码久久久久久图片| 欧美a级一区二区| 欧美中文字幕一区二区三区亚洲| 久久新电视剧免费观看| 婷婷综合久久一区二区三区| 蜜乳av一区二区| 日韩三级高清在线| 亚洲一区二区三区自拍| 97国产一区二区| 久久精品视频免费观看| 国内精品国产成人| 在线不卡的av| 亚洲国产一二三| 99久久99久久精品免费观看| 中文字幕一区二区三区蜜月| 国内精品不卡在线| 欧美一级理论性理论a| 亚洲综合区在线| 91麻豆精品久久久久蜜臀| 亚洲国产精品一区二区久久| 91女厕偷拍女厕偷拍高清| 中文字幕免费观看一区| 精品一区二区三区免费播放| 日韩亚洲欧美成人一区| 日韩国产在线观看一区| 欧美视频一区二区三区四区| 午夜精品一区二区三区三上悠亚| 成a人片国产精品| 亚洲精品ww久久久久久p站| 91丝袜美腿高跟国产极品老师| 中文字幕国产一区| 韩国一区二区三区| 国产精品高潮久久久久无| 成人av电影观看| 国产精品你懂的在线| 91在线码无精品| 亚洲国产综合视频在线观看| 欧美日韩在线播放三区四区| 一区二区三区四区中文字幕| 91精品国产综合久久精品| 免费亚洲电影在线| 精品国产一区二区亚洲人成毛片 | 日韩美女视频一区二区| 欧美综合天天夜夜久久| 老司机午夜精品99久久|