日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > ChatGpt >内容正文

ChatGpt

基于C的α-β剪枝算法实现的AI五子棋游戏

發布時間:2023/12/20 ChatGpt 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于C的α-β剪枝算法实现的AI五子棋游戏 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
源碼下載 http://www.byamd.xyz/hui-zong-1/

對抗問題

對抗問題:顧名思義,博弈雙方是帶有對抗性質的。博弈的任何一方都希望局面盡量對自己有利,同時局面也應該盡量令對方不利。通常這一類問題可以通過 Minimax 算法解決。

Minimax 算法又名極小化極大算法,是一種找出失敗的最大可能性中的最小值的算法。

Minimax 算法常用于棋類等由兩方較量的游戲和程序,這類程序由兩個游戲者輪流,每次執行一個步驟。

為了執行Minimax 算法,我們可以通過窮舉的方式,枚舉所有的狀態空間,從而使得我們可以在游戲剛一開始,就預測到輸贏。

但是,在實際情況下,游戲的狀態空間都是異常龐大的。很顯然,我們不能將以窮舉方式實 現的Minimax 算法用于實際應用。

α-β 減枝

通過分析可以發現,在利用窮舉方法執行 Minimax 算法中有許多的無效搜索,也就是說,許多明顯較劣的狀態分支我們也進行搜索了。

我們在進行極大值搜索的時候,我們僅僅關心,下面最大的狀態,對于任何小于目前值 的分支也都是完全沒有必要進行進一步檢查的。(α 減枝)

通過上圖,我們可以發現,我們可以減去大量無用的狀態檢查,從而降低我們的運算量。

同時,我們在進行極小值搜索的時候,我們僅僅關心,下面最小的狀態,對于任何大于 目前值的分支都是完全沒有必要進行進一步檢查的。(β 減枝)

通過上圖,我們可以發現,我們可以減去大量無用的狀態檢查,從而降低我們的運算量。 將上述所提到的 α 減枝與 β 減枝進行綜合就可以得到 α-β 減枝。

對于對抗搜索而言,我們需要精心設計其估值函數,不然我們的 α-β 減枝將毫無用武之地。

五子棋問題

五子棋:**是一種兩人對弈的純策略型棋類游戲,通常雙方分別使用黑白兩色的棋子,下在棋 盤直線與橫線的交叉點上,先形成 5 子連線者獲勝。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-9KrUHl7H-1617337672265)(media/4e9ed78b0312128f30ed0dde6f043b13.jpeg)]

這里,我們采用了極大極小博弈樹(MGT),來實現AI

這里用一張井字棋的搜索示意圖來說明。

上圖很清晰的展示了對局可能出現的所有情況(已經去除了等價的情況),如果讓這個圖延展下去,我們就相當于窮舉了所有的下法,如果我們能在知道所有下法的情況下,對這 些下法加以判斷,我們的AI 自然就可以選擇具有最高獲勝可能的位置來下棋。

極大極小博弈樹就是一種選擇方法,由于五子棋以及大多數博弈類游戲是無法窮舉出所有可能的步驟的(狀態會隨著博弈樹的擴展而呈指數級增長),所以通常我們只會擴展有限的層數,而 AI 的智能高低,通常就會取決于能夠擴展的層數,層數越高,AI 了解的信息就越多, 就越能做出有利于它的判斷。

為了讓計算機選擇那些獲勝可能性高的步驟走,我們就需要一個對局面進行打分的算法, 越有利,算法給出的分數越高。在得到這個算法過后,計算機就可以進行選擇了,在極大極小博弈樹上的選擇規則是這樣的:

AI 會選擇子樹中具有最高估值葉子節點的路徑;

USER 會選擇子樹中具有最小估值葉子節點的路徑。

這樣的原則很容易理解,作為玩家,我所選擇的子一定要使自己的利益最大化,而相應 的在考慮對手的時候,也不要低估他,一定要假設他會走對他自己最有利,也就是對我最不 利的那一步。

接下來,我們實現關鍵的局面評分步驟:

直接分析整個棋面是一件很復雜的事情,為了讓其具備可分析性,我們可以將其進行分 解,分解成易于我們理解和實現的子問題。

對于一個二維的期面,五子棋不同于圍棋,五子棋的勝負只取決于一條線上的棋子,所 以根據五子棋的這一特征,我們就來考慮將二維的棋面轉換為一維的,下面是一種簡單的思 考方式,對于整個棋盤,我們只需要考慮四個方向即可,所以我們就按照四個方向來將棋盤 轉換為 15 * 6 個長度不超過 15 的一維向量(分解斜向的時候,需要分為上下兩個半區),參考下圖:

我們的目的是為了為其評分,那么我們就還需要評估每個線狀態,將每個線狀態的評分進行匯總,當做我們的棋面評分:

接下來我們所要做的就是評價每一條線狀態,根據五子棋的規則,我們可以很容易窮舉出各種可能出現的基本棋型,我們首先為這些基本棋型進行識別和評價, 并且統計每個線狀態中出現了多少種下面所述的棋型,并據此得出評價值,得到如下圖所示的靜態估值表:

根據這個表以及我們之前所談到的規則,我們就可以得到一個可以運行的AI 了。

進一步的優化

注意到,如果我們搜索到第四層,總共需要搜索:

224 + 224 * 223 + 224 * 223 * 222 + 224 * 223 * 222 * 221 = 2 461 884 544 個 狀

態節點,搜索如此多的狀態節點的開銷是十分可觀的,因此,我們提高效率的方式就鎖定到了:如何減少需要搜索的狀態節點。

我們可以采取以下方法來減少需要搜索的狀態節點:

我們可以利用經典的α-β剪枝算法對博弈樹剪枝。

我們可以每次搜索僅搜索落子點周圍 2*2 格范圍內存在棋子的位置,這樣可以避免搜索一些明顯無用的節點,而且可以大幅度提升整體搜索速度。

避免對必勝/負局面搜索,當搜索過程中出現了必勝/負局面的時候直接返回不再搜索, 因為此時繼續搜索是沒有必要的,直接返回當前棋局的估價值即可。

加入隨機化AI 的下棋方式,普通的AI 算法對于給定的玩家下棋方式會給出固定的回應, 這就導致玩家獲勝一次之后只要此后每次都按此方式下棋,都能夠獲勝。為了避免這種 情況,可以在 AI 選擇下子位置的時候,在估值相差不多的幾個位置中隨機挑選一個進行放置,以此增加AI 的靈活性。

規劃搜索順序,有很多有價值的下子點存在于更靠近棋盤中央的地方,如果從棋盤中央 向外搜索的話,則能夠提高α-β剪枝的效率,讓盡可能多的分支被排除。

實驗成果

(游戲中間界面)

(游戲中間界面)

實驗總結

通過本次實驗,加強了組員之間的溝通協調能力,同時也提高了我們對αβ減枝算法的 了解。我們更了解了五子棋相關的游戲規則以及一些技巧,拓寬了我們的知識面,有助于我 們在未來的生活中更好的與人交流。

同時,經過此次實驗,我們深入了解了棋類人工智能算法,進一步的提升了我們的專業 水平,有助于我們在未來的就業與科研崗位上走的更遠。

雖然αβ減枝實現起來非常容易,但是五子棋的局勢估計卻十分的有挑戰性,其局勢估 計的準確與否直接影響了程序的運行結果是否令人滿意,AI 是否能夠展現出足夠的智能。

本次實驗,由周宇星(1352652)和蔡樂文(1353100)完成。其中,周宇星設計并完成 了五子棋布局的估價函數,與蔡樂文共同完成了αβ減枝算法的研究與實現。蔡樂文設計并 完成了有關程序界面以及操作的功能。

源代碼

#include “opencv2/imgproc/imgproc.hpp” #include “opencv2/imgcodecs.hpp”
#include “opencv2/videoio/videoio.hpp” #include “opencv2/highgui/highgui.hpp”

#include <iostream>

#include <iostream> #include <cstdio> #include <cstring> #include
<cstdio> #include <cstdlib> #include <iomanip>

using namespace std; using namespace cv;

//sro 菜神 Orz

cv::Mat chessboard, whiteChess, blackChess, tmp, BGS;

int is_red(Vec3b X) {

// cout << (int)X[1] << ’ ’ << (int)X[2] << ’ ’ << (int)X[3] <<
endl;

return X[0] < 200 && X[1] < 200 && X[2] > 230;

}

cv::Mat BG;

//將棋子復制到背景畫面上

void imageCopyToBG(cv::Mat chess, int x, int y) {

x *= 35;

y *= 35;

int rows = chess.rows;

int cols = chess.cols;

for (int i = 0; i < rows; ++i) {

for (int j = 0; j < cols; ++j) {

if (!is_red(chess.at<Vec3b>(i, j))) {

BG.at<Vec3b>(x + i + 8, y + j + 8) = chess.at<Vec3b>(i, j);

}

}

}

}

/*

實現用的參數

*/

class CONFIG { public:

static const int BOARD_SIZE = 15;

static const int EMPTY = 0;

static const int USER_1 = 1;

static const int USER_2 = 2;

static const int AI_EMPTY = 0; // 無子

static const int AI_MY = 1; // 待評價子

static const int AI_OP = 2; // 對方子或不能下子

static const int MAX_NODE = 2;

static const int MIN_NODE = 1;

static const int INF = 106666666;

static const int ERROR_INDEX = -1;

//估價值

static const int AI_ZERO = 0;

static const int AI_ONE = 10;

static const int AI_ONE_S = 1;

static const int AI_TWO = 100;

static const int AI_TWO_S = 10;

static const int AI_THREE = 1000;

static const int AI_THREE_S = 100;

static const int AI_FOUR = 10000;

static const int AI_FOUR_S = 1000;

static const int AI_FIVE = 100000;

};

/*

棋盤格子

*/

class Grid :CONFIG { public:

int type; //類型

Grid() {

type = EMPTY;

}

Grid(int t) {

type = t;

}

void grid(int t = EMPTY) {

type = t;

}

int isEmpty() {

return type == EMPTY ? true : false;

}

};

/* 棋盤

*/

class ChessBoard :CONFIG { public:

Grid chessBoard[BOARD_SIZE][BOARD_SIZE];

ChessBoard() {

for (int i = 0; i < BOARD_SIZE; ++i)

for (int j = 0; j < BOARD_SIZE; ++j)

chessBoard[i][j].grid();

}

ChessBoard(const ChessBoard &othr) {

for (int i = 0; i < BOARD_SIZE; ++i)

for (int j = 0; j < BOARD_SIZE; ++j)

chessBoard[i][j].grid(othr.chessBoard[i][j].type);

}

/*

放置棋子

返回放置棋子是否成功

*/

bool placePiece(int x, int y, int type) {

if (chessBoard[x][y].isEmpty()) {

chessBoard[x][y].type = type;

return true;

}

return false;

}

};

/*

煞筆AI

*/

class Game :CONFIG { public:

ChessBoard curState; // 當前棋盤

bool isStart; // 是否進行中

int curUser; // 當前行棋人

int MAX_DEPTH; // 最大搜索層數

/*

開始并設定難度

*/

void startGame(int nd = 2) {

MAX_DEPTH = nd;

isStart = true;

curUser = USER_1;

}

/*

轉換行棋人

*/

void changeUser() {

curUser = curUser == USER_1 ? USER_2 : USER_1;

}

/*

根據給定type

A:待判斷棋子的類型

type:我方棋子的類型

返回A是待判斷棋子 無棋子 對方棋子

*/

int getPieceType(int A, int type) {

return A == type ? AI_MY : (A == EMPTY ? AI_EMPTY : AI_OP);

}

int getPieceType(const ChessBoard &board, int x, int y, int type) {

if (x < 0 || y < 0 || x >= BOARD_SIZE || y >= BOARD_SIZE)//
超出邊界按對方棋子算

return AI_OP;

else

return getPieceType(board.chessBoard[x][y].type, type);

}

/*

當前行棋人放置棋子

放置失敗返回失敗

放置成功

檢察游戲是否結束

轉換游戲角色后返回成功

*/

bool placePiece(int x, int y) {

if (curState.placePiece(x, y, curUser)) {

// 檢察行棋人是否勝利

if (isWin(x, y)) {

isStart = false; // 游戲結束

// return true;

}

changeUser(); // 轉換游戲角色

return true;

}

return false;

}

bool isWin(int x, int y) {

if (evaluatePiece(curState, x, y, curUser) >= AI_FIVE)

return true;

return false;

}

/*

以center作為評估位置進行評價一個方向的棋子

*/

int evaluateLine(int line[], bool ALL) {

int value = 0; // 估值

int cnt = 0; // 連子數

int blk = 0; // 封閉數

for (int i = 0; i < BOARD_SIZE; ++i) {

if (line[i] == AI_MY) { // 找到第一個己方的棋子

// 還原計數

cnt = 1;

blk = 0;

// 看左側是否封閉

if (line[i - 1] == AI_OP)

++blk;

// 計算連子數

for (i = i + 1; i < BOARD_SIZE && line[i] == AI_MY; ++i, ++cnt);

// 看右側是否封閉

if (line[i] == AI_OP)

++blk;

// 計算評估值

value += getValue(cnt, blk);

}

}

return value;

}

/*

以center作為評估位置進行評價一個方向的棋子(前后4格范圍內)

*/

int evaluateLine(int line[]) {

int cnt = 1; // 連子數

int blk = 0; // 封閉數

// 向左右掃

for (int i = 3; i >= 0; --i) {

if (line[i] == AI_MY) ++cnt;

else if (line[i] == AI_OP) {

++blk;

break;

}

else

break;

}

for (int i = 5; i < 9; ++i) {

if (line[i] == AI_MY) ++cnt;

else if (line[i] == AI_OP) {

++blk;

break;

}

else

break;

}

return getValue(cnt, blk);

}

/*

根據連字數和封堵數給出一個評價值

*/

int getValue(int cnt, int blk) {

if (blk == 0) {// 活棋

switch (cnt) {

case 1:

return AI_ONE;

case 2:

return AI_TWO;

case 3:

return AI_THREE;

case 4:

return AI_FOUR;

default:

return AI_FIVE;

}

}

else if (blk == 1) {// 單向封死

switch (cnt) {

case 1:

return AI_ONE_S;

case 2:

return AI_TWO_S;

case 3:

return AI_THREE_S;

case 4:

return AI_FOUR_S;

default:

return AI_FIVE;

}

}

else {// 雙向堵死

if (cnt >= 5)

return AI_FIVE;

else

return AI_ZERO;

}

}

/*

對一個狀態的一個位置放置一種類型的棋子的優劣進行估價

*/

int evaluatePiece(ChessBoard state, int x, int y, int type) {

int value = 0; // 估價值

int line[17]; //線狀態

bool flagX[8];// 橫向邊界標志

flagX[0] = x - 4 < 0;

flagX[1] = x - 3 < 0;

flagX[2] = x - 2 < 0;

flagX[3] = x - 1 < 0;

flagX[4] = x + 1 > 14;

flagX[5] = x + 2 > 14;

flagX[6] = x + 3 > 14;

flagX[7] = x + 4 > 14;

bool flagY[8];// 縱向邊界標志

flagY[0] = y - 4 < 0;

flagY[1] = y - 3 < 0;

flagY[2] = y - 2 < 0;

flagY[3] = y - 1 < 0;

flagY[4] = y + 1 > 14;

flagY[5] = y + 2 > 14;

flagY[6] = y + 3 > 14;

flagY[7] = y + 4 > 14;

line[4] = AI_MY; // 中心棋子

// 橫

line[0] = flagX[0] ? AI_OP : (getPieceType(state.chessBoard[x - 4][y].type,
type));

line[1] = flagX[1] ? AI_OP : (getPieceType(state.chessBoard[x - 3][y].type,
type));

line[2] = flagX[2] ? AI_OP : (getPieceType(state.chessBoard[x - 2][y].type,
type));

line[3] = flagX[3] ? AI_OP : (getPieceType(state.chessBoard[x - 1][y].type,
type));

line[5] = flagX[4] ? AI_OP : (getPieceType(state.chessBoard[x + 1][y].type,
type));

line[6] = flagX[5] ? AI_OP : (getPieceType(state.chessBoard[x + 2][y].type,
type));

line[7] = flagX[6] ? AI_OP : (getPieceType(state.chessBoard[x + 3][y].type,
type));

line[8] = flagX[7] ? AI_OP : (getPieceType(state.chessBoard[x + 4][y].type,
type));

value += evaluateLine(line);

// 縱

line[0] = flagY[0] ? AI_OP : getPieceType(state.chessBoard[x][y - 4].type,
type);

line[1] = flagY[1] ? AI_OP : getPieceType(state.chessBoard[x][y - 3].type,
type);

line[2] = flagY[2] ? AI_OP : getPieceType(state.chessBoard[x][y - 2].type,
type);

line[3] = flagY[3] ? AI_OP : getPieceType(state.chessBoard[x][y - 1].type,
type);

line[5] = flagY[4] ? AI_OP : getPieceType(state.chessBoard[x][y + 1].type,
type);

line[6] = flagY[5] ? AI_OP : getPieceType(state.chessBoard[x][y + 2].type,
type);

line[7] = flagY[6] ? AI_OP : getPieceType(state.chessBoard[x][y + 3].type,
type);

line[8] = flagY[7] ? AI_OP : getPieceType(state.chessBoard[x][y + 4].type,
type);

value += evaluateLine(line);

// 左上-右下

line[0] = flagX[0] || flagY[0] ? AI_OP : getPieceType(state.chessBoard[x -
4][y

- 4].type, type);

line[1] = flagX[1] || flagY[1] ? AI_OP : getPieceType(state.chessBoard[x
- 3][y

- 3].type, type);

line[2] = flagX[2] || flagY[2] ? AI_OP : getPieceType(state.chessBoard[x -
2][y

- 2].type, type);

line[3] = flagX[3] || flagY[3] ? AI_OP : getPieceType(state.chessBoard[x -
1][y

- 1].type, type);

line[5] = flagX[4] || flagY[4] ? AI_OP : getPieceType(state.chessBoard[x +
1][y

+ 1].type, type);

line[6] = flagX[5] || flagY[5] ? AI_OP : getPieceType(state.chessBoard[x +
2][y

+ 2].type, type);

line[7] = flagX[6] || flagY[6] ? AI_OP : getPieceType(state.chessBoard[x +
3][y

+ 3].type, type);

line[8] = flagX[7] || flagY[7] ? AI_OP : getPieceType(state.chessBoard[x +
4][y

+ 4].type, type);

value += evaluateLine(line);

// 右上-左下

line[0] = flagX[7] || flagY[0] ? AI_OP : getPieceType(state.chessBoard[x +
4][y

- 4].type, type);

line[1] = flagX[6] || flagY[1] ? AI_OP : getPieceType(state.chessBoard[x +
3][y

- 3].type, type);

line[2] = flagX[5] || flagY[2] ? AI_OP : getPieceType(state.chessBoard[x +
2][y

- 2].type, type);

line[3] = flagX[4] || flagY[3] ? AI_OP : getPieceType(state.chessBoard[x +
1][y

- 1].type, type);

line[5] = flagX[3] || flagY[4] ? AI_OP : getPieceType(state.chessBoard[x -
1][y

+ 1].type, type);

line[6] = flagX[2] || flagY[5] ? AI_OP : getPieceType(state.chessBoard[x -
2][y

+ 2].type, type);

line[7] = flagX[1] || flagY[6] ? AI_OP : getPieceType(state.chessBoard[x -
3][y

+ 3].type, type);

line[8] = flagX[0] || flagY[7] ? AI_OP : getPieceType(state.chessBoard[x -
4][y

+ 4].type, type);

value += evaluateLine(line);

return value;

}

/*

評價一個棋面上的一方

*/

int evaluateState(ChessBoard state, int type) {

int value = 0;

// 分解成線狀態

int line[6][17];

int lineP;

for (int p = 0; p < 6; ++p)

line[p][0] = line[p][16] = AI_OP;

// 從四個方向產生

for (int i = 0; i < BOARD_SIZE; ++i) {

// 產生線狀態

lineP = 1;

for (int j = 0; j < BOARD_SIZE; ++j) {

line[0][lineP] = getPieceType(state, i, j, type); /* | */

line[1][lineP] = getPieceType(state, j, i, type); /* - */

line[2][lineP] = getPieceType(state, i + j, j, type); /* \ */

line[3][lineP] = getPieceType(state, i - j, j, type); /* / */

line[4][lineP] = getPieceType(state, j, i + j, type); /* \ */

line[5][lineP] = getPieceType(state, BOARD_SIZE - j - 1, i + j, type);

/* / */

++lineP;

}

// 估計

int special = i == 0 ? 4 : 6;

for (int p = 0; p < special; ++p) {

value += evaluateLine(line[p], true);

}

}

return value;

}

/*

若x, y位置周圍1格內有棋子則搜索

*/

bool canSearch(ChessBoard state, int x, int y) {

int tmpx = x - 1;

int tmpy = y - 1;

for (int i = 0; tmpx < BOARD_SIZE && i < 3; ++tmpx, ++i) {

int ty = tmpy;

for (int j = 0; ty < BOARD_SIZE && j < 3; ++ty, ++j) {

if (tmpx >= 0 && ty >= 0 && state.chessBoard[tmpx][ty].type != EMPTY)

return true;

else

continue;

}

}

return false;

}

/*

給出后繼節點的類型

*/

int nextType(int type) {

return type == MAX_NODE ? MIN_NODE : MAX_NODE;

}

/*

state 待轉換的狀態

type 當前層的標記:MAX MIN

depth 當前層深

alpha 父層alpha值

beta 父層beta值

*/

int minMax(ChessBoard state, int x, int y, int type, int depth, int alpha, int
beta) {

ChessBoard newState(state);

newState.placePiece(x, y, nextType(type));

int weight = 0;

int max = -INF; // 下層權值上界

int min = INF; // 下層權值下界

if (depth < MAX_DEPTH) {

// 已輸或已勝則不繼續搜索

if (evaluatePiece(newState, x, y, nextType(type)) >= AI_FIVE) {

if (type == MIN_NODE)

return AI_FIVE; // 我方勝

else

return -AI_FIVE;

}

int i, j;

for (i = 0; i < BOARD_SIZE; ++i) {

for (j = 0; j < BOARD_SIZE; ++j) {

if (newState.chessBoard[i][j].type == EMPTY && canSearch(newState, i, j)) {

weight = minMax(newState, i, j, nextType(type), depth + 1, min, max);

if (weight > max)

max = weight; // 更新下層上界

if (weight < min)

min = weight; // 更新下層下界

// alpha-beta

if (type == MAX_NODE) {

if (max >= alpha)

return max;

}

else {

if (min <= beta)

return min;

}

}

else

continue;

}

}

if (type == MAX_NODE)

return max; // 最大層給出最大值

else

return min; // 最小層給出最小值

}

else {

weight = evaluateState(newState, MAX_NODE); // 評估我方局面

weight -= type == MIN_NODE ? evaluateState(newState, MIN_NODE) * 10 :
evaluateState(newState, MIN_NODE); // 評估對方局面

return weight; // 搜索到限定層后給出權值

}

}

int cnt[BOARD_SIZE][BOARD_SIZE];

/*

AI 行棋

*/

bool placePieceAI() {

int weight;

int max = -INF; // 本層的權值上界

int x = 0, y = 0;

memset(cnt, 0, sizeof(cnt));

for (int i = 0; i < BOARD_SIZE; ++i) {

for (int j = 0; j < BOARD_SIZE; ++j) {

if (curState.chessBoard[i][j].type == EMPTY && canSearch(curState, i, j)) {

weight = minMax(curState, i, j, nextType(MAX_NODE), 1, -INF, max);

cnt[i][j] = weight;

if (weight > max) {

max = weight; // 更新下層上界

x = i;

y = j;

}

}

else

continue;

}

}

return placePiece(x, y); // AI最優點

}

/*

控制臺打印。。。

*/

void show() {

chessboard.copyTo(BG);

for (int i = 0; i < BOARD_SIZE; ++i) {

for (int j = 0; j < BOARD_SIZE; ++j) {

if (curState.chessBoard[i][j].type == 1)

imageCopyToBG(blackChess, i, j);

if (curState.chessBoard[i][j].type == 2)

imageCopyToBG(whiteChess, i, j);

}

}

for (int i = 0; i < BOARD_SIZE; ++i) {

for (int j = 0; j < BOARD_SIZE; ++j) {

if (curState.chessBoard[i][j].type == 0)

cout << " -";

if (curState.chessBoard[i][j].type == 1)

cout << " X";

if (curState.chessBoard[i][j].type == 2)

cout << " O";

}

cout << endl;

}

imshow(“gobang”, BG);

cv::waitKey(5);

}

};

using namespace cv; using namespace std;

int X, Y = 0; int optIsOk = 1; Game G;

//使用回調函數輸入數據

static void onMouse(int event, int x, int y, int, void*)

{

if (event != EVENT_LBUTTONDOWN)

return;

if (!optIsOk) return;

X = x; Y = y;

optIsOk = 0;

}

int main(int argc, char** argv)

{

chessboard = cv::imread(“chessboard.bmp”);

tmp = cv::imread(“whiteChess.bmp”);

resize(tmp, whiteChess, Size(30, 30), 0, 0, CV_INTER_LINEAR);

tmp = cv::imread(“blackChess.bmp”);

resize(tmp, blackChess, Size(30, 30), 0, 0, CV_INTER_LINEAR);

namedWindow(“gobang”, 1);

setMouseCallback(“gobang”, onMouse, 0);

chessboard.copyTo(BG);

imshow(“gobang”, BG);

cv::waitKey(50);

int flag = 0;

G.startGame(4);

for (;😉

{

G.placePieceAI();

G.show();

G.placePieceAI();

G.show();

optIsOk = 1;

// }

cv::waitKey(5);

}

return 0;

}

總結

以上是生活随笔為你收集整理的基于C的α-β剪枝算法实现的AI五子棋游戏的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

激情综合亚洲精品 | 久久精品视频国产 | 国产精品成人免费精品自在线观看 | 婷婷色网站 | 97电影手机版 | 五月天六月婷婷 | 中文字幕在线播放av | 国产精品短视频 | 久久久免费高清视频 | 欧洲一区精品 | 特级黄色片免费看 | 丁香综合 | 国产精品免费观看视频 | 国产国语在线 | 日韩试看| 99色免费 | 久久精品一二三区 | 日韩午夜电影 | 日韩欧美一区二区三区视频 | 干 操 插 | 91精品亚洲影视在线观看 | 日韩欧美视频一区二区 | 激情中文在线 | 国外成人在线视频网站 | 四虎影视成人永久免费观看视频 | 在线免费观看视频一区二区三区 | 久久久亚洲网站 | 精品国内自产拍在线观看视频 | 欧美成天堂网地址 | 国产亚洲视频在线免费观看 | 黄色精品在线看 | 国产精品免费麻豆入口 | 久久99久久99精品免视看婷婷 | 免费毛片一区二区三区久久久 | 亚洲欧洲精品在线 | 久久成人午夜 | 成人毛片在线观看 | 亚洲精品成人在线 | 国产精品成人久久久久久久 | 国产精品a级 | 月丁香婷婷 | 亚洲精品美女在线观看播放 | 国产精品久久久久国产a级 激情综合中文娱乐网 | 久久99国产精品久久99 | 久久精品一区二区三区四区 | 国产精品久久久久久久久久白浆 | 亚洲午夜久久久久久久久电影网 | 亚洲h在线播放在线观看h | 久久九九久久九九 | 午夜久久美女 | 久久免费看视频 | 国产精品 中文字幕 亚洲 欧美 | 91香蕉视频污在线 | 五月天视频网站 | 最新午夜电影 | 国产一区二区在线精品 | 国产一区二区三区网站 | 日本aa在线 | 日韩二区精品 | 国产精品都在这里 | 九九热免费视频在线观看 | 久久免费电影网 | 最近更新好看的中文字幕 | 日韩在线观看视频免费 | 97国产视频 | 性色大片在线观看 | 99视频精品免费观看, | 蜜桃av综合网 | 亚洲精品国产精品国自产在线 | 色偷偷88888欧美精品久久久 | 亚洲欧美日韩一二三区 | 伊人婷婷激情 | 在线观看免费国产小视频 | 亚洲精品天天 | 久久久久久久久久久福利 | 天天操导航 | 日韩免费久久 | 五月婷婷av在线 | 国产精品系列在线观看 | 国产一级91| 人人舔人人插 | 欧美激情精品久久久久久变态 | 视频一区在线播放 | 91精品国产综合久久福利 | 97福利在线观看 | 欧美日韩免费在线视频 | 国产精品视频99 | 国产精品美女免费看 | 久久免费99 | 久草精品国产 | 国产精品第一页在线观看 | 日韩在线欧美在线 | 最新av网址在线观看 | 久草视频在线免费播放 | 五月激情久久 | 国产精品福利久久久 | 国产午夜精品一区 | 九九热精| 国产亚洲精品xxoo | 欧美精品乱码久久久久久 | 日韩大片在线观看 | 欧美少妇xx | 久久免费视频在线 | 97超碰精品 | 成人性生交大片免费看中文网站 | 99精品视频免费观看视频 | 日韩在线免费小视频 | 久久黄色a级片 | 久草青青在线观看 | 日韩av成人在线观看 | 日韩字幕在线 | 久草在线中文视频 | 操处女逼| 日韩免费一区二区三区 | 亚洲精品视频大全 | 国产精品福利午夜在线观看 | 五月开心综合 | 国产99久 | 超碰人人干人人 | 午夜三级在线 | 亚洲天堂网在线观看视频 | 69国产盗摄一区二区三区五区 | av免费网站观看 | 色综合在 | 久久精品小视频 | 久久久午夜电影 | 播五月婷婷 | 久久黄色免费视频 | 国产最新视频在线 | 国产免费又粗又猛又爽 | 伊人久久精品久久亚洲一区 | 色五丁香 | 国产精品一码二码三码在线 | 国产精品久久久久久久久久久不卡 | 久久国产免 | 成年人免费在线观看 | 看国产黄色大片 | 精品国内自产拍在线观看视频 | 久久久亚洲国产精品麻豆综合天堂 | 亚洲欧美视频在线播放 | 欧美精品一二三 | av免费网| 国产精品美女久久 | 四虎永久免费在线观看 | av黄色国产| 国产精品久久久久一区 | 国产一区二区久久 | 中文字幕一区在线观看视频 | 91.dizhi永久地址最新 | 久久草av | 国内视频一区二区 | 天天干,天天射,天天操,天天摸 | 99久久99久久免费精品蜜臀 | 9999精品视频| 欧美男男tv网站 | 日韩精品免费专区 | 久久久久久久久久免费 | 日韩电影中文字幕在线观看 | 国产小视频在线播放 | 九九九九色 | 欧美日韩国产精品爽爽 | 中文字幕在线观看三区 | 91香蕉国产| 亚洲作爱 | 欧美精品乱码久久久久久按摩 | 欧美激情综合五月色丁香 | 狠狠插天天干 | 日本精品在线视频 | 9在线观看免费高清完整版在线观看明 | 久久精品观看 | 人人爽人人乐 | 欧美视频国产视频 | 国产黄免费看 | 亚洲精品国精品久久99热一 | 九九热只有这里有精品 | 91pony九色丨交换 | 免费看的毛片 | 一区二区在线不卡 | 国产精品成人品 | 成人久久 | 996久久国产精品线观看 | 97在线免费视频观看 | 日韩一区精品 | www操操操| 日本最新一区二区三区 | 亚洲精品午夜久久久久久久久久久 | 天堂av高清 | 在线观看视频在线观看 | 成人免费观看a | 亚洲综合成人专区片 | 日韩av图片 | 在线观看亚洲视频 | 99久久精品无码一区二区毛片 | 99精品一区二区 | 日韩电影中文字幕在线观看 | 日韩亚洲精品电影 | 福利电影一区二区 | 2022久久国产露脸精品国产 | 一区二区三区四区精品视频 | 久草在线综合网 | 91一区二区三区在线观看 | 人人看人人艹 | 久久夜色精品亚洲噜噜国4 午夜视频在线观看欧美 | av中文在线 | 欧美精品一区二区在线观看 | 国产二区视频在线 | 日韩欧美一二三 | 亚洲天堂精品视频在线观看 | 九色精品免费永久在线 | 色a网| 91黄色影视 | 国产视频在线观看免费 | 欧美国产精品一区二区 | 亚洲精品中文字幕视频 | 超碰97国产精品人人cao | 午夜av在线电影 | 免费在线观看不卡av | 亚洲精品影视 | 天干啦夜天干天干在线线 | 午夜av在线电影 | 国产精品久久久久av免费 | 欧美一级黄色网 | 国产一区麻豆 | 国产精品18久久久久白浆 | 狠狠操夜夜 | 9999精品视频 | 91传媒激情理伦片 | 国产精品免费观看在线 | 天天干天天干天天干 | 激情丁香在线 | 国产v亚洲v | 99亚洲视频 | 在线观看日韩av | 国产91小视频 | 国产日韩欧美在线观看视频 | 免费看短 | 9797在线看片亚洲精品 | 国产原厂视频在线观看 | 91亚洲在线| 中文字幕中文字幕在线一区 | 一区二区三区在线观看中文字幕 | 日韩电影中文字幕在线 | 成人av在线看 | 看黄色.com| 亚洲精品乱码久久久久久高潮 | 国产精品久久 | 在线免费观看国产精品 | 久久福利综合 | 一区二区三区视频在线 | 日日骑| 久久国产一区二区三区 | 国产色视频网站2 | www.夜夜爱 | 国产精品第二十页 | 欧美成人一区二区 | 国产精品久久伊人 | 国产精品美乳一区二区免费 | 成人wwwxxx视频 | 狠狠干免费 | 欧美激情精品 | 久久成年人网站 | 91精品国产福利 | 国产日韩精品一区二区三区在线 | 九九涩涩av台湾日本热热 | 欧美日韩国内在线 | 不卡电影一区二区三区 | 久久精品这里热有精品 | 国产vs久久 | 国产精品一区在线播放 | 成人精品久久 | www国产亚洲精品久久网站 | 超碰午夜| 人人射 | 亚洲永久精品在线观看 | 亚洲国产精品视频 | 欧美日韩一区二区三区视频 | 亚洲国产欧美在线看片xxoo | 久草精品视频 | 欧美激情第28页 | 69亚洲精品 | 成人蜜桃视频 | 免费看一级黄色大全 | 国产成人一区二区在线观看 | 免费97视频 | 国产亚洲精品v | 婷婷色综合 | 久艹视频免费观看 | 国产视频在线观看免费 | 国产欧美精品在线观看 | 婷婷视频在线播放 | 一级片免费在线 | 国产精品18久久久久vr手机版特色 | 天天色综合三 | 精品视频免费观看 | 成人97视频 | 欧美日韩在线视频免费 | 亚洲无毛专区 | 国产一卡在线 | 国产在线不卡 | 99热在线国产 | 亚洲日本在线视频观看 | 日日麻批40分钟视频免费观看 | 亚洲国产高清视频 | 久久久网页 | 深爱激情五月综合 | 午夜影院一级片 | 中文字幕专区高清在线观看 | 亚洲精品456在线播放第一页 | 午夜精品久久久久久久久久 | 天天干天天搞天天射 | 国产精品视频免费 | 国产精品资源在线观看 | 国产精品午夜8888 | 日韩激情精品 | 免费看一级一片 | 手机在线观看国产精品 | 久草电影网 | 人人舔人人爱 | 成人免费在线播放视频 | 国产剧情一区在线 | 偷拍福利视频一区二区三区 | 国产精品一区二区三区在线免费观看 | 欧美精品视 | 96亚洲精品久久 | 免费合欢视频成人app | 五月婷婷视频在线观看 | 日韩欧美视频在线免费观看 | 欧美成年黄网站色视频 | 狠狠操狠狠干2017 | 日日精品| 黄色三级av | 激情av综合| 成人理论电影 | 成人av播放 | 精品免费99久久 | 亚洲无吗视频在线 | 夜夜操天天干, | 久久在线免费视频 | 久久黄色免费 | 国产精品2018 | 人人爽夜夜爽 | 黄色网址国产 | 久久久黄视频 | 欧美精品久久人人躁人人爽 | 亚洲黄色片在线 | 亚洲国产精品日韩 | 亚洲激情综合网 | 欧美日韩视频一区二区 | 日韩精品一区电影 | 日韩欧美视频一区 | 国产精品久久久久一区二区三区共 | 成人av.com| jizz18欧美18| 欧美怡红院| 亚洲国产免费看 | 国产黄色在线看 | 96av麻豆蜜桃一区二区 | 久久福利小视频 | 免费看污网站 | 欧美一级视频在线观看 | 久久精品一区 | 五月香视频在线观看 | 九九免费精品视频 | 国产不卡视频在线 | 亚洲经典精品 | 国产黄色大片 | 国产字幕在线观看 | 手机在线小视频 | 国产a级精品 | 成人在线一区二区三区 | 亚洲精品中文字幕视频 | 日一日操一操 | 午夜婷婷综合 | 99在线播放 | 久久久综合香蕉尹人综合网 | www.人人干 | www.久久com| 免费成人黄色 | 人人澡人人爽欧一区 | 欧美aa在线 | 亚洲国产视频网站 | 最近中文字幕视频网 | 91视频免费国产 | 色婷婷天天干 | 亚洲精品高清视频在线观看 | 久久老司机精品视频 | 日韩字幕| 婷婷激情五月 | 日韩成人精品在线观看 | 中文在线a∨在线 | 人人插人人艹 | 欧美另类亚洲 | 久久看视频 | 黄色小说在线免费观看 | 久久伊人色综合 | 国产精品毛片一区视频播不卡 | 999久久国精品免费观看网站 | 免费在线观看不卡av | 亚洲欧美日韩一二三区 | 国产伦精品一区二区三区免费 | 视频在线观看国产 | 不卡的av电影 | av看片在线 | 欧美日韩精品免费观看 | 免费激情网| 99久久综合精品五月天 | 亚洲少妇激情 | 日韩欧美在线免费 | 天天综合网国产 | 国产精品免费观看国产网曝瓜 | 免费看片黄色 | 在线亚洲免费视频 | 91精品国产综合久久久久久久 | 日日麻批40分钟视频免费观看 | 亚洲伊人成综合网 | 国产精品大片在线观看 | 国产成人精品999在线观看 | 国产精品人人做人人爽人人添 | 99精品国产在热久久下载 | 精品成人在线 | 国产精品欧美日韩 | 日女人免费视频 | 麻豆影视在线观看 | 国产特级毛片aaaaaa毛片 | 中文字幕一区二区三区四区视频 | 中文字幕精品一区二区三区电影 | 狠狠综合久久 | 国产精品日韩欧美 | 99久久精| 在线成人一区 | 97伊人网 | 人人插人人艹 | 中文字幕4| 色天天久久 | 日本中文在线观看 | 国产日产精品一区二区三区四区 | 日韩精品一区二区在线观看视频 | 五月综合在线观看 | 91精品国产一区二区三区 | 国产伦精品一区二区三区四区视频 | 五月婷婷激情 | 国产精品白浆视频 | 激情综合色综合久久 | 亚洲色图27p | 九九在线高清精品视频 | 成人精品久久久 | 亚洲成aⅴ人片久久青草影院 | 四川妇女搡bbbb搡bbbb搡 | 黄色软件网站在线观看 | 国产精品黄色av | 奇米影视8888 | 欧美激情第一区 | 久久综合干 | 精品成人a区在线观看 | 99精品国产高清在线观看 | 色99中文字幕 | 亚洲精品视频一 | 亚洲午夜久久久影院 | 综合激情网... | 国产精品免费成人 | 一级片免费观看 | 国产精品视频你懂的 | 中文字幕中文中文字幕 | 一区二区三区电影在线播 | 国产在线一区二区三区播放 | 00av视频| 日韩av有码在线 | 在线观看精品视频 | 欧美 激情 国产 91 在线 | 欧美日韩性视频在线 | 久久久免费视频播放 | 久久国产精品一区二区 | h视频在线看 | 久久视频一区二区 | 国产成人精品综合久久久久99 | 国产色女| 欧美日韩一区久久 | 五月天高清欧美mv | 天天看天天干 | 国产免费久久av | 免费av网址大全 | 天天躁日日躁狠狠躁 | 欧美一区二区三区在线播放 | 去看片| 在线观看视频国产 | 免费观看性生活大片3 | 五月婷视频 | 成年人网站免费观看 | 欧美aaa一级| 免费a v视频 | 探花视频在线观看 | jizz18欧美18 | 欧美国产一区在线 | 国产一级黄色av | 不卡电影一区二区三区 | 69精品久久 | 久久久一本精品99久久精品 | 久久精品视频99 | 日韩系列在线观看 | 亚洲精品视频www | 精品一区二区免费 | 黄色动态图xx | 成人免费91 | 黄污视频网站 | 日韩精品在线视频 | 国语精品免费视频 | 精品嫩模福利一区二区蜜臀 | www.天天色 | 欧美成人影音 | 二区视频在线 | 波多野结衣网址 | 天天激情站 | 欧美一区二区在线免费观看 | 91精品国产亚洲 | 国产精品1区2区3区 久久免费视频7 | 五月天婷亚洲天综合网鲁鲁鲁 | 国产日产精品一区二区三区四区的观看方式 | 国产亚洲精品福利 | 久久a国产| 久久久久亚洲最大xxxx | 日韩亚洲欧美中文字幕 | 97视频在线观看网址 | 日韩美女黄色片 | 91日本在线播放 | 天天操人| 超碰av在线免费观看 | 91精品在线视频 | 五月婷婷视频 | 国产一区二区在线免费播放 | 久久久影院官网 | 国产成人av福利 | 久久婷婷丁香 | 欧美日韩观看 | 国产精品成人久久久久久久 | 在线观看日韩精品 | 91人人视频在线观看 | 中国一级片免费看 | 91成人在线视频观看 | 久久国产欧美日韩 | 高清精品在线 | 在线观看视频黄色 | 午夜性盈盈 | 国产一二三在线视频 | 青青草国产精品视频 | 久久精品这里热有精品 | 日女人电影 | 97成人资源站 | 久久九九影视网 | 一区二区激情视频 | 人人爱人人舔 | 亚洲在线激情 | 人人搞人人爽 | 天天色天天操综合 | 亚洲精品高清在线 | 亚洲影院一区 | 91亚洲影院 | 亚洲精品国产精品国自 | 日日干激情五月 | 日韩精品中文字幕在线不卡尤物 | 精品美女久久久久 | 综合久久久久 | 欧美日韩在线电影 | 日批视频在线 | 欧美成人在线免费 | 欧美色图亚洲图片 | 免费午夜在线视频 | 九九色在线观看 | 91在线免费视频观看 | 日韩三级在线 | 草免费视频 | 999久久| 亚洲欧美国产精品va在线观看 | 午夜精品久久久久久99热明星 | 国产精品视频在线看 | 99视频这里只有 | 国产成人一区二区三区久久精品 | 国产亚洲精品久久19p | 毛片无卡免费无播放器 | 96亚洲精品久久久蜜桃 | 香蕉视频91 | 97超碰免费在线 | 色婷婷激婷婷情综天天 | 久久综合精品国产一区二区三区 | 国产精品99久久久久久久久 | 成人在线观看网址 | 亚洲精品视频免费在线 | 成人精品视频久久久久 | 中文字幕国产一区二区 | 在线免费视频一区 | 一级一片免费观看 | 91av99 | 不卡视频国产 | 日狠狠 | 日韩系列 | 草久在线观看 | 狠狠狠操| 国产黄色精品 | 青草视频在线 | 亚洲一区二区精品 | 亚州精品天堂中文字幕 | 国产国语在线 | 91精品国产麻豆 | 美女网站色在线观看 | 久久久色 | 亚洲国产高清在线观看视频 | 成人中文字幕在线 | 激情综合五月天 | 国产精品福利一区 | 福利一区视频 | 亚洲精品短视频 | 中文字幕最新精品 | 国产在线探花 | 免费观看日韩 | 91麻豆精品国产91久久久更新时间 | 免费日韩在线 | 免费网站v | 中文字幕色在线 | 亚洲免费不卡 | 99精品在线观看 | 免费日韩在线 | 亚洲国产99| 最近日本字幕mv免费观看在线 | 欧美韩国日本在线 | 永久黄网站色视频免费观看w | 亚洲h在线播放在线观看h | 区一区二区三区中文字幕 | 中文一二区 | 久草视频在线资源站 | 国产一区高清在线观看 | 国产91学生| 午夜精品一区二区三区可下载 | 狠狠干婷婷 | 久久久久亚洲精品成人网小说 | 欧美成人区 | 免费看污污视频的网站 | 91视频在线国产 | 久久激情五月丁香伊人 | 国产久视频 | 亚洲日韩精品欧美一区二区 | www日韩欧美 | 五月婷婷色综合 | 伊人va| www.com.日本一级 | 亚洲一片黄 | 日韩高清国产精品 | 精品自拍sae8—视频 | 91久久精品日日躁夜夜躁国产 | jizz999| 狠狠色丁香婷综合久久 | 国产成人精品免高潮在线观看 | 久久精品视频在线看 | 国产精品永久在线观看 | 欧美日韩一级视频 | 人人草在线视频 | 天天在线视频色 | 中文字幕丝袜一区二区 | 中文字幕在线乱 | 日本精品va在线观看 | 中文字幕电影网 | 天堂久色| 久久在线精品 | 韩国av免费观看 | 国产免费久久av | 99热在线免费观看 | 欧美一级久久 | 亚洲视频精品在线 | 最近av在线 | 亚洲一级特黄 | 国产精品免费在线观看视频 | 人人干狠狠操 | 在线黄色观看 | 久久久久久久久久久久亚洲 | 国产91aaa| 日韩电影在线观看一区二区 | 国产色爽 | 99免费| 亚洲在线精品 | 97超碰在线资源 | 欧美一区二视频在线免费观看 | a久久免费视频 | 久久久久久97三级 | 在线观看日本韩国电影 | 伊人影院在线观看 | 最近中文字幕免费大全 | 99热精品国产一区二区在线观看 | 欧美成人精品在线 | 一区二区欧美在线观看 | 亚洲成人第一区 | 国产在线观看二区 | 色综合久久久 | 亚洲精品久 | 综合亚洲视频 | 天天性天天草 | 天天干,天天射,天天操,天天摸 | 视频91 | 黄色大片日本免费大片 | 国产精品免费视频久久久 | 亚洲专区在线播放 | 国产精品一区二区三区四区在线观看 | 日本aaaa级毛片在线看 | 天天av资源 | 久久精品亚洲精品国产欧美 | 婷婷在线色| 91精品国| 黄色精品在线看 | 不卡的av电影在线观看 | 日韩欧美区 | 91九色视频观看 | 在线观看av黄色 | av在线专区| 欧美中文字幕第一页 | 欧美一级艳片视频免费观看 | 丰满少妇对白在线偷拍 | 国产专区第一页 | 日韩精品偷拍 | 国产a视频免费观看 | 欧美91成人网 | 国内精品在线观看视频 | 伊人五月婷 | 亚洲天堂首页 | 亚洲一区美女视频在线观看免费 | 久草新在线 | 超碰97在线资源站 | 日日爱夜夜爱 | 日本精品久久久久中文字幕5 | 激情伊人 | 伊人射| 成人毛片100免费观看 | 激情综合啪啪 | 91综合色 | 久久国产热视频 | 91经典在线 | 国产精品乱码一区二区视频 | 亚洲精品大片www | 天天色天天搞 | 国产一区在线免费观看视频 | 狠狠操狠狠操 | 很黄很色很污的网站 | 亚洲精品h | 亚洲黄色一级电影 | 免费h在线观看 | 中文字幕一区二 | 国内精品久久久久影院男同志 | 欧美精品在线视频观看 | 日韩免费一级a毛片在线播放一级 | 国产精品久久人 | 91亚洲精品视频 | 亚洲日日射 | 色婷婷综合在线 | 国产亚洲欧洲 | 欧美99热| 奇米777777| 婷婷视频 | 九九免费在线观看 | 91精品国产入口 | 久久人人爽人人爽 | 狠狠干夜夜操天天爽 | 久久综合免费视频 | 日韩精品一二三 | 国产一区二区免费 | av在线免费观看黄 | av日韩不卡| 亚洲在线成人精品 | 日韩久久久久久久久久久久 | 欧美精品成人在线 | 丁香国产视频 | 国产一区二区久久久久 | 一级成人免费 | 欧美激情视频在线观看免费 | 美女视频久久黄 | 中文字幕在线观看三区 | 成人网中文字幕 | www.99在线观看 | 日韩二区三区在线 | 91理论片午午伦夜理片久久 | 天天操天天舔天天干 | 国产91精品看黄网站在线观看动漫 | www蜜桃视频 | 日本三级在线观看中文字 | 国产综合视频在线观看 | 欧美激情xxxx性bbbb | 夜夜视频资源 | 人人爽人人爱 | 欧美91在线| 精品久久久久久国产91 | av片在线看 | 国产精品视频在线看 | 国产精品美女久久久久久久久 | 99爱精品视频 | 波多野结衣精品 | 四虎在线影视 | 99久久久久成人国产免费 | 国产精品一区在线观看 | 久久av不卡| 国产视频不卡一区 | 久久久久国产精品厨房 | 香蕉在线观看视频 | 欧美一级片播放 | 国产午夜精品一区二区三区 | 91精品国产91久久久久久三级 | 少妇性色午夜淫片aaaze | 久久精品免费电影 | 美女视频a美女大全免费下载蜜臀 | 日韩视频免费观看高清 | 国产精品久久99精品毛片三a | 日本公妇在线观看 | 久久久久免费精品国产 | 91漂亮少妇露脸在线播放 | 国产 日韩 欧美 自拍 | 日韩精品一区二区三区免费观看视频 | 日本中文字幕在线一区 | 96精品高清视频在线观看软件特色 | 五月综合网站 | 黄色小说视频在线 | 国产小视频91 | 国产无套精品久久久久久 | 欧美综合在线视频 | 欧美日韩国产精品一区二区亚洲 | 国产精品99页 | 婷婷丁香激情五月 | 日韩网站中文字幕 | 欧美精品中文字幕亚洲专区 | 日产乱码一二三区别免费 | 成人在线网站观看 | 国产精品涩涩屋www在线观看 | 毛片激情永久免费 | 国产在线97 | 国产日韩中文在线 | 一区二区视频在线免费观看 | 国产传媒中文字幕 | 亚洲国产字幕 | 国产精品麻豆视频 | 国产精品视频最多的网站 | 夜夜躁狠狠燥 | 91亚洲夫妻 | 视频在线观看日韩 | 亚洲午夜av电影 | 国产精品一区二区久久国产 | 欧美激情va永久在线播放 | 日本中文字幕电影在线免费观看 | 我要色综合天天 | 国产91在线观| 夜夜操天天操 | 婷婷激情5月天 | 在线观看一区二区精品 | 久久国产片 | 天天操天天添 | 久久精品一区二区 | 狠狠综合久久av | 日韩视频免费观看高清完整版在线 | 亚洲视频一 | a黄色| 国产福利91精品张津瑜 | 97超级碰碰碰视频在线观看 | 久久理论片 | 久久夜色精品国产欧美乱极品 | 午夜精品一区二区三区四区 | 色婷婷丁香 | av免费看在线 | 精品久久网 | 成人av在线播放网站 | 日韩精品在线视频 | 999热视频 | 黄色av网站在线免费观看 | 国产高清网站 | 亚洲桃花综合 | 天堂在线视频免费观看 | 亚洲电影久久久 | 操操操人人 | 精品亚洲一区二区三区 | 99精品在线免费在线观看 | 国产又粗又猛又黄 | 伊甸园永久入口www 99热 精品在线 | 91久久一区二区 | 91视频免费视频 | 九九久久久久久久久激情 | 日韩一区二区三区在线观看 | 在线网站黄 | 在线精品播放 | 91在线观 | 特级西西444www高清大视频 | 中文字幕乱码日本亚洲一区二区 | 一区二区电影在线观看 | 国产不卡免费视频 | 国产91精品在线观看 | 亚洲欧美日韩国产一区二区三区 | 国产一二区在线观看 | 久久免费视频一区 | 免费在线观看av | 草久热 | 国产精品美女久久久久久免费 | 黄色三级免费网址 | 福利一区在线视频 | 亚洲一级免费电影 | 玖玖玖国产精品 | 久久黄色片 | 夜添久久精品亚洲国产精品 | 国产九色视频在线观看 | 视频高清| 97视频人人澡人人爽 | 久草视频免费观 | 国产成人久久 | 日韩色一区二区三区 | 久草视频在线资源 | 国产精品私人影院 | 国产专区欧美专区 | 黄色一级大片在线免费看产 | 久久久久久久久久电影 | 国产又黄又爽又猛视频日本 | 97超碰国产在线 | 99精品在线免费 | www..com黄色片| 97国产情侣爱久久免费观看 | 中文字幕黄色av | 亚洲aⅴ乱码精品成人区 | 免费男女网站 | 视频高清| 国产高清精品在线观看 | 少妇啪啪av入口 | 国产精品对白一区二区三区 | 麻豆系列在线观看 | 97成人资源 | 国产在线一区二区 | 国产色妞影院wwwxxx | www色网站| 久久久影院一区二区三区 | www操操操| 精品欧美一区二区精品久久 | 成年人免费在线看 | www.天天干 | 国产亚洲字幕 | 99视频精品免费视频 | 99精品国产99久久久久久97 | 久久久视频在线 | 亚洲免费精品视频 | 香蕉网在线观看 | 久久综合色天天久久综合图片 | 一区国产精品 | 中文字幕在线精品 | 天天伊人狠狠 | 九九色视频 | 日韩av电影国产 | 91香蕉亚洲精品 | 91女神的呻吟细腰翘臀美女 | 欧美综合色 | 91精品麻豆 | 国产日产高清dvd碟片 | 日韩专区中文字幕 | 国偷自产中文字幕亚洲手机在线 | 一区二区高清在线 | 国内精品久久天天躁人人爽 | 久久久久久国产精品亚洲78 | 久草电影免费在线观看 | 亚洲国产精品小视频 | 久久99九九99精品 | 日韩视频一区二区三区在线播放免费观看 | 午夜久久久精品 | 最近中文字幕免费视频 | 日韩精品一区在线观看 | 美女激情影院 | 狠狠操狠狠干天天操 | 99久久精品网 | 99久久精品国产一区二区三区 | 精品成人在线 | 成人久久久久久久久久 | 99 国产精品| 国偷自产中文字幕亚洲手机在线 | 少妇性色午夜淫片aaaze | 天天干天天做天天操 | 五月婷丁香网 | 久久优 | 色婷婷九月 | 国产乱对白刺激视频不卡 | japanese黑人亚洲人4k | 中文字幕一区二区三区四区久久 | 丝袜护士aⅴ在线白丝护士 天天综合精品 | 久久国产午夜精品理论片最新版本 | 视频 国产区| 久久精品久久精品久久精品 | 日韩,精品电影 | 欧美国产大片 | 夜夜躁狠狠躁日日躁视频黑人 | 国产伦精品一区二区三区无广告 | 一区二区不卡视频在线观看 | 国产99在线免费 | 久久99精品久久久久久久久久久久 | av电影在线免费 | 国产精品美女999 | 久久国产麻豆 | 国产一区二区三区在线 | 国产91精品看黄网站 | 欧美一区二区在线 | 在线观看mv的中文字幕网站 | 黄色大全在线观看 | 日韩一级电影在线观看 | 日本在线观看中文字幕 | 国产一区免费看 | 欧美日本一区 |