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

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

?? firlogic.java

?? 這是一款可以在手機JAVA平臺上運行的五子棋游戲的源代碼
?? JAVA
?? 第 1 頁 / 共 2 頁
字號:
package com.j2meFIR;



import java.util.Random;
import java.util.Stack;

public class FIRLogic
{
    private FIRCanvas myCanvas;
    private int boardSize;
    private boolean isComputerFirst;
    private int degree;
    public static int PLAYER_NONE = 0;
    public static int PLAYER_COMPUTER = 1;
    public static int PLAYER_MAN = 2;
    private int table[][];
    private Dot lastDot;
    private int playerCounter[];
    private Stack steps;
    private Dot triedDot;
    private static int GAIN_BY_COMPUTER = 5;
    private static int GAIN_BY_NONE = 1;
    private boolean isGameOver;
    private boolean isComputerWon;
    private boolean isThinking;
    private Random rndNum;
    public FIRLogic(FIRCanvas canvas, int boardSize, boolean isComputerFirst, int degree)
    {

    	
        this.boardSize = 15;
        isComputerFirst = true;
        degree = 1;
        myCanvas = canvas;
        this.boardSize = boardSize;

        this.setComputerFirst(isComputerFirst);
        this.setDegree(degree);
        table = new int[boardSize][boardSize];
        for(int r = 0; r < boardSize; r++)
        {
            for(int c = 0; c < boardSize; c++)
                table[r][c] = 0;

        }

        
        playerCounter = new int[3];
        playerCounter[0] = boardSize * boardSize;
        playerCounter[1] = 0;
        playerCounter[2] = 0;
        lastDot = new Dot(boardSize);
        steps = new Stack();
        triedDot = new Dot(-1, -1);
        isGameOver = false;
        isThinking = false;
        rndNum = new Random();
    }

    public int[][] getTable()
    {
        return table;
    }

    public Dot lastDot()
    {
        return lastDot;
    }

    public Dot triedDot()
    {
        return triedDot;
    }

    public boolean checkGameOver()
    {
        return isGameOver;
    }

    public boolean isComputerWon()
    {
        return isComputerWon;
    }

    public boolean isThinking()
    {
        return isThinking;
    }

    private boolean isGameOver()
    {
        isGameOver = false;
        for(int r = 0; r < boardSize; r++)
        {
            for(int c = 0; c < boardSize; c++)
            {
                if(table[r][c] == 0 || checkFiveInRow(r, c, 5, -1) == -1)
                    continue;
                isGameOver = true;
                isComputerWon = table[r][c] == 1;
                break;
            }

            if(isGameOver)
                break;
        }

        if(isGameOver)
            myCanvas.notifyGameEnd();
        return isGameOver;
    }

    public void manGo(int row, int col)
    {
        if(row >= 0 && row < boardSize && col >= 0 && col < boardSize && table[row][col] == 0)
        {
            goAt(row, col, 2);
            if(isGameOver())
            {
                if(isComputerWon)
                    myCanvas.setStatus("?????!", 0xff0000, 2);
                else
                    myCanvas.setStatus("?????!", 65280, 1);
            } else
            {
                computerGo();
            }
        }
    }

    private void goAt(int row, int col, int player)
    {
        int lastRow = lastDot.row;
        int lastCol = lastDot.col;
        table[row][col] = player;
        lastDot.setRowCol(row, col);
        myCanvas.repaintAt(lastRow, lastCol);
        myCanvas.repaintAt(row, col);
        switch(player)
        {
        case 1: 
            playerCounter[1]++;
            break;

        case 2: 
            playerCounter[2]++;
            break;
        }
        playerCounter[0]--;
        if(steps.size() > 10)
            steps.removeElementAt(0);
        steps.push(new Dot(row, col));
    }

    public boolean undo()
    {
        if(steps.size() >= 3)
        {
            Dot d = new Dot();
            d.copyFrom((Dot)steps.pop());
            table[d.row][d.col] = 0;
            myCanvas.repaintAt(d.row, d.col);
            d.copyFrom((Dot)steps.pop());
            table[d.row][d.col] = 0;
            myCanvas.repaintAt(d.row, d.col);
            d.copyFrom((Dot)steps.peek());
            lastDot.copyFrom(d);
            myCanvas.repaintAt(d.row, d.col);
            return true;
        } else
        {
            return false;
        }
    }

    public void computerGo()
    {
        myCanvas.setStatus("?????...", 0, 0);
        myCanvas.serviceRepaints();
        think();
    }

    public void think()
    {
        isThinking = true;
        Dot dc = null;
        if((dc = to5L(1)) == null && (dc = to5L(2)) == null && (dc = to4B(1)) == null && (dc = to4B(2)) == null && (dc = toDouble4S_3B_2N1B(1, true)) == null && (dc = toDouble4S_3B_2N1B(2, true)) == null && (dc = toDouble4S_3B_2N1B(1, false)) == null && (dc = toDouble4S_3B_2N1B(2, false)) == null && (dc = toSingle4S_3B_2N1B(1)) == null)
            dc = toSingle4S_3B_2N1B(2);
        if(dc == null)
            dc = maxGainedDot();
        if(dc == null || playerCounter[0] == 0)
        {
            myCanvas.setStatus("???!", 255, 3);
        } else
        {
            System.out.println("Gone!");
            goAt(dc.row, dc.col, 1);
            if(isGameOver())
            {
                if(isComputerWon)
                    myCanvas.setStatus("?????!", 0xff0000, 2);
                else
                    myCanvas.setStatus("??????!", 65280, 1);
            } else
            {
                myCanvas.setStatus("??????...");
            }
        }
        isThinking = false;
    }

    private Dot to4B(int player)
    {
        if(playerCounter[player] < 3)
            return null;
        Dot dot = null;
        int maxGain = 0;
        for(int r = 1; r < boardSize - 1; r++)
        {
            for(int c = 1; c < boardSize - 1; c++)
                if(table[r][c] == 0)
                {
                    int cd[] = connectedIn8D(player, r, c);
                    int ed[] = expandedIn8D(player, r, c);
                    for(int i = 0; i < 4; i++)
                        if(ed[i] > cd[i] && ed[i + 4] > cd[i + 4] && cd[i] + cd[i + 4] + 1 >= 4)
                        {
                            int gain = gainAt(r, c);
                            if(gain > maxGain || gain > 0 && gain == maxGain && randomTrue())
                            {
                                maxGain = gain;
                                dot = new Dot(r, c);
                            }
                        }

                }

        }

        return dot;
    }

    private Dot toSingle4S_3B_2N1B(int player)
    {
        if(playerCounter[player] < 2)
            return null;
        Dot dot = null;
        for(int r = 0; r < boardSize; r++)
        {
            for(int c = 0; c < boardSize; c++)
            {
                if(table[r][c] != 0 || find4S_3B_2N1BAt(r, c, player, -1) == -1)
                    continue;
                dot = new Dot(r, c);
                break;
            }

            if(dot != null)
                break;
        }

        return dot;
    }

    private Dot toDouble4S_3B_2N1B(int player, boolean only4S)
    {
        if(playerCounter[player] < 4)
            return null;
        Dot dot = null;
        for(int rTest = 0; rTest < boardSize; rTest++)
        {
            for(int cTest = 0; cTest < boardSize; cTest++)
            {
                if(table[rTest][cTest] != 0)
                    continue;
                int cd[] = connectedIn8D(player, rTest, cTest);
                if(cd[0] + cd[1] + cd[2] + cd[3] + cd[4] + cd[5] + cd[6] + cd[7] <= 0)
                    continue;
                triedDot.setRowCol(rTest, cTest);
                table[rTest][cTest] = player;
                boolean found = false;
                int dFirst = find4S_3B_2N1B(player, -1, rTest, cTest, only4S);
                if(dFirst != -1 && find4S_3B_2N1B(player, dFirst, rTest, cTest, false) != -1)
                    found = true;
                table[rTest][cTest] = 0;
                triedDot.setRowCol(-1, -1);
                if(!found)
                    continue;
                dot = new Dot(rTest, cTest);
                break;
            }

            if(dot != null)
                break;
        }

        return dot;
    }

    private int find4SAt(int row, int col, int player, int exceptDirection)
    {
        int dFond = -1;
        int cd[] = connectedIn8D(player, row, col);
        int ed[] = expandedIn8D(player, row, col);
        for(int d = 0; d < 4; d++)
        {
            if(d == exceptDirection || table[row][col] != player)
                continue;
            int nConnect = cd[d] + cd[d + 4] + 1;
            int nFree1 = ed[d] - cd[d];
            int nFree2 = ed[d + 4] - cd[d + 4];
            boolean b4S = nConnect >= 4 && (nFree1 >= 1 || nFree2 >= 1);
            if(!b4S)
                continue;
            dFond = d;
            break;
        }

        return dFond;
    }

    private int find4S_3B_2N1BAt(int row, int col, int player, int exceptDirection)
    {
        int dFond = -1;
        int cd[] = connectedIn8D(player, row, col);
        int ed[] = expandedIn8D(player, row, col);
        for(int d = 0; d < 4; d++)
        {
            if(d == exceptDirection)
                continue;
            if(table[row][col] == player)
            {
                int nConnect = cd[d] + cd[d + 4] + 1;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美电影免费提供在线观看| 视频一区在线视频| 亚洲综合久久久| 狠狠色狠狠色综合系列| 91影院在线免费观看| 日韩精品最新网址| 亚洲乱码国产乱码精品精可以看 | 欧美综合欧美视频| 日韩三级精品电影久久久| 亚洲欧美激情小说另类| 国产一区二区三区不卡在线观看| 欧美性一二三区| 国产精品国产自产拍在线| 韩国中文字幕2020精品| 欧美色精品天天在线观看视频| 国产日韩欧美一区二区三区乱码| 日韩精品免费视频人成| 91麻豆免费视频| 中文av字幕一区| 国产传媒日韩欧美成人| 精品乱码亚洲一区二区不卡| 天天综合天天综合色| 91久久精品国产91性色tv| 国产精品久久久久久福利一牛影视| 蜜乳av一区二区三区| 91麻豆精品国产无毒不卡在线观看| 又紧又大又爽精品一区二区| av中文字幕亚洲| 国产精品久久久久永久免费观看 | 精品在线免费观看| 欧美精品日韩综合在线| 亚洲成人一区在线| 欧美日韩免费不卡视频一区二区三区 | 婷婷亚洲久悠悠色悠在线播放| 色一情一伦一子一伦一区| 亚洲日本中文字幕区| 99精品视频在线观看免费| 国产精品日韩精品欧美在线| 成人免费毛片嘿嘿连载视频| 国产精品美女久久福利网站| 成人黄色电影在线 | 欧美成人猛片aaaaaaa| 免费久久精品视频| 欧美一区二区三区人| 九九热在线视频观看这里只有精品| 日韩免费高清av| 国产激情偷乱视频一区二区三区| 久久久久久久久久久久久夜| 懂色av一区二区三区免费看| ●精品国产综合乱码久久久久| 91在线国产福利| 亚洲午夜久久久久久久久电影院| 欧美男女性生活在线直播观看| 免费在线一区观看| 国产日韩欧美亚洲| 在线观看亚洲成人| 日本美女一区二区三区视频| 久久久久久久av麻豆果冻| 不卡高清视频专区| 天天综合天天做天天综合| 欧美va亚洲va| 97精品视频在线观看自产线路二| 亚洲一区二区在线免费看| 日韩欧美亚洲国产精品字幕久久久| 韩国一区二区三区| 亚洲欧美另类图片小说| 91精品免费观看| 成人夜色视频网站在线观看| 亚洲与欧洲av电影| 久久久久亚洲蜜桃| 在线视频一区二区三区| 久久国产精品免费| 一区二区三区中文免费| 日韩欧美中文一区二区| 99久久伊人网影院| 日韩1区2区日韩1区2区| 中文字幕一区二区三区在线播放 | 夜夜爽夜夜爽精品视频| 精品国产亚洲在线| 欧美亚洲国产一区二区三区va| 国内精品久久久久影院薰衣草 | 91精品国产综合久久精品性色| 久久se这里有精品| 中文字幕在线免费不卡| 悠悠色在线精品| 成人激情校园春色| 亚洲欧洲精品一区二区精品久久久 | 亚洲精品视频在线观看免费| 色婷婷综合久色| 亚洲一区二区黄色| 精品视频全国免费看| 视频在线观看一区| 欧美mv日韩mv国产网站| 国产精品99久久久久久有的能看| 久久久久国产精品厨房| 成人性生交大片免费看中文网站| 国产精品初高中害羞小美女文| 色综合久久99| 亚洲国产一区视频| 欧美成人vr18sexvr| 狠狠久久亚洲欧美| 国产精品久久久久影院亚瑟| 91黄色免费看| 久久国产福利国产秒拍| 亚洲国产精华液网站w| 欧美亚洲综合一区| 久久国产剧场电影| 欧美a级一区二区| xf在线a精品一区二区视频网站| 国产91精品在线观看| 亚洲一区二区三区国产| 精品久久久久久久久久久院品网 | 亚洲一区二区三区爽爽爽爽爽| 欧美日本国产一区| 国产精品影视在线| 亚洲精品国久久99热| 久久亚洲精华国产精华液| 92国产精品观看| 精品综合免费视频观看| 亚洲精选免费视频| 精品久久一二三区| 欧美日韩在线播| 成人免费观看视频| 免费观看在线综合色| 亚洲狼人国产精品| 国产日韩欧美精品一区| 欧美日韩国产综合草草| 99久久综合国产精品| 精品综合免费视频观看| 亚洲成在人线在线播放| 中文字幕巨乱亚洲| 久久综合一区二区| 欧美日韩在线亚洲一区蜜芽| 成人h精品动漫一区二区三区| 日韩激情av在线| 亚洲一区电影777| 国产精品拍天天在线| 欧美一级二级三级蜜桃| 欧美午夜精品一区| 91视频在线观看免费| 国产福利精品一区| 国产麻豆一精品一av一免费| 日本欧美大码aⅴ在线播放| 亚洲乱码国产乱码精品精可以看 | 欧美影院一区二区| 91免费看视频| 91日韩在线专区| 99久久精品免费观看| www.欧美亚洲| www.亚洲精品| 成人在线综合网| 高清av一区二区| 国产sm精品调教视频网站| 国内精品嫩模私拍在线| 国精产品一区一区三区mba视频| 免费观看日韩av| 美女一区二区在线观看| 蜜桃免费网站一区二区三区| 日本女优在线视频一区二区| 日本最新不卡在线| 成人午夜在线免费| 高清视频一区二区| 国产a级毛片一区| 成a人片国产精品| 99久久国产综合色|国产精品| 成人黄色网址在线观看| 91在线精品一区二区三区| 欧美中文字幕不卡| 欧美猛男男办公室激情| 欧美一区二区三区视频| 欧美成人官网二区| 国产精品乱码人人做人人爱 | 精品一区二区在线视频| 国产在线视频不卡二| 国产成人免费9x9x人网站视频| 成人动漫一区二区在线| 色婷婷亚洲婷婷| 这里只有精品免费| 精品成a人在线观看| 日本一区二区三区在线观看| 亚洲天堂精品视频| 日韩在线观看一区二区| 国内不卡的二区三区中文字幕| 成人av综合在线| 欧美日韩免费一区二区三区视频| 欧美xfplay| 一区二区三区在线观看国产| 日韩电影免费一区| 国产老妇另类xxxxx| 色天天综合久久久久综合片| 51精品国自产在线| 国产精品三级在线观看| 日韩精品91亚洲二区在线观看| 国产一二三精品| 欧美日精品一区视频| 久久久不卡网国产精品二区| 一区二区不卡在线视频 午夜欧美不卡在 | 成人黄色av网站在线| 欧美精品在线观看一区二区| 久久久精品免费免费|