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

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

?? ai.java

?? J2ME五子棋設計,這是我學習j2me入門后的第一個作品
?? JAVA
字號:
package org.javagarden.j2me.fivelink.client;


/**
 * 游戲的人式智能處理類。
 * @author Turbo Chen
 * @created 2005-4-5
 */
public class AI
{

    /**
     * 找到最佳下棋點。
     * 基本思路是, 先計算每個點的權值,在權值最高的位置下棋
     * @author Turbo Chen
     * @created 2005-5-11
     */ 
    public static Location findBestChessLocation( Player currentPlayer, FiveLinkModel model)
    {
        //權值數組
        int[][] power = new int[FiveLinkModel.BOARD_SIZE][FiveLinkModel.BOARD_SIZE];
        for ( short i = 0; i < FiveLinkModel.BOARD_SIZE; i++ )
        {
            for ( short j = 0; j < FiveLinkModel.BOARD_SIZE; j++ )
            {
                // 當已有子時將該點的權值設為-1
                if ( model.getChess()[i][j] !=0 )
                {
                    power[i][j] = -1; 
                }
                // 否則計算該點權值
                else
                {
                    power[i][j] = (short) calcPower(i, j, currentPlayer,model);
                }
            }
        }
        //計算完所有點的權值后, 再找出其中權值最大的點
        Location bestLoc = calcMaximumPowerLocation(power);
        power = null;
        return bestLoc;

    }

    /**
     * 找出權值最大點.
     * @param power
     * @return
     */
    private static Location calcMaximumPowerLocation(int[][] power)
    {
        int max = 0;
        short x = 0, y = 0;
        for ( short i = 0; i < FiveLinkModel.BOARD_SIZE; i++ )
        {
            for ( short j = 0; j < FiveLinkModel.BOARD_SIZE; j++ )
            {
                if ( power[i][j] > max )
                {
                    x = i;
                    y = j;
                    max = power[i][j];
                }
            }
        }
        return new Location(x,y);
    }

    /**
     * 檢查m,n點的權值.<p>
     * 思路是, 假定在m,n位置下棋后,計算4個方向經過該點,同色相連的棋子數量, 不同的數量有不同的
     * 權值,將四個方向上權值相加即為該點的權值.計算完后恢復該點的狀態.
     * @param m
     * @param n
     * @param currentPlayer
     * @param model
     * @return
     */
    private static int calcPower(short m, short n,  Player currentPlayer, FiveLinkModel model)
    {
        int p = 0;
        
        //找AI自己的取勝點,
        int p1 = 1000;
        //找AI自己的三個相連的點
        int p3 = 60;
        //找AI自己的兩個相連的點
        int p5 = 20;
        //找AI自己的相連的點
        int p7 = 10;

        //找對手的取勝點
        int p2 = 85;
        //找對手的三個相連的點
        int p4 = 45;
        //找對手的兩個相連的點
        int p6 = 15;
        //找對方的相連的點
        int p8 = 5;
        
        short[] arrLinks = new short[4];
        //如果當是我方下棋, 判斷我方所持棋子的顏色, 在該點預下一子, 然后進行后續計算.
        if ( currentPlayer.getChessType()==Player.BLACK )
        {
            //我方是黑子
            model.setChess(m,n,1);
        }else
        {
            //我方是白子
            model.setChess(m,n,-1);
        }
        
        // 計算4個方向上同色相連棋子的數量.
        arrLinks = calcLinkCount(m,n,model.getChess());

        //如果m,n是中心點, 將權值加1
        if ( m == FiveLinkModel.BOARD_SIZE/2 && n == FiveLinkModel.BOARD_SIZE/2 )
        {
            p += 1;
        }
        //計算我方在該點四個方向的權值
        for ( short i = 0; i < 4; i++ )
        {
            if ( Math.abs(arrLinks[i]) == 5 )
            {
                p += p1;
            }
            if ( arrLinks[i] == 4 )
            {
                p += p3;
            }
            if ( arrLinks[i] == 3 )
            {
                p += p5;
            }
            if ( arrLinks[i] == 2 )
            {
                p += p7;
            }
        }
        //如果當是對手方下棋, 判斷對方所持棋子的顏色, 在該點預下一子, 然后進行后續計算.
        if ( currentPlayer.getChessType()==1 )
        {
            //如果對方是白子, 
            model.setChess(m,n,-1);
        }else
        {
            //如果對方是黑子,
            model.setChess(m,n,1);
        }

        arrLinks = calcLinkCount(m,n,model.getChess());        
        //計算對手在該點四個方向的權值
        for ( short i = 0; i < 4; i++ )
        {
            if ( Math.abs(arrLinks[i]) == 5 )
            {
                p += p2;
            }
            if ( arrLinks[i] == 4 )
            {
                p += p4;
            }
            if ( arrLinks[i] == 3 )
            {
                p += p6;
            }
            if ( arrLinks[i] == 2 )
            {
                p += p8;
            }
        }
        //計算完后恢復該點的原來狀態.
        model.setChess(m,n,0);
        arrLinks = null;
        return p;
    }

	/**
	 * 判斷是否平局.
	 * @param arrchessboard
	 * @return
	 */ 
	public static boolean isTie(short[][] arrchessboard)
	{
		//當所有位置都有子時為平局
		for (short i=0;i<FiveLinkModel.BOARD_SIZE;i++)
		{
			for (short j=0;j<FiveLinkModel.BOARD_SIZE;j++)
			{
				if (arrchessboard[i][j] == 0)
					return false;
			}
		}
		return true;
	}

	/**
	 * 計算4個方向相連棋子的個數
	 * @param m
	 * @param n
	 * @param arrchessboard
	 * @return 返回一個4元素的數據,分別代表(m,n)點上四個方向聽相連子的個數.
	 */
	private static short[] calcLinkCount(short m,short n, short[][] arrchessboard)
	{
	    short[] counts = new short[4];

	    //---------------------------------------
	    //檢查是否無子可下(當flag=2時表示無子可下)
		short flag = 0;
		//連子個數
		short num = 1;

		//檢查正東方向
		short x = (short)(m+1);
		int y = n+1;
		//不超出棋格
		for(;x < FiveLinkModel.BOARD_SIZE;)
		{
			//如果前方的棋子與m,n點不同則跳出循環
			if (arrchessboard[x][n] == arrchessboard[m][n])
			{
				num++;
				x++;
			}
			else
			{
				break;
			}
		}
		//正東方向超出棋格
		if (x==FiveLinkModel.BOARD_SIZE)
		{
			flag++;
		}
		else
		{
			//正東方向有別的子不可再下
			if(arrchessboard[x][n] != 0)
			{
				flag++;
			}
		}

		//檢查正西方向
        x = (short)(m-1);
		for (;x >= 0;)
		{
			//前方的棋子與m,n點不同時跳出循環
			if (arrchessboard[x][n] == arrchessboard[m][n])
			{
				num++;
				x--;
			}
			else
			{
				break;
			}
		}
		//正西方向超出棋格
		if (x == -1)
		{
			flag++;
		}
		else
		{
			//正西方向有別的子不可再下
			if(arrchessboard[x][n] != 0)
			{
				flag++;
			}
		}


		if (flag == 2)
		{
			counts[0] = (short)-num;
		}
		else
		{
			if (flag == 1 && num == 3 )
			{
				//連子數為3時有一邊不能下就不是活三
			    counts[0] = (short)-num;
			}
			else
			{
				counts[0] = num;
			}
		}

		//---------------------------------------
		//檢查是否無子可下(當flag=2時表示無子可下)
		flag = 0;
		//連子個數
		num = 1;
		//檢查正南方向
		x = (short)(n+1);
		for(;x<FiveLinkModel.BOARD_SIZE;)
		{
			//前方的棋子與m,n點不同時跳出循環
			if (arrchessboard[m][x] == arrchessboard[m][n])
			{
				num++;
				x++;
			}
			else
			{
				break;
			}
		}
		//正南方向超出棋格
		if (x==FiveLinkModel.BOARD_SIZE)
		{
			flag++;
		}
		else
		{
			//正南方向有別的子不可在下
			if(arrchessboard[m][x] != 0)
			{
				flag++;
			}
		}

		//檢查正北方向
		x = (short) (n-1);
		for(;x >= 0;)
		{
			//前方的棋子與m,n點不同時跳出循環
			if (arrchessboard[m][x] == arrchessboard[m][n])
			{
				num++;
				x--;
			}
			else
			{
				break;
			}
		}
		//正北方向超出棋格
		if (x == -1)
		{
			flag++;
		}
		else
		{
			//正北方向有別的子不可在下
			if(arrchessboard[m][x] != 0)
			{
				flag++;
			}
		}

		if (flag == 2)
		{
			counts[1] = (short)-num;
		}
		else
		{
			if (flag == 1 && num == 3 )
			{
				//連子數為3時有一邊不能下就不是活三
				counts[1] = (short)-num;
			}
			else
			{
				counts[1] = num;
			}
		}
		
		//--------------------------------------
		//檢查是否無子可下(當flag=2時表示無子可下)
		flag = 0;
		//連子個數
		num = 1;
		
		//檢查東南方向
		x = (short)(m+1);
		//不超出棋格
		for(;x < FiveLinkModel.BOARD_SIZE && y < FiveLinkModel.BOARD_SIZE;)
		{
			//前方的棋子與m,n點不同時跳出循環
			if (arrchessboard[x][y] == arrchessboard[m][n])
			{
				num++;
				x++;
				y++;
			}
			else
			{
				break;
			}
		}
		//東南方向超出棋格
		if (x==FiveLinkModel.BOARD_SIZE || y==FiveLinkModel.BOARD_SIZE)
		{
			flag++;
		}
		else
		{
			//東南方向有別的子不可在下
			if(arrchessboard[x][y] != 0)
			{
				flag++;
			}
		}

		//檢查西北方向
		x = (short)(m-1);
		y = n-1;
		//不超出棋格
		for(;x >= 0 && y >= 0;)
		{
			//前方的棋子與m,n點不同時跳出循環
			if (arrchessboard[x][y] == arrchessboard[m][n])
			{
				num++;
				x--;
				y--;
			}
			else
			{
				break;
			}
		}
		//西北方向超出棋格
		if (x == -1 || y == -1)
		{
			flag++;
		}
		else
		{
			//西北方向有別的子不可在下
			if(arrchessboard[x][y] != 0)
			{
				flag++;
			}
		}

		if (flag == 2)
		{
			counts[2] = (short)-num;
		}
		else
		{
			if (flag == 1 && num == 3 )
			{
				//連子數為3時有一邊不能下就不是活三
				counts[2] = (short)-num;
			}
			else
			{
				counts[2] = num;
			}
		}
		
		//------------------------------------
		//檢查是否無子可下(當flag=2時表示無子可下)
		flag = 0;
		//連子個數
		num = 1;

		//檢查西南方向
		x = (short)(m-1);
		y = n+1;
		//不超出棋格
		for(;x >= 0 && y < FiveLinkModel.BOARD_SIZE;)
		{
			//前方的棋子與m,n點不同時跳出循環
			if (arrchessboard[x][y] == arrchessboard[m][n])
			{
				num++;
				x--;
				y++;
			}
			else
			{
				break;
			}
		}
		//西南方向超出棋格
		if (x == -1 || y == FiveLinkModel.BOARD_SIZE)
		{
			flag++;
		}
		else
		{
			//西南方向有別的子不可在下
			if(arrchessboard[x][y] != 0)
			{
				flag++;
			}
		}

		//檢查東北方向(
		x = (short)(m+1);
		y = n-1;
		//不超出棋格
		for(;x < FiveLinkModel.BOARD_SIZE && y >= 0;)
		{
			//前方的棋子與m,n點不同時跳出循環
			if (arrchessboard[x][y] == arrchessboard[m][n])
			{
				num++;
				x++;
				y--;
			}
			else
			{
				break;
			}
		}
		//東北方向超出棋格
		if (x == FiveLinkModel.BOARD_SIZE || y == -1)
		{
			flag++;
		}
		else
		{
			//東北方向有別的子不可在下
			if(arrchessboard[x][y] != 0)
			{
				flag++;
			}
		}

		if (flag == 2)
		{
			counts[3] = (short)-num;
		}
		else
		{
			if (flag == 1 && num == 3 )
			{
				//連子數為3時有一邊不能下就不是活三
			    counts[3] = (short)-num;
			}
			else
			{
			    counts[3] = num;
			}
		}
	
		// 返回四個方向的相連子的個數。
		return counts;
	}
    
    
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91麻豆蜜桃一区二区三区| 欧美日韩成人综合| 经典一区二区三区| 成人免费毛片片v| 欧美在线观看视频一区二区三区 | 欧美一三区三区四区免费在线看| 日韩你懂的在线播放| 夜夜揉揉日日人人青青一国产精品| 视频一区二区三区在线| 国产成人在线看| 欧美三级乱人伦电影| 精品免费国产二区三区| 亚洲男女一区二区三区| 国产剧情在线观看一区二区| 欧美日韩激情一区| 国产精品三级av| 久久er精品视频| 欧美激情一区二区三区在线| 亚洲午夜羞羞片| 成人一级黄色片| 精品国产精品一区二区夜夜嗨| 亚洲日本电影在线| 国产69精品一区二区亚洲孕妇| 91精品国产91久久久久久最新毛片| 国产精品白丝在线| 国产激情91久久精品导航| 欧美日本在线一区| 夜夜精品视频一区二区| 欧美日本一道本| 一区二区三区国产精品| 成人免费av网站| 国产欧美一区二区在线观看| 乱中年女人伦av一区二区| 欧美系列在线观看| 久久久三级国产网站| 亚洲精品一二三区| 91麻豆福利精品推荐| 中文字幕不卡的av| 国产成人鲁色资源国产91色综 | 久久久久久久久蜜桃| 日韩电影免费在线| 在线欧美日韩国产| 亚洲欧美日韩久久精品| 91在线视频播放地址| 中文字幕一区二区三区不卡在线 | 精品国产自在久精品国产| 五月婷婷欧美视频| 欧美精品第1页| 午夜欧美视频在线观看| 欧洲一区二区av| 亚洲午夜电影在线观看| 欧美色图免费看| 亚洲激情图片小说视频| 在线日韩国产精品| 日日夜夜免费精品视频| 欧美一卡二卡三卡四卡| 国内外精品视频| 亚洲影院理伦片| 7777精品伊人久久久大香线蕉的 | 国产精品乡下勾搭老头1| 久久精品亚洲麻豆av一区二区 | 精品久久久久99| 成人h动漫精品一区二| 国产精品538一区二区在线| 中文字幕在线不卡国产视频| 91福利在线导航| 久久99在线观看| 一区二区三区在线免费播放| 欧美tickle裸体挠脚心vk| 色综合咪咪久久| 精品无人码麻豆乱码1区2区| 一卡二卡三卡日韩欧美| 日韩欧美国产午夜精品| 91国模大尺度私拍在线视频| 久久99精品国产麻豆不卡| 激情综合网av| 亚洲视频一区二区在线| 久久久综合视频| 欧美日韩第一区日日骚| 一本到三区不卡视频| 国产麻豆精品theporn| 日欧美一区二区| 亚洲老司机在线| 国产喂奶挤奶一区二区三区| 欧美一区二区三区在线电影| 99久久精品一区二区| 国内精品写真在线观看| 亚洲成人在线观看视频| 欧美aaaaaa午夜精品| 亚洲激情图片一区| 中文字幕日韩一区| 久久香蕉国产线看观看99| 91精品久久久久久久99蜜桃| 色狠狠综合天天综合综合| 丰满亚洲少妇av| 国产在线视频一区二区三区| 秋霞成人午夜伦在线观看| 亚洲国产一区二区三区| 亚洲激情综合网| 亚洲欧美一区二区三区国产精品| 国产拍揄自揄精品视频麻豆| www国产精品av| 久久免费看少妇高潮| 日韩一级片网站| 日韩午夜三级在线| 欧美一区二区视频免费观看| 91.xcao| 欧美日韩高清不卡| 91精品国产乱| 欧美一区二区三区在线看| 337p亚洲精品色噜噜噜| 91精品国产综合久久精品麻豆 | 色婷婷国产精品久久包臀| 亚洲一区二区3| 日韩精品乱码免费| 久久精品国产99久久6| 久久99九九99精品| 国模一区二区三区白浆| 国产精品一二三区| 波多野结衣视频一区| 97成人超碰视| 欧美在线观看一区| 日韩午夜电影av| 久久综合色鬼综合色| 91精品国产综合久久精品麻豆| 日韩视频在线永久播放| 久久在线免费观看| 亚洲欧洲日韩av| 成人久久久精品乱码一区二区三区| 福利91精品一区二区三区| 成人精品高清在线| 欧美在线不卡一区| 欧美一区二区三区四区在线观看| 26uuu精品一区二区| 国产精品嫩草99a| 亚洲精品国产精品乱码不99| 天天综合天天综合色| 狠狠色丁香婷综合久久| 99视频在线精品| 欧美日韩电影一区| 国产欧美精品一区二区三区四区| 综合自拍亚洲综合图不卡区| 丝袜a∨在线一区二区三区不卡| 成人av午夜电影| 欧美午夜精品久久久| 精品久久久久久综合日本欧美| 国产精品欧美一区喷水| 天天色 色综合| 国产精品 日产精品 欧美精品| 91久久人澡人人添人人爽欧美| 欧美一区二区日韩一区二区| 欧美国产亚洲另类动漫| 亚洲成人免费看| 成人免费视频国产在线观看| 欧美一区在线视频| 中文字幕一区二区三| 美国精品在线观看| 精品成人一区二区| 亚洲精品第一国产综合野| 久久精品二区亚洲w码| 99精品视频一区二区三区| 欧美一级日韩一级| 亚洲欧美日韩一区二区三区在线观看 | 日韩三级视频中文字幕| 国产精品你懂的在线欣赏| 日本aⅴ亚洲精品中文乱码| 97久久超碰国产精品电影| 欧美成人乱码一区二区三区| 亚洲激情av在线| 成人福利视频在线看| 综合激情网...| 国产成人免费av在线| 欧美不卡在线视频| 日韩精品福利网| 欧美系列日韩一区| 亚洲免费电影在线| 99久久久久久99| 国产精品伦一区二区三级视频| 国内精品伊人久久久久av一坑| 7777精品伊人久久久大香线蕉经典版下载 | 欧美一级高清大全免费观看| 依依成人综合视频| av在线不卡免费看| 国产欧美日韩综合| 国产九色精品成人porny | 欧美亚洲一区二区在线| 国产精品传媒在线| 欧美日韩高清一区二区不卡| 一区二区三区影院| 色天使久久综合网天天| 亚洲三级电影网站| 91在线观看一区二区| 国产精品美女久久久久久| 粉嫩蜜臀av国产精品网站| 国产欧美一区二区精品忘忧草| 黄色日韩网站视频| 国产日本一区二区| 成人激情小说乱人伦| 中文字幕一区二区在线观看 | 亚洲欧洲日韩女同|