99精品久久精品一区二区-亚洲熟妇无码?v在线播放-日本国产精品无码字幕在线观看-久久久亚洲永夜AV-亚洲一级无码一区二区一-免费国产成高清人在线视频-中文字幕乱码免费观看-国产毛片精品妇女久久久

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線(xiàn)實(shí)戰(zhàn)洞察。

VS2010 VC++圍棋游戲開(kāi)發(fā):MFC實(shí)現(xiàn)與規(guī)則解析

VS2010 VC++圍棋游戲開(kāi)發(fā):MFC實(shí)現(xiàn)與規(guī)則解析 簡(jiǎn)介一套在VS2010環(huán)境下使用VCMFC編寫(xiě)的圍棋游戲完整工程面向C入門(mén)者和棋類(lèi)游戲開(kāi)發(fā)愛(ài)好者幫助理解從窗口界面到棋盤(pán)數(shù)據(jù)結(jié)構(gòu)、玩家交互與對(duì)弈規(guī)則的落地過(guò)程。壓縮包共33個(gè)文件主體為10個(gè).h頭文件和8個(gè).cpp源文件此外還有bmp/ico界面資源、rc資源描述、sln/proj工程文件及說(shuō)明文檔整體僅164KB適合快速下載并直接打開(kāi)工程研讀。代碼將棋盤(pán)、棋子、玩家等拆分為獨(dú)立模塊棋盤(pán)類(lèi)負(fù)責(zé)狀態(tài)管理棋子類(lèi)處理落點(diǎn)與顏色玩家類(lèi)接收行列輸入實(shí)現(xiàn)落子合法性判斷與五子連珠勝負(fù)檢測(cè)并給出基于深度優(yōu)先搜索的簡(jiǎn)易AI構(gòu)想壓縮包內(nèi)還附有待解決問(wèn)題清單便于學(xué)習(xí)者沿著作者的思考脈絡(luò)進(jìn)行二次開(kāi)發(fā)或排錯(cuò)。已有98人學(xué)習(xí)特別適合想在VS2010/MFC環(huán)境中快速上手圍棋或同類(lèi)棋類(lèi)項(xiàng)目的人群。1. 拿到「VS2010環(huán)境編寫(xiě)的VC圍棋游戲.rar」先判斷這份代碼值不值得花時(shí)間VS2010環(huán)境編寫(xiě)的VC圍棋游戲這個(gè)壓縮包打開(kāi)后最怕兩種結(jié)局雙擊 .sln 報(bào)版本不兼容或編譯通過(guò)卻一啟動(dòng)就閃退。這類(lèi)項(xiàng)目十有八九是 VC 寫(xiě)的 MFC 對(duì)話(huà)框程序棋盤(pán)畫(huà)在自繪控件上落子走消息響應(yīng)代碼量在 1000 到 3000 行之間正好卡在「能讀懂」和「能改成自己的」的分界線(xiàn)上。把它跑通能換到什么一份可斷點(diǎn)調(diào)試的圍棋規(guī)則實(shí)現(xiàn)——?dú)狻⑻嶙?、劫、禁著點(diǎn)都是獨(dú)立函數(shù)一個(gè)用 GDI 做 2D 繪圖的現(xiàn)成范本——畫(huà) 19 路棋盤(pán)、把鼠標(biāo)點(diǎn)擊換算成格點(diǎn)還有一個(gè)能直接替換評(píng)分函數(shù)的 AI 殼。這篇文章寫(xiě)給三類(lèi)人學(xué) VC/MFC 但缺項(xiàng)目練手的學(xué)生有圍棋算法卻卡在繪圖環(huán)節(jié)的開(kāi)發(fā)者以及打開(kāi)別人工程卻編譯不過(guò)、需要快速定位問(wèn)題的從業(yè)者。下面按「認(rèn)骨架 → 寫(xiě)規(guī)則 → 畫(huà)界面 → 排坑 → 加 AI」的路徑拆開(kāi)重建每步都給能直接復(fù)制的代碼和參數(shù)。2. 從 rar 到可編譯工程認(rèn)文件、定數(shù)據(jù)結(jié)構(gòu)、理清消息路由2.1 先認(rèn)文件從 .sln、.vcxproj 和 .rc 判斷項(xiàng)目類(lèi)型解壓后不要急著雙擊任何文件先在命令行里掃一眼頂層結(jié)構(gòu)比任何教程都直觀(guān)find . -maxdepth 2 -type f | sort # 或直接列出 rar 內(nèi)的文件清單 unrar l VS2010環(huán)境編寫(xiě)的VC圍棋游戲.rar | head -30看到 .sln 和 .vcxproj 同時(shí)存在說(shuō)明這是 VS2010 原生的解決方案結(jié)構(gòu)。如果只看到 .dsw / .dsp那是更老的 VC6 工程VS2010 也能打開(kāi)但會(huì)做一次格式轉(zhuǎn)換。接著看有沒(méi)有 .rc 資源文件和 resource.h——有這兩樣基本可以鎖定它是 MFC 工程而不是純 Win32 或控制臺(tái)程序。MFC 工程的入口是一個(gè)繼承 CWinApp 的 App 類(lèi)主界面繼承 CDialogEx后面所有消息處理和繪圖邏輯都繞著這兩個(gè)類(lèi)轉(zhuǎn)。如果你還在找 vs2010 的下載安裝教程裝完務(wù)必先打 VS2010 SP1 補(bǔ)丁再開(kāi)工程。SP1 修掉的編譯器 bug 里有幾條正卡在這種老項(xiàng)目編譯路徑上裸裝 VS2010 經(jīng)常會(huì)碰到標(biāo)準(zhǔn)庫(kù)頭文件報(bào)錯(cuò)。打開(kāi)工程后注意左側(cè)的類(lèi)視圖——老資料里常把它叫 VC 管理器——幾個(gè)核心類(lèi)一眼就能看到繼承關(guān)系比逐個(gè)翻文件快得多。2.2 棋盤(pán)數(shù)據(jù)結(jié)構(gòu)帶 padding 的二維數(shù)組是默認(rèn)答案圍棋棋盤(pán) 19×19最省事的表示就是二維數(shù)組。常見(jiàn)做法是開(kāi) 21×21外圈留一圈 padding這是這類(lèi) VC 項(xiàng)目事實(shí)上的標(biāo)準(zhǔn)寫(xiě)法// GameDef.h —— 棋盤(pán)數(shù)據(jù)結(jié)構(gòu)的統(tǒng)一約定 #define BOARD_LEN 19 // 19 路棋盤(pán) #define PAD 1 // 外圈 padding #define MAX_BOARD (BOARD_LEN 2 * PAD) // 21 enum Stone { EMPTY 0, BLACK 1, WHITE 2 }; // 有效格點(diǎn)范圍是 [1][1] ~ [19][19] // board[0][*]、board[20][*]、board[*][0]、board[*][20] 恒為邊界 int board[MAX_BOARD][MAX_BOARD];邏輯說(shuō)明padding 里的值永遠(yuǎn)不是 EMPTY數(shù)氣、提子時(shí)掃描到 padding 就自然停止代碼里一個(gè)越界判斷都不用寫(xiě)。這是把 19 改成 21 的唯一理由一定要在注釋里寫(xiě)清楚否則后來(lái)的人會(huì)把循環(huán)寫(xiě)成從 0 到 18一個(gè)經(jīng)典翻車(chē)點(diǎn)。選型上也可以用一維數(shù)組 int board[361]下標(biāo)按 row * 19 col 換算提子和坐標(biāo)換算會(huì)啰嗦一點(diǎn)用 std::vector 嵌套也常見(jiàn)但 memset 歸零、memcmp 比對(duì)快照都不如 C 數(shù)組干凈。VS2010 對(duì) C0x 支持不全但 STL 老容器完全可用我一般棋盤(pán)用 C 數(shù)組悔棋棧和歷史記錄用 vector各取所長(zhǎng)。2.3 消息路由WM_LBUTTONDOWN 到落子、WM_PAINT 到重繪MFC 程序的消息分發(fā)靠消息映射表我們這個(gè)圍棋游戲只關(guān)心兩條鼠標(biāo)按下負(fù)責(zé)落子WM_PAINT 負(fù)責(zé)畫(huà)棋盤(pán)。映射表的寫(xiě)法如下// GoDlg.cpp —— 消息映射與兩個(gè)核心響應(yīng) BEGIN_MESSAGE_MAP(CGoDlg, CDialogEx) ON_WM_LBUTTONDOWN() ON_WM_PAINT() ON_COMMAND(IDC_BTN_UNDO, CGoDlg::OnBtnUndo) // 悔棋按鈕 END_MESSAGE_MAP() void CGoDlg::OnLButtonDown(UINT nFlags, CPoint point) { // 像素坐標(biāo) - 格點(diǎn)坐標(biāo)MARGIN 是棋盤(pán)邊距CELL_SIZE 是格距 int gx (point.x - MARGIN) / CELL_SIZE 1; int gy (point.y - MARGIN) / CELL_SIZE 1; if (gx 1 gx BOARD_LEN gy 1 gy BOARD_LEN) { if (TryPlaceStone(gy, gx, m_curColor)) // 規(guī)則入口 SwitchTurn(); // 換手 } Invalidate(FALSE); // 只標(biāo)記客戶(hù)區(qū)失效不擦背景 }邏輯說(shuō)明ON_WM_LBUTTONDOWN 宏把鼠標(biāo)消息路由到 OnLButtonDown函數(shù)里先做坐標(biāo)換算再調(diào)規(guī)則入口合法性由 TryPlaceStone 決定合法才換手。Invalidate(FALSE) 觸發(fā)一次異步重繪FALSE 表示不擦背景配合雙緩沖后拉伸窗口也不閃。這里坐標(biāo)參數(shù)順序行、列全工程必須一致混用是后期規(guī)則出現(xiàn)魔幻行為的頭號(hào)嫌疑。參數(shù)說(shuō)明MARGIN 和 CELL_SIZE 是坐標(biāo)換算的兩個(gè)基準(zhǔn)值。按 19 路棋盤(pán)、28 像素格距估算客戶(hù)區(qū)寬度至少 24×2 18×28 552 像素對(duì)話(huà)框模板里的寬高用這個(gè)公式算別隨手拉一個(gè) 300 寬的窗口讓棋盤(pán)被裁掉。3. 落子、提子與劫把圍棋規(guī)則完整寫(xiě)進(jìn) 200 行 VC 代碼3.1 數(shù)氣Flood Fill 收集連通塊再掃四鄰空點(diǎn)氣是圍棋規(guī)則的地基。落子合法性、提子、終局判斷全依賴(lài)數(shù)氣函數(shù)這個(gè)函數(shù)寫(xiě)錯(cuò)后面全是空中樓閣。標(biāo)準(zhǔn)做法是 Flood Fill——從目標(biāo)棋子出發(fā)向上下左右遞歸擴(kuò)散收集所有同色連通的棋子再統(tǒng)計(jì)這些棋子相鄰的獨(dú)立空點(diǎn)數(shù)量// Rule.cpp —— 數(shù)氣先收集同色連通塊再統(tǒng)計(jì)獨(dú)立氣口 static bool visited[MAX_BOARD][MAX_BOARD]; static int group[MAX_BOARD * MAX_BOARD][2]; // 連通塊內(nèi)棋子坐標(biāo) static void CollectGroup(int r, int c, int color, int cnt) { if (board[r][c] ! color || visited[r][c]) return; visited[r][c] true; group[cnt][0] r; group[cnt][1] c; cnt; CollectGroup(r - 1, c, color, cnt); CollectGroup(r 1, c, color, cnt); CollectGroup(r, c - 1, color, cnt); CollectGroup(r, c 1, color, cnt); } int CountLiberties(int r, int c) { int color board[r][c]; if (color EMPTY) return 0; int cnt 0; memset(visited, 0, sizeof(visited)); // 每次調(diào)用必須歸零 CollectGroup(r, c, color, cnt); bool seen[MAX_BOARD][MAX_BOARD] {false}; int dirs[4][2] {{1,0},{-1,0},{0,1},{0,-1}}; int libs 0; for (int i 0; i cnt; i) { for (int d 0; d 4; d) { int nr group[i][0] dirs[d][0]; int nc group[i][1] dirs[d][1]; if (board[nr][nc] EMPTY !seen[nr][nc]) { seen[nr][nc] true; libs; } } } return libs; }邏輯說(shuō)明遞歸深度最多 361 層MFC 默認(rèn)棧空間完全扛得住。seen 數(shù)組保證同一塊棋周?chē)粋€(gè)空點(diǎn)只算一口氣——兩顆相鄰棋子共享同一個(gè)氣口漏掉去重提子判斷會(huì)提前誤觸發(fā)表現(xiàn)為「對(duì)方明明還有氣卻被提子」的怪象。參數(shù)說(shuō)明visited 和 group 聲明成 static 是為了減少遞歸傳參開(kāi)銷(xiāo)但 CountLiberties 每次進(jìn)入必須 memset。seen 是函數(shù)局部變量用 {false}初始化即可每次調(diào)用自動(dòng)重建。dirs 方向數(shù)組順序無(wú)所謂但四個(gè)方向不能漏——漏一個(gè)角部的棋子永遠(yuǎn)數(shù)不對(duì)氣。3.2 提子與禁著點(diǎn)先提對(duì)方再查己方死活落子的完整流程是先把棋子臨時(shí)放上棋盤(pán)提走四周所有氣盡的對(duì)方棋子然后檢查己方這顆棋有沒(méi)有氣。己方?jīng)]氣且剛才沒(méi)提成任何子就是禁著點(diǎn)必須整盤(pán)回卷inline int Opponent(int c) { return (c BLACK) ? WHITE : BLACK; } bool TryPlaceStone(int r, int c, int color) { if (board[r][c] ! EMPTY) return false; int saved[MAX_BOARD][MAX_BOARD]; memcpy(saved, board, sizeof(board)); // 整盤(pán)快照失敗可回卷 board[r][c] color; // 先落子 int dirs[4][2] {{1,0},{-1,0},{0,1},{0,-1}}; int captured 0; for (int d 0; d 4; d) { int nr r dirs[d][0], nc c dirs[d][1]; if (board[nr][nc] Opponent(color) CountLiberties(nr, nc) 0) { captured RemoveGroup(nr, nc); // 提掉整塊 } } // 禁著點(diǎn)自己沒(méi)氣且沒(méi)提到子 if (CountLiberties(r, c) 0 captured 0) { memcpy(board, saved, sizeof(board)); // 回卷 return false; } return true; }邏輯說(shuō)明順序不能反。先查己方氣再提對(duì)方會(huì)出現(xiàn)「提完對(duì)方我自己明明活了卻被判成禁著點(diǎn)」的烏龍。圍棋規(guī)則里提子的優(yōu)先級(jí)高于自殺判斷代碼順序必須和規(guī)則順序一致。整體快照回卷比逐顆撤銷(xiāo)更穩(wěn)多花 441 個(gè) int 的內(nèi)存換來(lái)的是永遠(yuǎn)一致的狀態(tài)這筆賬劃算??狱c(diǎn)captured 記錄的是被提棋子數(shù)量而不是塊數(shù)。只要提走一顆以上這手棋就是合法的哪怕己方落子后暫時(shí)沒(méi)氣——這叫「吃子成活」是新手最容易寫(xiě)成自殺禁手的場(chǎng)景。RemoveGroup 內(nèi)部除了清空棋盤(pán)還要把被提每顆棋子的坐標(biāo)記進(jìn)當(dāng)手 Move 結(jié)構(gòu)供悔棋恢復(fù)使用。3.3 劫比兩步前的局面快照或換 Zobrist 哈希簡(jiǎn)單劫的判定有個(gè)討巧做法把每手落子后的完整局面存進(jìn)歷史棧當(dāng)前這手棋如果導(dǎo)致棋盤(pán)和兩步前完全一致說(shuō)明發(fā)生了「提回來(lái)又提回去」的循環(huán)直接判劫。為什么只看兩步前因?yàn)楹?jiǎn)單劫的循環(huán)周期正好是兩手// Rule.cpp —— TryPlaceStone 內(nèi)部的劫校驗(yàn)接 3.2 的代碼 struct BoardSnapshot { int board[MAX_BOARD][MAX_BOARD]; }; std::vectorBoardSnapshot g_history; // 每手棋后 push 一份 // 在禁著點(diǎn)判斷之后、返回 true 之前加入 BoardSnapshot snap; memcpy(snap.board, board, sizeof(board)); if (g_history.size() 2) { BoardSnapshot prev g_history[g_history.size() - 2]; if (memcmp(snap.board, prev.board, sizeof(board)) 0) { memcpy(board, saved, sizeof(board)); // 回卷禁止打劫 return false; } } return true; // 調(diào)用方落子成功后g_history.push_back(snap);邏輯說(shuō)明memcmp 一次對(duì)比 441 個(gè) int納秒級(jí)完成每手棋調(diào)一次完全不是性能瓶頸。g_history 用 std::vector 實(shí)現(xiàn)——VC 項(xiàng)目里最常用的 STL 容器push_back 和 pop_back 都是 O(1)配合悔棋棧天然兼容。調(diào)用方在落子合法并記錄完提子信息后把 snap push 進(jìn)歷史悔棋時(shí)同步 pop兩者的長(zhǎng)度必須嚴(yán)格一致。如果要嚴(yán)格實(shí)現(xiàn)全局同形superko用 Zobrist 哈希給每個(gè)位置三種狀態(tài)各分配一個(gè) 64 位隨機(jī)數(shù)局面哈希等于所有非空點(diǎn)隨機(jī)數(shù)的異或。落子、提子各做兩次異或就是 O(1) 增量更新把整盤(pán) memcmp 換成哈希比對(duì)代碼量增加約 30 行。普通人對(duì)戰(zhàn)程序用不到寫(xiě)清楚注釋留給后人即可。4. 棋盤(pán)繪制與鼠標(biāo)交互用 GDI 畫(huà) 19 路棋盤(pán)落子不漂移4.1 坐標(biāo)換算半格偏移決定你有沒(méi)有「點(diǎn)偏一格」這一章處理整個(gè)工程里最直觀(guān)也最容易改壞的部分——用 GDI 做的 2D 繪圖層。棋盤(pán)繪制的核心是兩套坐標(biāo)互轉(zhuǎn)格點(diǎn)坐標(biāo)1 到 19和像素坐標(biāo)。MARGIN 是棋盤(pán)外沿到窗口邊緣的距離CELL_SIZE 是相鄰交叉點(diǎn)間距// BoardView.cpp —— 坐標(biāo)互轉(zhuǎn) // 格點(diǎn) - 像素畫(huà)線(xiàn)、畫(huà)棋子時(shí)用 int GridToPixel(int g) { return MARGIN (g - 1) * CELL_SIZE; } // 像素 - 格點(diǎn)鼠標(biāo)點(diǎn)擊時(shí)用CELL_SIZE/2 是關(guān)鍵四舍五入 int PixelToGrid(int px) { return (px - MARGIN CELL_SIZE / 2) / CELL_SIZE 1; }邏輯說(shuō)明整數(shù)除法向下取整直接拿 (px - MARGIN) / CELL_SIZE鼠標(biāo)落在兩個(gè)交叉點(diǎn)正中間時(shí)會(huì)偏到左邊一格這就是「點(diǎn)偏一格」的玄學(xué)來(lái)源。加上 CELL_SIZE/2 把除法變成四舍五入每個(gè)交叉點(diǎn)周?chē)霃?14 像素半個(gè)格距都是有效命中區(qū)點(diǎn)歪一點(diǎn)也不會(huì)落錯(cuò)格。參數(shù)說(shuō)明MARGIN、CELL_SIZE 在工程里必須全局統(tǒng)一不能一處用宏一處用字面量。棋子直徑取 CELL_SIZE - 4留出相鄰棋子的縫隙棋盤(pán)線(xiàn)用 1 像素默認(rèn)畫(huà)筆星位畫(huà)小實(shí)心圓坐標(biāo)文字用 TextOut 標(biāo)注在格點(diǎn)外側(cè)。這些值都集中在 GameDef.h 里定義調(diào)完 UI 不需要?jiǎng)右?guī)則代碼。4.2 雙緩沖MFC 重繪不閃的標(biāo)配寫(xiě)法直接用 CPaintDC 畫(huà)棋盤(pán)線(xiàn)的后果是每次 Invalidate 觸發(fā) OnPaint窗口先把客戶(hù)區(qū)擦白再逐線(xiàn)畫(huà)落子、拉伸都閃成一片。雙緩沖的本質(zhì)是先在內(nèi)存位圖上畫(huà)完所有內(nèi)容再一次 BitBlt 上屏// GoDlg.cpp —— OnPaint 雙緩沖 void CGoDlg::OnPaint() { CPaintDC dc(this); CDC memDC; memDC.CreateCompatibleDC(dc); CBitmap bmp; bmp.CreateCompatibleBitmap(dc, m_clientW, m_clientH); CBitmap* pOld memDC.SelectObject(bmp); DrawBoard(memDC); // 畫(huà)棋盤(pán)線(xiàn)、星位、坐標(biāo) DrawStones(memDC); // 畫(huà)黑白棋子 dc.BitBlt(0, 0, m_clientW, m_clientH, memDC, 0, 0, SRCCOPY); memDC.SelectObject(pOld); // 收尾換回原對(duì)象再刪資源 bmp.DeleteObject(); memDC.DeleteDC(); }邏輯說(shuō)明m_clientW / m_clientH 是客戶(hù)區(qū)當(dāng)前尺寸在 OnSize 里用 GetClientRect 取值。DrawBoard 內(nèi)部用 MoveTo / LineTo 畫(huà)橫豎各 19 條線(xiàn)按坐標(biāo)標(biāo)注 A-S 和 1-19DrawStones 遍歷棋盤(pán)數(shù)組非空格點(diǎn)用 Ellipse 畫(huà)實(shí)心圓。所有繪制全在內(nèi)存 DC 完成屏幕只做一次 BitBlt 合并輸出。參數(shù)說(shuō)明畫(huà)棋子注意 Ellipse 的矩形邊界——中心是 GridToPixel 的返回值左上角是中心減半徑右下角是中心加半徑。黑棋用黑色實(shí)心畫(huà)筆加淺灰窄邊框提亮白棋用白色實(shí)心加灰色描邊不然白棋在淺色棋盤(pán)上會(huì)隱身。注意OnPaint 里創(chuàng)建的 GDI 對(duì)象必須成對(duì)釋放先 SelectObject 換回舊對(duì)象再 DeleteObject。GDI 泄漏的典型癥狀是程序運(yùn)行半小時(shí)后棋子畫(huà)不出來(lái)重啟又恢復(fù)正常排查起來(lái)非常痛苦。4.3 悔棋與局面棧vector 做歷史記錄的完整閉環(huán)圍棋的悔棋不只是拿掉最后一顆子——還得把提掉的對(duì)方棋子按原坐標(biāo)放回去所以落子時(shí)必須把提子信息記錄下來(lái)// GameDef.h —— 一手棋的完整記錄 struct Move { int row, col; // 落子位置 int color; // BLACK / WHITE std::vectorstd::pairint,int captured; // 被提的對(duì)方棋子 }; std::vectorMove g_moveStack; // 全局歷史棧// Rule.cpp —— 悔棋實(shí)現(xiàn) void UndoLastMove() { if (g_moveStack.empty()) return; Move mv g_moveStack.back(); g_moveStack.pop_back(); board[mv.row][mv.col] EMPTY; // 摘掉這手棋 for (size_t i 0; i mv.captured.size(); i) { int rr mv.captured[i].first; int cc mv.captured[i].second; board[rr][cc] Opponent(mv.color); // 被提的放回去 } g_history.pop_back(); // 局面快照同步回退劫判斷才不亂 }邏輯說(shuō)明captured 里棋子的顏色恒為對(duì)手色不用單獨(dú)記錄?;谄鍟r(shí)按對(duì)方顏色放回原位再順手把局面快照 pop 掉——這條最容易漏漏掉之后劫判斷會(huì)拿舊局面對(duì)比當(dāng)前棋局直接翻車(chē)。vector 的 back() 返回末尾引用pop_back() O(1) 刪除作為棧用非常順手。參數(shù)說(shuō)明pairint,int 存坐標(biāo)足夠追求可讀性可以換成小結(jié)構(gòu)體。整份歷史棧在「新開(kāi)局」時(shí)用 clear() 一次性清空同時(shí)清掉 g_history兩棧同生共死?;谄灏粹o的消息響應(yīng)里調(diào) UndoLastMove 后記得 Invalidate(FALSE)讓棋盤(pán)立刻刷新。5. 避坑記錄VS2010 編譯運(yùn)行圍棋源碼的 5 個(gè)高頻翻車(chē)點(diǎn)編譯老工程和寫(xiě)新工程完全是兩碼事。v100 工具集、MBCS/Unicode 字符集、GDI 重繪、MFC 運(yùn)行庫(kù)這四個(gè)關(guān)鍵詞湊在一個(gè)圍棋項(xiàng)目里就是新手最常見(jiàn)的勸退現(xiàn)場(chǎng)。下面 5 條按出現(xiàn)概率排序每條都是「現(xiàn)象、原因、解決」三段式照著定位能省出大半天。先說(shuō)兩個(gè)通用習(xí)慣看編譯輸出窗口的第一條錯(cuò)誤而不是最后一條以及把錯(cuò)誤全部清完再按 F5別讓第一次報(bào)錯(cuò)淹沒(méi)在后續(xù)的級(jí)聯(lián)錯(cuò)誤里。5.1 .sln 雙擊打不開(kāi)提示版本不兼容現(xiàn)象用高版本 VS 打開(kāi) VS2010 的 .sln彈窗提示需要進(jìn)行一次單向升級(jí)點(diǎn)確認(rèn)后代碼能看F5 報(bào)錯(cuò) C1083 找不到 stdafx.h 或一堆 MFC 頭文件。原因VS2010 的平臺(tái)工具集是 v100高版本 VS 默認(rèn)把工程換成自己的工具集但老工程里的附加包含目錄沒(méi)有跟著遷移裸裝 VS2010 不帶 SP1 時(shí)部分 MFC 頭文件本身就缺內(nèi)容換誰(shuí)打開(kāi)都編不過(guò)。解決堅(jiān)持用 VS2010 就先裝 VS2010 SP1 再開(kāi)工程換高版本就在項(xiàng)目屬性 → 配置屬性 → 常規(guī) → 平臺(tái)工具集里顯式改成 v140 / v142改完重新生成解決方案。如果 C1083 還指向某個(gè)盤(pán)符下的絕對(duì)路徑頭文件把附加包含目錄改成相對(duì)路徑工程挪了位置才不會(huì)再次崩塌。提示改工具集前先復(fù)制一份 .vcxproj 備份升級(jí)過(guò)程會(huì)改寫(xiě)項(xiàng)目 GUID 和若干屬性不備份就沒(méi)有后悔藥。5.2 界面中文全部亂碼現(xiàn)象編譯鏈接全部通過(guò)運(yùn)行后對(duì)話(huà)框按鈕上的「落子」「悔棋」「開(kāi)始」全顯示成問(wèn)號(hào)或菱形豆腐塊英文正常。原因源碼 .cpp/.h 和 .rc 資源文件的保存編碼與項(xiàng)目「字符集」設(shè)置不一致。VS2010 默認(rèn) Unicode 但編輯器可能按系統(tǒng) ANSI 代碼頁(yè)存盤(pán)或者反過(guò)來(lái)工程用多字節(jié)字符集而文件是 UTF-8——編譯器按錯(cuò)誤的編碼讀中文字面量出來(lái)的就是亂碼。解決先統(tǒng)一字符集項(xiàng)目屬性 → 配置屬性 → 常規(guī) → 字符集選「使用 Unicode 字符集」再把所有 .cpp/.h/.rc 用 VS 菜單「文件 → 高級(jí)保存選項(xiàng)」轉(zhuǎn)成 UTF-8 with BOM。注意 .rc 資源文件的亂碼必須單獨(dú)看——資源編譯器按文件內(nèi)聲明的代碼頁(yè)解析正文轉(zhuǎn)了 .rc 沒(méi)轉(zhuǎn)界面上照樣是豆腐塊。判斷文件編碼有個(gè)土辦法記事本打開(kāi)另存為對(duì)話(huà)框的編碼下拉框會(huì)顯示當(dāng)前檢測(cè)到的編碼UTF-8 會(huì)明確寫(xiě)出來(lái)ANSI 則對(duì)應(yīng) GBK。5.3 落子瞬間棋盤(pán)閃白現(xiàn)象每點(diǎn)一下鼠標(biāo)棋盤(pán)先整個(gè)白屏再重新畫(huà)出來(lái)連續(xù)落子閃爍肉眼可見(jiàn)拉伸窗口時(shí)更嚴(yán)重。原因OnPaint 里直接用 CPaintDC 一塊塊畫(huà)棋盤(pán)線(xiàn)配合 Invalidate(TRUE) 強(qiáng)制擦除背景重繪路徑變成了「擦白 → 畫(huà)線(xiàn) → 擦白 → 畫(huà)子」的循環(huán)閃爍是必然結(jié)果。解決照第 4 章的內(nèi)存 DC 雙緩沖先在內(nèi)存位圖畫(huà)完再 BitBlt 上屏Invalidate 參數(shù)從 TRUE 改成 FALSE。改完做一個(gè)回歸測(cè)試按住窗口右下角連續(xù)拖動(dòng)縮放棋盤(pán)應(yīng)該平滑跟手全程看不到白閃。如果雙緩沖后還閃重寫(xiě) OnEraseBkgnd 直接 return TRUE告訴系統(tǒng)背景永遠(yuǎn)不需要擦。5.4 明明圍住了對(duì)方棋卻提不掉現(xiàn)象單測(cè)數(shù)氣函數(shù)結(jié)果正確但實(shí)戰(zhàn)里白棋被黑棋圍死界面上的白子卻始終不消失或者一整塊被提了一半。原因visited 靜態(tài)數(shù)組在上一次調(diào)用后沒(méi)歸零CollectGroup 第二次運(yùn)行時(shí)帶著殘留的 true 標(biāo)記跳過(guò)大量棋子連通塊收集不全氣數(shù)虛高。另一個(gè)隱蔽情況是 TryPlaceStone 的失敗分支先 return 再恢復(fù)棋盤(pán)順序反了棋盤(pán)上留下一顆刪不掉的幽靈棋。解決在 CountLiberties 入口強(qiáng)制 memset(visited, 0, sizeof(visited))并把 TryPlaceStone 每個(gè) return false 分支都改成先恢復(fù)棋盤(pán)再返回。驗(yàn)證用一個(gè)固定棋譜白棋先放 (1,1) 角黑棋連下 (1,2)、(2,1)此刻白棋四鄰全是黑棋或邊界應(yīng)被提掉 1 顆打印白棋總數(shù)從 1 變 0 才算通過(guò)再點(diǎn)悔棋白棋總數(shù)應(yīng)恢復(fù)為 1。這套三步棋能同時(shí)驗(yàn)證提子和悔棋兩條邏輯。5.5 生成的 exe 拷到別的機(jī)器啟動(dòng)閃退現(xiàn)象本機(jī) F5 跑得歡把 Release 目錄下的 exe 單獨(dú)拷到另一臺(tái) Windows 機(jī)器雙擊報(bào) 0xc000007b 或者干脆沒(méi)反應(yīng)。原因工程默認(rèn)動(dòng)態(tài)鏈接 MFC 運(yùn)行庫(kù)VS2010 對(duì)應(yīng) mfc100u.dll 和 msvcr100.dll目標(biāo)機(jī)器沒(méi)裝對(duì)應(yīng)版本運(yùn)行庫(kù)就啟動(dòng)失敗。0xc000007b 還經(jīng)常和 32/64 位不匹配摻在一起工程編的是 x86目標(biāo)機(jī)器沒(méi)裝 x86 運(yùn)行庫(kù)只有 x64 的也會(huì)報(bào)這個(gè)碼。解決不想在目標(biāo)機(jī)器裝運(yùn)行庫(kù)就在項(xiàng)目屬性 → 常規(guī) → MFC 的使用里改成「在靜態(tài)庫(kù)中使用 MFC」exe 體積增大約 1 到 2 MB但完全自包含。同時(shí)檢查配置管理器里的活動(dòng)解決方案平臺(tái)是 Win32 還是 x64與運(yùn)行環(huán)境對(duì)齊。改完重新編譯用 dumpbin /dependents 查看 exe 依賴(lài)列表確認(rèn)沒(méi)有 mfc100u.dll 就說(shuō)明靜態(tài)鏈接成功。6. 給 AI 對(duì)手加一檔「棋感」評(píng)分函數(shù)與自對(duì)弈驗(yàn)證6.1 靜態(tài)評(píng)分落子30 行讓 AI 從隨機(jī)棋手升級(jí)成入門(mén)棋手規(guī)則和界面跑通之后最有成就感的收尾是把只會(huì)隨機(jī)落子的 AI 換成一個(gè)有基本棋感的對(duì)手。最輕量的改進(jìn)是給每個(gè)空點(diǎn)打靜態(tài)評(píng)分——角、星位給加成隨機(jī)擾動(dòng)控制在 10% 以?xún)?nèi)保證同一局面不是每次都下同一個(gè)點(diǎn)// Ai.cpp —— 極簡(jiǎn)靜態(tài)評(píng)分落子 int EvalGrid(int r, int c) { if (board[r][c] ! EMPTY) return -99999; int score rand() % 10; if ((r 1 || r 19) (c 1 || c 19)) score 50; // 角 if (r 1 || r 19 || c 1 || c 19) score 15; // 邊 return score; }實(shí)現(xiàn)注意評(píng)分只在空點(diǎn)上調(diào)用有子的位置直接給極負(fù)分隨機(jī)擾動(dòng)最后加別讓隨機(jī)數(shù)蓋過(guò)棋型分。調(diào)參驗(yàn)證別靠人機(jī)試玩的主觀(guān)感受——讓新舊兩個(gè)版本各執(zhí)黑白自對(duì)弈 30 局統(tǒng)計(jì)勝率和平均手?jǐn)?shù)手?jǐn)?shù)明顯變長(zhǎng)說(shuō)明策略變保守了勝率穩(wěn)定過(guò)半說(shuō)明改動(dòng)真實(shí)有效。我個(gè)人的習(xí)慣是每改一個(gè)參數(shù)就往歷史棧里留一條記錄跑完自對(duì)弈回看上一版棋譜而不是靠一局勝負(fù)下結(jié)論。圍棋程序的黑匣子不淺但每一層都有具體驗(yàn)證方法局面快照驗(yàn)證規(guī)則自對(duì)弈統(tǒng)計(jì)驗(yàn)證策略最后才輪到人機(jī)試玩。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
96精品成人无码A片观看金桔| 六月色 亚洲| 精品欧美一区二区三区久久久| 欧美啪啪网| 亚洲超碰中文字幕| 日韩AV大全| 国产特级毛片AAAAAAA高清| 中文AV在线播放| 五月婷婷视频在线观看| 91超碰人人操| 久久综合九九| 亚洲人妻五月丁香婷婷| 国产av基地| 91九色熟女| 999热在线视频| 依人大香蕉| 操99| 色婷婷五月成人网| 久久九九思思| 久久机热/这里只有精品| 天天草天天爱| 97成人在线视频精品| 五月丁香成人| 秋霞网在线观看理论91| 色情五月婷| 超碰99久久| 伍月婷婷六月丁香| 日本色婷婷| 精品一区二区三区四区五区六区| 六月丁香VA| 99碰网站| 久久精品噜噜噜成人A∨色欲| 91狠狠色丁香婷婷综合久久精品| 成人在线综合| 国精产品一区二区三区| 丁香婷婷性久久| 婷婷五月综合在线| 人人摸人人搞| 99A片| WWW.99热| 亚洲另类毛片| 97日在线视频| 婷婷影院A成人| 99亚洲无码| 国产精品A片在线| 国产67194| 狠狠操.COM| 激情五月婷黄版| 色五月噜噜| 国产成人网站在线观看| 九九色播五月丁香| 五月激情久久综合网| 五月婷婷深深的爱| 九九这里是免费的视频5| 色婷婷最新域名| 超碰99在线| 婷婷五月色| 婷婷六月开心网| 欧美色色色色色色色色色色| 亚州操操| 综合亚洲五月天| 天天cha成人综合网| 狠狠爱婷婷爱| 激情宗合哪里能看| 九九视频免费| 日本一道久久| 少妇激情五月婷婷| 丁香婷婷六月激情| 五月婷婷久久综合| SS丁香五月婷婷| 热99久久这里只有精品| 日本色婷婷五月天成人电影| 伊人狠狠干| 久久五月婷天天干| 五月 婷婷 成人| 99热99在线| 婷婷五月情| 丁香五月婷婷超碰在线| 丁香六月婷婷综合麻豆| 亚洲综合视频一下| 99视频在线观看网址| 亚洲九九视频| 91 九色 熟女| 影音先锋 91工厂| 色婷婷九月| 国产成人亚洲综合A∨婷婷| 国产欧美婷婷五月| 日本狠狠网| 99综合激情久久精品久久| 五月六月丁香婷婷在线观看| 五月开心深爱激情网| 激情五月丁香在线观看直播| www.色九月| 狠狠色综合网| 狠狠干狠狠操狠狠爱| 天天干天天av天天射| 九久久九精品视频| 国产人人操| 天天综合色丁香| av第一二区| 97色在线视频| XX色综合| 五月天激情亚洲| 99九九中文字幕视频| 婷婷综合仓库中文| www久| AV天堂淫乩| 99热国产这里只有精品| 日韩av手机在线观看| 亚洲精品一区无码A片| 九 九九九AV| 色一情一乱一乱一区91| 夜夜骑天天操| 操日本99| 东北婷婷五月天| 99热精品在线| 国产乱子轮XXX农村| 熟美女麻豆| 婷婷久久综合久| 很很操96| 亚洲精品视频在线| 日韩久久日| 激情婷婷护士激情| 色婷婷WWW| 99色最新在线视频网站| 激情网 久久| 婷婷久久亚洲| 五月丁香无码| 国産精品| 美英法精品无码免费视频| 亚洲欧美婷婷五月色综合| 久久久潮喷-久久久九九-成人AV| 影音先锋 婷婷| 色婷婷亚洲婷婷| 日韩成人影片网站| 五月天五月色| 极品精品一区二区三区在线| 天天狠狠插| 久久九区| 色播激情| 丁香五月乱中文字幕| www狠狠| 五月婷丁香久久综合| 午夜精品777| 亚洲色频| 九九久久精品| 久久久噜噜噜久久人妻| 久久99精品久久久| 伊人www22综合色| www.激情五月天.com| 狠狠色狠狠| 色色色色色综合| 波多野结衣不卡AV| 99爱这里只有精品免费视频| 日本久久人| 丁香六月色婷婷| 1024欧美看片| 97色天堂| 日本色色网站| 综合色图区| 五月婷婷黄色| 色婷婷激情| 大香蕉75线| 这里只有精9| 激情五月天偷拍综合网| 日本人妻操| 天天日日人| 超碰99在线观看| 超碰人人操在线| 五月婷婷久久久| 亚洲精品无码久久| 被强行糟蹋的女人A片| 久久婷婷国产| 丁香五月在线播放| 丁香婷婷六月激情文学| 国产肥白大熟妇BBBB视频| 五月色婷婷中文字幕| 色播五月综合网| 日韩九区| www.91五月| 国产精品香蕉| 色综合九九| AA丁香综合激情| 丁香五月激情六月综合| 久久九九热38| 79色色色色| 日本全黄一级999| 爆乳熟妇一区二区三区爆乳照片| 丁香五月香蕉| 五月天社区婷婷| 欧美婷婷色五月| 久久久五月天网站| 无码免费人妻A片AAA毛片西瓜| 欧美婷婷五月| 第四色婷婷日本| 久久婷婷五月天| 丁香五月综合福利视频导航| 91婷婷伊人牛牛| 丁香五月激情五月| 另类图片五月天| 120分钟婬片免费看| 丁香五月性爱| 久久思思热视频| 一婬一伦一区二区三区| 无人区码一码二码三码医生系列| 9热视频在线观看| 欧洲亚洲最新精品| 丁香婷婷老熟女综合网| 91色婷婷综合久久中文字幕二区| 亚洲无码九九| 色综合播放| 壅壅儕家a| 深爱激情丁香| 国产精品热搜丁香五月婷婷| 五月激情六月| 神马久久五月天| 可以看的av网站| 九九精品在线观看视频6| 成人 视频免费观看网站| 五月色色色| 一级片sese片.COM| 99热这里有精品首页10| 91在线人| 婷婷综合性爱网| 五月天婷婷网站888| 色五月激情基地| a毛片二逼wwwwwwwwww| 九九五月天| 极品五月天| 五月天综合网| 激情六月天婷婷| OYIWbGcPu8H| 国产婷婷色综合AV蜜臀AV| 色婷婷六月天| 色综合综合色| 久久精品4| 色五月婷婷久久| 亚洲婷婷丁香| 色婷婷五月天成人网| 国产无套精品一区二区| 丁香色综合| 五月婷婷丁香社区| 婷婷五月色天| 激情五月婷婷在线观看| 伊人激情影院| 色五月婷婷网| 亚洲成人在线综合| 婷婷久久五月丁香| 97干在线视频| 婷婷五月天电影网| 1024日韩| 中文成人在线| 97操碰人免费| 激情婷婷视频在线| 久久9久久| 中文字幕性爱视频| 国产无遮挡又黄又爽免费网站| 99色色网| 99热18| 97色在线观看视频| 日本色婷婷| 开心五月婷婷| 成人精品在线观看| 婷婷五月花| 先锋男人99资源| 婷婷综合在线| 狠狠 婷婷| 五月丁香色婷婷伊人| 综合婷婷| 五月天婷婷六月| 久久6这里只有精品| 精品久久二6| 色九月综合| 狠狠插.com| 99久99久| 九九综合色综合| 大香蕉久久草| 天天更新天天亚洲| 欧美黄色韩日网| 综合网五月| 丁香五月婷婷亚洲色图| 欧美精品999| 99国产精品久久久久久久久久久 | 色五月天成人在线| 26uuu精品一区二区| 色婷婷亚洲五月天| 思思精品视频| 久777| 激情五月天福利| 伊人色综合久久久| www.狠狠狠狠| 99在线视频播放| 超碰国产在线| 激情丁香五月综合| 日韩三级片一区二区| 五月丁香在线精品| 黄色三级日本| 欧美日韩婷婷五月天| 国产亚洲色婷婷久久99精品91 www.riverspirits.org www.hnnun.com www.changh | 99热这里只有精品1025| 久久机只有这里精品| 5月婷婷激情网| 日韩av在线电影| 免费看欧美成人A片无码| 婷婷综合国产| 亚洲成人色五月天| 99精品久久久久| 色色五月婷婷| 色婷婷av在线| 激情五月天电影| 国产激情综合五月久久| 色色色色色色色色色色色色色色,网站| 激情亭亭五月| 婷婷中文字幕版| 色在线99| 婷婷之玖玖| 97色色色视屏| 99精品在线观看| 激情五月天。| 99热这是里只有精品| 久久这里只有欧美| 久久精品99国产精品日本| www.色五月天.com| 99视频自拍| yw国产AV| 丁香五月婷婷亚洲另类| 五月婷丁香| 操久久精| 色综合天天综合成人网| 大香蕉丁香婷婷| 天天弄天天爽| 26UUU欧美| 午夜九九九九九九| 在线观看的av| 思思热视频| 91人在线观看| 67194成I人在线观看线路1| 五月天狠狠干| 4399无码视频| 色狠狠六月| a网站免费观看| www综合久久| AV79| 色在线免费观看| 丁香桃色综合网| 色综合五月天| site:hcxsz888.com| 99视频激情四射| 国产综合A片| 欧美日韩999| 亚洲午夜一区二区| 99久在线精品99re5热视频| 国产毛片操B| 日韩成人五月天| 婷婷爱五月天| 亚洲 精品 综合 精品| 六月丁香激情网| 狼人婷婷久久| 日韩成人免费电影| 玖玖资源站国产| 九九人人操| 亚洲成人av在线| 96丁香六月婷婷蜜桃综合久久| 五月丁香久久激情综合| 五月丁香中文字幕| 超碰9| AV在线免费播放| 99久在线精品99re5热视频| 99这里只有精品视频| 色婷婷精| 97人凄人人操人人爽| 91精品91久久久中77777久久玖玖九九 | 欧州色色| 六月婷婷香蕉| 思思热精品在线| 五月天婷婷三级黄| 色婷婷在线播放| 亚洲在线资源| 专区无日本视频高清8| 99热这里只有精品国产免费| 97精品人人A片免费看| 五月婷丁香在线视频在线| 99原创自拍视频在线观看| 开心五月激情五月丁香五月婷婷| 国产99久久久国产精品免费看| 七七九九色色| 色99超碰| 九九热精品视频| www.sd-xiangsu.cpm| 97caop| 夜夜操天天干| 激情婷婷五月久久| 久久婷婷网址| 五月天久久久| 亚洲五月色| 亚洲成人超碰| 亚洲亚洲人成综合网络| 丁香五月激情网| 久久婷婷五月综合97色一本| 亚洲天堂制| 丁香久久五月婷综合| 婷婷日在线观看| 九九热视频精品999| 天天干一干| 人人草公开操| www综合久久| 狠狠色丁香| 色色亚卅| 九九热这里只有精品5| 久久艹 五月天| 亚洲看av的网站| 人操人| 99视频在线精品| 色婷五月| 丁香午月AV中文字幕| 久热精品9999| 99色色网| 新97人人上人人| 色色网站免费观看| 久久精品爱爱| 婷婷五月天中文字幕| 激情五月婷婷| 91爱啪啪| 99网99热| 直接看的AV网站| 久久丁香五月综合六月激情红杏视频| 色综合久网| AV九九| 久9视频免费播放| 伊人成人宗合网| 六月丁香婷婷色狠狠久久| 99热这里有精品| 欧洲一区二区| 超碰AAAAAAV| 久久99精品久久久久久噜噜| 变态另类色图| 丁香五月婷婷色综合| 五月天综合视频| 国产色色视频| 成人五月天视频播放| 操操操av| 丁香婷婷六月婷婷六月婷婷六月婷婷| 超碰大香蕉网| 色婷婷激情| 97超喷视频在线观看| 丁香六月天| 99色综合网| 色五月婷婷在线观看| 丁香五月骚喷水视频| 婷婷五月天激情网| 日韩精品999| 亚州激情九月| 婷婷综合av| 丁香操逼| 9久操| 五月伊人91| 成人美女网| 亚洲综合色网| 成人亚洲精品久久久久| 色欧美色色色| 五月激情综合婷婷| 日本久久极品| 99丁香五月婷婷在线| 亚洲成人精品三区| 色色色婷婷| www,色综合| 婷婷六月天| 丁香五月手机视频| 人人操插| 开心五月天私房婷婷| 婷婷午夜| 婷婷六月丁香久| 亚洲婷婷丁香五月天激情小说| 五月婷六月综合在线观看| 综合亚洲六月婷婷在线| 五月www| 婷婷丁香一月| 综合久久六月| 久久久香| 五月激情天| 国产精品人成A片一区二区| 国产精品扒开腿做爽爽爽A片唱戏| 91一起操| 91色色五月天| 久热亚洲| 色五月丁香五月五月婷婷| 亚洲激情 久久| www.日日日.com| 热久久视频99| 99九九视频精彩在线| 人妻22p| 婷色五月| 亚洲欧洲一二| www.色婷婷| 丁香五月婷婷色五月| 五月花婷婷最新| 夜夜综合色| 97性视频| 五月天福利影院导航| 婷婷丁香五月天操逼| www.婷婷五月天| 综合逼五月激情婷婷| 婷婷五月深深爱| 99热碰碰| 国产精品久久久久9999小说 | 久久久久er热| 久爱综合| 色综合色综合网| 五月婷婷免费| 情色五月天网站| 无码人妻精品一区二区蜜桃色欲| 欧美久人人| 丁香综合婷婷开心激情网| 79精品视频在线观看,| 激情深爱五月天| 久操香蕉| 久久五月天合网| 五月丁香六月婷婷综合网站| 99热久| 欧美性交一区二区三区| 五月社区丁香| 久久98| 五月婷无码| 99色这里| 丁香五月最新地址| 国产亚洲99久久精品熟女| 久久9视频欧美| 丁香色综合| 五月亭亭开心网| 99在线播放| 精品婷婷五月视| 婷婷色片| 久久久久五月丁香| 狠狠人妻久久久久久综合丁香| 五月天婷婷影院| 天堂成人A片永久免费网站| 91九色 婷婷| 思思热在线视频99| 国产亚洲精品久久久久久郑州| 五月婷婷七月丁香| 99这里只有| 99精品国产在热久久| ww久久| 色色AV色色色东莞| 无码人妻一区二区一牛影视| 婷婷五月婷婷五月| 男女啪啪做爰高潮无遮挡| 综合啪啪| 91成人品| 天天操加勒比| 日韩成人电影在线播放| 涩涩婷婷五月| 99精品无码| 免费在线观看av网站| a v色婷婷| 久久九九网| 综合激情五月天| 国产精品爽爽久久久久久| 日本综合九九| 日曰躁夜夜躁2026| 久久久久久久综合狠狠综合| 日韩1区2区| AAA久久久| 伊人www22综合色| 大香蕉七区| 99热6精品| 野外99热| 99热99美国在线观看| 丁香色影院| 色情五月婷婷| 超碰a女人的天堂| 丁香五月欧美| 1024手机在线观看看片_日韩精品| 丁香久月| 久久九区| 色色色欧美| 亚洲成色综合网站免费观看| 欧美顶级少妇做爰HD| 色综合爱综合| 五月婷婷黄网站大全| 五月婷六月婷婷| 狠狠狠狠青草| 最新久久网址| 五月婷婷五月天激情视频| 九九色热| 婷婷五月天综合色| 国产资源在线视频| 日韩成人精品中文字幕| 日本va网站| 九九这里只这里只有精品| 99热这里有精力| 激情综合自拍五月婷婷色五月| 9+1视频网址| 99爱最新免费视频在线观看| 嫩草哈哈操| 国产九九一区二区三区| 成人五月天综合网| 人妻丰满精品一区二区A片| 激情综合色婷婷啪啪六月天| 加勒比日本一区二区三区| 久久色天堂| 色色国产| 亚洲色频| 夜夜骑日日操| 久久久免费图片视频| 久久与婷婷| 亚洲亚洲激情| 久久一伦| 丁香五月激情啪啪| 五月亭亭狠狠| 久久人妻爱爱| 五月婷婷丁香啪啪| 九九9久九9国产视频| 色情五月综合婷婷| 三区激情四射av| 99在线小视频| 日本欧美成人片AAAA| 狠狠五月天| 五月天婷亚洲综合在线嫩草网| 99视频热99| 亚洲精品亚洲人成人网| 夜夜骑天天玩天天日| 97超碰人人操| www激情五月天| 站长推荐无码播放| 婷婷94s| 丁香六月啪啪| 五月丁香五月婷婷| 五月天自拍视频| 日韩成人电影在线播放| 99精品视频播放| 亚洲综合激情五月久久| 五月激情影视| 婷婷五月中文字幕国产| 伊人99热| 人妻视频在线| 婷婷激情五月天桃花网| 色婷婷小说| 91丨九色丨白浆秘| 99免费| 人人摸人人射| 久热精品视频在线观| 亚洲AV另类| www,黄色在线,con| 香蕉AV福利精品导航| 婷婷97碰碰| 色色色免费视频| 天天综合五月| 六月婷婷俺也去| 久久久久婷婷| 91精品又长又大又粗又爽又猛| 久久久久久五月天| 欧美私人家庭影院| 99久久婷婷国产综合精品草原| 丁香婷婷五月色成人网站| 丁香成人色情五月天| 六月香五月婷| 色情五月天se| 久久黄色免费视频| 五月丁了香蕉综合| 日本色噜| 99色6爱9热| 色9999日韩国产| 啪啪婷婷五月天激情| 免费看片操逼| 伊人久久中文网| 亚洲第二AV| 五月色婷婷夜色| 色综合色色色色色色综合| 久777| 五月天天丁香婷婷| 99re8热精品免费视频| 激情五月婷婷| 91碰免费视频| 9精品一区| 天啪色| 99热精品网| 小泽玛利亚视频一区二区| 97操男人的天堂| 欧美日本高清视频99| 伊人久久大香天蕉亚洲特级| 久久久久久久8| 97超碰在线免费观看| 99在线视频播放| 中文字幕AV在线播放| av久热| 激情综合五月| 夜夜天天久久婷婷| 丁香五月激情婷婷| www.五月天婷婷| 99久精品视频| 婷婷丁香18| 丁香五月天视频| 日韩av手机在线观看| 99色免费观看全部| 九九综合网色全集| 色综合夜夜| 色五月av伊人| 婷婷开心五月| 久99热| 双性美人被调教到喷水A片| 精品久久久久成人码免费动漫| 色五月丁香五| 激情亭亭五月| 97操视频| 日韩AV在线免费观看| 亚洲一级色电影| 九九家庭影院| 五月天综合图片| 色五月天丁香婷婷| 国产精品第一国产精品| 婷婷五月丁香人妻无码高清| 久久婷婷综| 色综合开心五月深爱五月| 婷婷天天色| 开心深爱激情网| 日B日潘金莲BB| 大香蕉中文| 日日干夜夜撸夜夜骑| 色播五月婷婷| 年轻的妺妺伦理HD中文| 色婷久| 色婷婷五月天激情在线播放| 九九無妻| 大陆极品少妇内射AAAAAA| 天色综合网| 亚洲精品操一操、噜一噜、摸一摸、爽 | 美女丁香五月天| 天天日夜夜帕| 五月天激情网图片| 97超级操操| 色综合xx| 久久久com| 超碰成人在线免费观看| 欧美大奶熟女噜噜噜噜| 九九热精品| 亚洲精品无人区| 色五月婷婷基地| 久久久久久五月天| 99国产精品白浆在线观看免费| 伊人9草在线观看| 五月天小说激情| www久久99| 婷婷五月天丁香久久| 五月天成人在线视频丁香| 超碰三级片| 五月婷婷黄网站大全| 九九蜜臀精品| 97超碰人人操| 日本色色网站| 99亚洲色色| 无码AV免费精品一区二区三区| 美女黄频aⅴ视频| 日本色色视频| 亚洲狠狠丁香婷婷香蕉| 国产色色网站网址| 天干夜夜操| 97se视频在线| 色综合色综合色综合色综合| 色啦啦视频| 五月天婷婷丁香花| 天天综合精品| 丁香五月天色综合| 五月天激情电影| 九九热99视频在线| 免费视频无码| 一级性感毛片| 很很干天天干| 狠干综合| 色五月激情| 日韩有码一区| 终合激情网| 9l视频自拍九色9l黑人| 丁香六月无码| 婷婷干| 国产精品久久久久久五月天加勒比| 久久综合九九| 色五月久久成人婷婷| 久久XX| 成年AAAA色情| 青草视频在线播放| 26UUU在线观看| 国产性爱在线| 久久久久久五月天| 狠狠色丁香久久综合婷婷亚洲成人福利 | 97色碰碰公开视频| 99亚州综合精品成人网| 久热伊人9| 亚洲天堂大香蕉| 91丨九色丨高潮丰满日本| 日本色道视频网站| 人妻射精AV| 一本大道嫩草AV无码专区| 丁香五月激情综合在线观看| 丁香8月手机综合| 久久丁香久久| 玖玖婷婷色五月| 97碰碰人人| 亚州激情在线视频| 99色嘟嘟精品网站| 五月婷婷开心网| PORNY九色9l自拍视频成人| 人人干av| 色婷婷五月网| 任你搞在线观看视频| 色欲五月婷婷| se色99| 九九热狼人| 激情深爱五月天| 色情五月综合婷婷| 成熟妇人A片免费看网站| 丁香5月婷婷| 噜噜色五月| 色综合五月天| 天天爽天天摸| 久久女人天堂| 午夜精品久久久久久久爽| 婷婷色正月| 婷婷五月av| 青青草婷婷五月天| 香蕉狠狠爱视频| 丁香五月天色| 久久天堂色| 丁香久久| 99亚洲色色| 99re久久| yjzz亚洲国产| 日本久热| 五月天婷婷青青草| 日本3级片偷拍网站| 天天揷综合网| 亚洲五月婷| 六月丁香五月激情婷婷| 67194成I人在线观看线路1| 最近中文字幕2019视频1| 五月婷婷综合在线| 激情综合激情五月| 色狠狠综合网| 3p九色在线| 婷婷色五月丁香六月欧美啪| 天天碰夜夜爽| 日韩好吊操| 九热电影av| 日本一级淫| 操99| 可以看的av| 亚洲 在线 性爱 | 色爽干| www久| 啪啪小说五月天| 思思99精品视频在线观看| 免费AV在线| 色婷婷综合久久| 亚洲激情综合| 久久婷婷五月丁香网| 婷婷香五月| 99热在这里只有免费精品| www.91婷婷| 色五月在线综合| 色婷婷影视| 欧美久热| 亚洲性视频| 国产精品人人妻人人爽| 涩涩婷婷五月| 99热国产在| 色情五月丁香| 成人电影在线免费试看| 亚洲精品444久久久久久| 精品少妇人妻AV无码专区偷人| 婷婷在线视频| 国产免费AV在线| 亚洲精品婷婷| 夜夜躁爽日| 欧美激情综合色综合色| 综合狠狠干| 99热永久在线观看| 狠狠做五月| 久久婷婷激情| 另类专区在线| 91狠狠综合网| 9热视频在线观看| 91色吧网| 色天使色婷婷| 狼人婷婷综合| A1片久久久| 98永久精品| 97干婷婷| 一区视频网站| 中文字幕不卡+婷婷五月| 97极品在线| 日韩另类在线观看| 日本久久人| 大香蕉婷婷久久| 超碰99久久| 久久HD| 成片免费观看视频大全| 任你草| 久久亚洲A| 亚州激情在线视频| 午夜精品777| 色婷五月| 噜噜色婷婷| 五月婷婷色| 婷婷五月丁香六月| 99视频这里有精品| WWW.国产| 五月婷婷激情啪啪| 99热99草97| 98色花堂98t.R| 五月丁香久久综合| 五月色婷婷综合色| 婷婷色五月天综合网| 婷婷五亚洲| 狠狠插狠狠插| 五月丁香久久网| 久久久免费精彩视频| 国产暴力强伦轩1区二区小说| 国产精品久久久久9999小说 | 97一区二区| 99ri国产精品| 91人人操人人| 婷婷丁香五月天欧美| 色婷婷丁香五月色综合网| www.操.com| 97久久超碰| 大战熟女丰满人妻AV| 97人人操com| 久久性爱视频| 午夜精品777| 这里只有精品免费视频| 操91| 超碰操日| 色综合久久天天综合网| 另类图片五月天婷婷| 九九久热| 国产成人99久久亚洲综合精品| 欧美搡BBBBB摔BBBBB| 九九精品婷| 99色这里| 婷婷五月亚洲一本在线丁香| 91chinese在线| 天天激情站| 中文字幕不卡+婷婷五月| 色综合五月婷婷狠狠干| 五月婷婷六月天| 91精品综合久久久久久五月丁香| 亚洲图色五月天| 99五月丁香丁| 色婷视频| 婷婷综合久久| 久久婷婷五月综合啪| 丁香婷婷激情五月色| 亚洲热热视频| 极品少妇XXXX精品少妇偷拍| 婷婷性爱视频在线| 欧美综合激情五月丁香| 这里有精品| 成人精品视频99在线观看免费| 国产婷婷综合| 九九热这里只有精品一| 久久婷婷五月综合| 潮汕成人AV片在线| 日韩抽插操逼| 大香蕉久热| 丁香九月激情在线视频| 亚洲色色色色色| 色五月天电影| 亚洲狠狠色丁香婷婷综合久久| 色V狠狠的干| 亚州操人在线视频| 99热热热99精品丁香| 97人人干人人操| 婷婷免费视频| 丁香婷婷AV| 色色色色色级无码| 91人妻人人做人碰人人爽九色| 91人人爱| www.色婷婷。com| 五月婷婷六月丁香综合在线| 91久久免费| www.ppypp| WWW.国产| 五月天激情综合网站| 久久色天堂| 九色地址91视频| 国产精品婷婷午夜在线观看| 国产精品18久久久| 婷婷五月天激情四射| 97操碰在线视频| 五他月天啪啪啪| 丁香五月综合在线播放| 丁香激情网| 久久这里都是精品免费| 97综合在线| 天天插天天射天天干| 午夜丁香婷婷| 综合久久首页| 99精品大片| 影音先锋男人站,影音先锋男人色资源网,影音先锋AV最新资源站,影音先锋AV资源 | 91九色中文字幕女在线观看| 人人摸人人摸| 99久高清视频| 久久狠狠干| 人碰91| 成人va视频| 欧美熟妇一区二区三区| 91婷婷五月天嫩女| 丁香五月激情欧美| 日本色爽| 91精品国产日韩91久久久久久国模| 五月婷综合| 色婷在线视频| 夜夜躁婷婷AV| 强伦轩人妻一区二区电影| 91肏| 久久久www| 泰州成人视频| 深情六月婷婷综合久久| 少妇AB又爽又紧无码网站| www.久久五月天.com| 超碰只有精品在线| 亚洲激情精品| 色色五月综合| 天天操夜夜操| 丁香色色色| 99ri精品| 激情五月色综合国产精品| 久综合4| 色五月在线播放| 欧美三级黄色片久久| 久色网| 色亚洲视频| 色色欧美。| 日韩视频99| 国产在线黄色| 日本九九九九| 色5月婷婷| 人人操操| 亚洲婷婷五月天| 天天天天天操| 99在线视频喷水| 久久综合激情| 深爱激情五月天色婷婷| 色99欧洲色19| 成人亚洲精品| 激情伍月 欧美| 丁香婷婷综合色五月激情国产基地| 欧美 日韩 成人| 中文字幕日本最新乱码视频| 亚洲激情综合免费| 日韩综合久久| 99精品视频在线观看| 五月天啪啪| 成片免费播放| 丁香五月之久操视频| 丁香五月天激情综合| 99开心五月五月丁香激情| 色五月综合激情网| 成人电影在线免费试看| 啪啪婷婷五月天激情| 色九月综合网| 夜夜谢天天干| 婷婷丁香色情五月天| 激情五月天色色网| 久久久高清| 婷婷色丁香五月| 美女激情婷婷| 色99自拍| 99热99热| 激情五月天婷婷播播久久综合91| 天天操天天插| 日韩AAA| 日韩99视频| 熟女人妻视频| 婷婷久久久久| 91小黄书网址在线观看| 色色丁香婷婷| 热久91| 欧美激情综合| 九九视屏| 99热精品一| 6月丁香婷婷| 91久久九色| 99国产精品白浆在线观看免费| 丁香婷婷激情五月天无毒不卡蜜桃| 99小精品| 婷婷五月激情欧美| 91在线资源| 色婷婷视频| 婷婷色九月| 99热这里只有精品22| 99热国产在| 99热爱爱干干日| 亚洲国产成人AV在线| 蜜桃成语时李时珍 免费| 日本色99| 久久金品黃色| 欧美丁香五月天| 久久五月六月| 九九综合| 日韩欧美一道四区中文字幕| 欧美日韩成人h| 国产AV一区二区三区日韩| 婷婷久久大香蕉| 天天综合精品| 五月丁香六月婷婷在线| 深爱激情久久| 亚洲中文无码成人| 久久色情| 欧美色久| 色婷婷AV在线| 日本123区日韩欧美不卡在线看| 中文字幕视频色婷婷| 激情五月激情综合网| 五月婷婷在线免费观看| 午夜成人网站在线观看| 婷婷五月天成人网| 亚洲精品午夜国产va久久成人| 婷婷五月天论坛| 亚洲综合婷婷| 夜夜天天天天天干天天爽| 久久狠色噜噜狠狠狠狠97| 色色色777| 91欧美| 精品久久99| 91精品综合久久久久久五月丁香| 成人av中文字幕| 99热主页日本| 9久久久久| 久久伊人婷婷| 99熟女| 婷婷五月丁香综合亚洲| 久er免费视频| 99精品视频免费在线播放| 俺也去在线久久精品23欧美综合视频网站,丰满人妻一区二区三区在线视频53,丰满 | 色999;丁香五月| 丁香五月婷婷精品视频| 激情纯色婷婷五月天在线不卡视频| 天天拍天天做视频| 99色丁香婷婷综合网| 99热只有国产在线精品| 囯产精品一品二区三区| 思思热在线视频99| 人妻自慰高清合集| 人人干人人操人人摸| 99热这里只有精品5| 九九色播五月丁香| 激情九月综合| 五月丁香在线观看| 99精品无码| 欧美色片中文字幕久久久久| 国产99久| 操逼国产91| 丁香激情五月| 97操碰碰无码视频| 激情小说五月天| 五月丁香色情| 97人碰人操| 9久久久| 五月丁香999| 99热无码精品| 丁香五月天BBw| 五月天播播| 99爱爱| 99性爱视频| 玖玖九九超碰| 超碰不卡在线| 成人五月天在线观看| 内射丰满人妻| 激情五月丁香亭亭| WWW久久久| 久久小说| 99色.com| 五月丁香日本在线视频观看| 日逼免费视频 | 婷婷久久综合| 精品少妇蜜臀91| 99在线精品视频| 色婷婷综合网站| 婷婷激情五月天桃花网| 4399在线日本A片| 丁香五月狠狠综合欧美| 99成人精品| 99热99网| 久久人妻伊人| 91久久久久久久久18| 色伦专区97中文字幕| 91天堂网综合| 婷婷激情五月吧| 五月天天爽| 欧美色色色色色| 大香久久综合网| 噜噜色天天开心| 久久精品亚洲一级牲爱综合| 婷婷五月丁香久久| 色欲五月丁香| 在线中文av| 色婷视频| 91啪啪视频| 熟美女麻豆| 婷婷激情综合色五月久久,色婷婷丁香花,丁香婷婷五月情天,久久婷婷五月综合色 | 色丁香影院| 亚洲色婷婷| 色婷成人狠干| 国产日日夜夜操| 超碰成人在线观看| 啪啪啪丁香五月| 久久五月天合网| 久久久久久97| 一区二区无码视频| 玖月婷婷爱丁香| 99热资源在线| www。五月,com| 久热这里只有精品在线观看| 九九 激情 网| 热久综合| 久er7久热| 伊人久久婷| 9久热在线精品| 黄涩毛片| 99精品在线观看视频| 亚洲超级碰| 亚洲小视频| 人妻熟人中文字幕一区二区| 中文字幕婷婷| 五月天婷婷综合网| 日韩aⅴ视频| 久久五月天激情视频| 五月婷婷综合网| 久久免费丁香| 五月天婷婷在线播放免费| 噼里啪啦完整版中文在线观看| 久久激情综合| 五月天婷婷基地综合网| 婷婷丁香综合在线| 日日懆天天懆| 熟女人妻一区二区三区免费看| 丁香无月在线观看| 丁香五月影视| 91疯狂操操操操| www.五月.com| 色综合女人99| 这里只有精品在线看| 性欧美大战久久久久久久83| 99热99网| 丁香五月六月综合激情| 成人AV免费观看| w婷婷五月婷婷w| 久久久久久99精品无码| 色五月亚洲| 97碰人人操| 天天日天天色| 大天天伊人| 在线视频激情网站| 欧美性久| 久久婷婷色综合| 影音先锋一区| 97精品欧美91久久久久久久| 久久超级碰碰| 五月天激情图片| 成片免费播放| 亚洲综合五月天婷婷| 狠狠艹狠狠艹| 中文字幕无码人妻少妇免费视频 | 激情婷婷啪啪| 久久九九九九|