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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

用算法去扫雷(go语言)

發(fā)布時間:2023/12/20 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用算法去扫雷(go语言) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
  • 最初的準備
    首先得完成數(shù)據(jù)的錄入,及從掃雷的程序讀取界面數(shù)據(jù)成為我的算法可識別的數(shù)據(jù)
    其次是設計掃雷的算法,及如何才能判斷格子是雷或者可以點擊鼠標左鍵和中鍵。
    然后將步驟2的到的結果通過我的程序實現(xiàn)鼠標的點擊動作
    下面是一個成功的gif圖片,放在前面容易吸引人啊,哈哈。
  • 首先實現(xiàn)第一步
    將掃雷程序界面數(shù)據(jù)讀取并保存為我的代碼可識別的數(shù)據(jù)。我們知道程序界面的各個數(shù)字都有不同的顏色,那么我們可以通過這些顏色得到每個數(shù)字的特征碼,及我的程序可以通過這些特征碼識別這些數(shù)據(jù)。
    什么是圖片的特征碼,及圖片和特征碼為一對一的關系,知道特征碼就能確定這個圖片是啥,因此我的程序內置了特征碼,然后獲取雷區(qū)截圖,通過分析rgb值得到特征碼和已有的特征碼比較,相同則確定了該位置是個啥。我借鑒了該文章圖像識別技術的圖像灰化,及將一張彩色圖片灰化為兩個不同的值,及圖片二值化。使用如下算法

    經過我的處理可以得到下面的值,我只拿其中一個數(shù)字說明,下面是數(shù)字2做圖像灰化后得到的二值圖像碼
    1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
    1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
    1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,
    1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,
    1,1,0,0,0,1,1,1,1,0,0,0,1,1,1,1,
    1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,
    1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,
    1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,
    1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,
    1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,
    1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,
    1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,
    1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
    1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
    1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
    得到所有圖像的特征碼如下,我用go語言做了處理
  • GridNumbers = map[GridDefine][]int{ // 每個標識的特殊位置的顏色值,用于區(qū)分這些位置的值DefOne: {0, 1, 0, 1, 1, 1, 1, 1, 1, 1}, // 1DefTwo: {0, 0, 0, 0, 0, 0, 0, 1, 0, 1}, // 2DefThree: {0, 1, 0, 0, 0, 0, 0, 1, 0, 1}, // 3DefFour: {0, 1, 0, 1, 0, 1, 0, 1, 1, 1}, // 4DefFive: {0, 1, 0, 0, 1, 0, 1, 1, 0, 1}, // 5DefSix: {0, 0, 0, 0, 1, 1, 1, 1, 1, 1}, // 6DefSeven: {1, 1, 0, 1, 0, 1, 0, 1, 0, 1}, // 7DefEight: {0, 0, 0, 0, 0, 1, 0, 1, 0, 1}, // 8DefFlag: {0, 1, 1, 1, 1, 1, 1, 1, 1, 0}, // 紅旗DefMine: {0, 1, 0, 1, 0, 1, 0, 1, 0, 1}, // 地雷DefRedMine: {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 標紅地雷,表示輸了DefClick: {1, 1, 1, 1, 1, 1, 1, 1, 1, 0}, // 可點擊白板DefNotNeed: {1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, // 不可點擊}
  • 找到圖像識別方案,下面就說說算法吧
    第一步,找到必定為雷的位置,如下圖所示,之所以能得出標旗位置,是因為周圍有數(shù)字可以確定這是一個雷。因此有下面的準則
    可點擊數(shù) + 已經標旗數(shù) = 本格子雷數(shù),右鍵把可點擊位置全部標雷
    此時這些點已經沒有意義,可以不考慮了

    第二步,找到有不確定的位置,但是標旗數(shù)已經等于本格雷數(shù),所以該格子周圍可點擊處一定不是雷。所以還有一下準則
    標旗數(shù) = 本格子雷數(shù),鼠標中鍵點擊格子,點開可點擊位置
    此時對于左邊的3右邊的2來說雷的數(shù)量已經夠了,可以中鍵點擊這兩個格子。此時這些點已經沒有意義,可以不考慮了

    第三步,如果遍歷所有數(shù)字點,沒有滿足第一和第二步的情況,那么將除了第一步和第二步排除后的數(shù)字點列為不確定的點。此時需要相鄰2個點同時做判斷。下面介紹一種不確定狀態(tài)下標雷技巧
    對于中間的2上面3個點有二個雷,2右邊的1表示上面三個點中右邊二個點只能有一個雷,因此對于中間的2來說剩余的一個點一定是雷。下面是準則。
    兩個相鄰格子待標雷數(shù)多的為A,待標雷數(shù)少的為B
    A待標雷數(shù) - B待標雷數(shù) = A可點擊數(shù) - AB相交位置數(shù)
    表示A除了相交位置以外的可點擊位置一定全是雷

    第四步,下面的情況我一定知道紅色位置不是雷,因為對于4而言下面二個點只能有一個雷,那么4左邊的2的已經把雷確認完了,所以紅色位置肯定不是雷,下面是準則。
    兩個相鄰格子A和B待標雷數(shù)相同,A的可點擊數(shù)為a,格子B的可點擊數(shù)為b,兩個格子相交數(shù)為c
    如果a = c,則格子B除開相交位置的可點擊位置一定不是雷
    如果b = c,則格子A除開相交位置的可點擊位置一定不是雷
  • 根據(jù)上面四個準則,掃雷一定能進行到除了猜雷就沒轍的情況。意思是按照上面的準則,全都沒法判定是雷不是雷的情況,那么只能乖乖的猜雷了。然而我多出查詢資料得到猜雷最多憑概率,沒有辦法做到一定成功。因此我的掃雷算法的猜雷只是簡單的在不確定點周圍隨機點一個左鍵。所以用我的程序自動猜雷是會出現(xiàn)猜錯的情況。
  • 下面公布我的代碼吧
  • package mainimport ("log""math/rand""reflect""time""unsafe""fmt""github.com/lxn/win" // 另外的源碼,github.com/CodyGuo/win )type Pos struct {x int /* 表示一個點的橫坐標,縱坐標 */y int }/* 定義格子內容的類型,不直接用int避免使用時混亂 */ type GridDefine intconst ( /* 枚舉類型,標記格子內容 */DefClick GridDefine = iota // 可點擊白板DefOne // 1DefTwo // 2DefThree // 3DefFour // 4DefFive // 5DefSix // 6DefSeven // 7DefEight // 8DefFlag // 紅旗DefNotNeed // 不可點擊的空白,以及標識無用的數(shù)字位置DefMine // 地雷DefRedMine // 標紅地雷,表示輸了 )const (GameName = "掃雷" // 游戲窗體名稱GameHigh = 16 // 雷區(qū)高度GameWide = 30 // 雷區(qū)寬度GridLen = 16 // 雷區(qū)每個格子長寬//GameMine = 99 // 存在雷的個數(shù),貌似用不上了 )var (StartBtn win.POINT // 笑臉的位置,點擊可以開始游戲StartNum win.POINT // 標記剩余雷數(shù)的位置StartMine win.POINT // 雷區(qū)起始位置GameHwnd win.HWND // 掃雷窗體對象GuessMineOk int // 1表示啟動啟動猜雷,0表示玩家自己猜雷TeachModel int // 1表示每一步都顯示操作,0表示不顯示每一步的操作CntNotSure int // 標記不確定點個數(shù)flagStart int // 標記是否已經開局,如果開局則永遠不會等于0NotSurePos [GameHigh * GameWide]Pos // 緩存一次掃描中所有不確定點位置GridSave [][]GridDefine // 保存數(shù)據(jù)的二維數(shù)組GridNumbers = map[GridDefine][]int{ // 每個標識的特殊位置的顏色值,用于區(qū)分這些位置的值DefOne: {0, 1, 0, 1, 1, 1, 1, 1, 1, 1}, // 1DefTwo: {0, 0, 0, 0, 0, 0, 0, 1, 0, 1}, // 2DefThree: {0, 1, 0, 0, 0, 0, 0, 1, 0, 1}, // 3DefFour: {0, 1, 0, 1, 0, 1, 0, 1, 1, 1}, // 4DefFive: {0, 1, 0, 0, 1, 0, 1, 1, 0, 1}, // 5DefSix: {0, 0, 0, 0, 1, 1, 1, 1, 1, 1}, // 6DefSeven: {1, 1, 0, 1, 0, 1, 0, 1, 0, 1}, // 7DefEight: {0, 0, 0, 0, 0, 1, 0, 1, 0, 1}, // 8DefFlag: {0, 1, 1, 1, 1, 1, 1, 1, 1, 0}, // 紅旗DefMine: {0, 1, 0, 1, 0, 1, 0, 1, 0, 1}, // 地雷DefRedMine: {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 標紅地雷,表示輸了DefClick: {1, 1, 1, 1, 1, 1, 1, 1, 1, 0}, // 可點擊白板DefNotNeed: {1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, // 不可點擊}GridSlice = make([]byte, GameWide*GridLen*GameHigh*GridLen*4) // 緩存截屏數(shù)據(jù),全局初始化,避免重復申請內存 )/** * 初始化數(shù)據(jù) * 做準備工作 **/ func init() {var RectPos, ClientPos win.RECT // 找出窗體左上,右下的坐標,以及窗體除標題欄的寬高GameHwnd = win.FindWindow(win.StringToBSTR(GameName), win.StringToBSTR(GameName))if !win.ShowWindow(GameHwnd, win.SW_RESTORE) { // 激活窗口,如果當前為最小化則還原窗體log.Fatal("請運行掃雷游戲...") /* 找不到游戲窗體,直接退出 */}win.UpdateWindow(GameHwnd) // 更新窗體win.GetWindowRect(GameHwnd, &RectPos) /* 得到窗體左上右下的坐標 */win.GetClientRect(GameHwnd, &ClientPos) /* 得到窗體處標題欄以外的長和寬 */var leftX, topY = RectPos.Right - ClientPos.Right, RectPos.Bottom - ClientPos.BottomStartBtn.X, StartBtn.Y = (RectPos.Left+RectPos.Right)/2, topY+25 // 初始化開始游戲按鈕StartMine.X, StartMine.Y = leftX+10, topY+53 // 初始化雷區(qū)起始位置StartNum.X, StartNum.Y = leftX+15, topY+14 // 初始化數(shù)字區(qū)位置GridSave = make([][]GridDefine, GameHigh) // 產生二維數(shù)組保存雷區(qū)數(shù)據(jù)for i := 0; i < GameHigh; i++ { // 遍歷高GridSave[i] = make([]GridDefine, GameWide)}fmt.Print("1 [教學模式],0 [自動模式],請輸入:")fmt.Scanln(&TeachModel)if TeachModel == 0 { /* 如果是自動模式則需要選擇猜雷方法 */fmt.Print("1 [自動猜雷],0 [人工猜雷],請輸入:")fmt.Scanln(&GuessMineOk)} /* 如果是教學模式,則默認人工猜雷 */ }/** * 開始執(zhí)行 **/ func main() {var (i, j, flagSure, flagAuto int)win.SetCursorPos(StartBtn.X, StartBtn.Y) // 媽逼的只能鼠標點擊把窗口激活了,試過win32 api不行啊win.MouseEvent(win.MOUSEEVENTF_LEFTDOWN|win.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)time.Sleep(time.Millisecond * 200) // 雙擊開始的笑臉win.MouseEvent(win.MOUSEEVENTF_LEFTDOWN|win.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)rand.Seed(time.Now().UnixNano()) //初始化隨機數(shù)種子log.Println("游戲開始!")for RefreshGrid() && GetRemainMineCnt() > 0 { /* 當遇到紅色地雷 或 地雷 以及剩余雷數(shù)為0 */CntNotSure, flagSure = 0, 0for i = 0; i < GameHigh; i++ { // 遍歷高度for j = 0; j < GameWide; j++ { //遍歷寬度if GridSave[i][j] >= DefOne && GridSave[i][j] <= DefEight { /* 代表數(shù)字的位置 */switch flagPos, style := GetAroundCount(i, j, 0); style {case 1: /* 類型1表示周圍可點擊格子一定是雷 */for _, v := range flagPos {ClickPos(v, "right")}GridSave[i][j] = DefNotNeed /* 標完雷,此位置已無效 */flagSure = 1 // 表示本次遍歷出現(xiàn)可點右鍵標雷的點case 2: /* 類型2表示本格可以點鼠標中鍵了 */ClickPos(Pos{x: j, y: i}, "center")GridSave[i][j] = DefNotNeed /* 點開一片區(qū)域,此位置已無效 */flagSure = 2 // 表示本次出現(xiàn)可點中鍵的點if RefreshGrid() == false { /* 點中鍵后需要刷新當前界面避免重復點擊中鍵 */goto EndLoop // 當然如果遇到地雷則退出循環(huán)}case 3: /* 周圍地雷已經標完,且不需要點擊中鍵 */GridSave[i][j] = DefNotNeed /* 點開一片區(qū)域,此位置已無效 */flagSure = 3 // 表示本次出現(xiàn)可點中鍵的點default:NotSurePos[CntNotSure].x = iNotSurePos[CntNotSure].y = jCntNotSure++ // 記錄本次遍歷所有無法確定雷的點}}} //GameWide} // GameHighif flagSure == 0 { /* 本次遍歷全是不確定的點 */if flagStart == 0 { /* 開局,如果沒有出現(xiàn)必定能判斷的點,則一直隨機點鼠標左鍵 */ClickPos(Pos{x: rand.Intn(GameWide), y: rand.Intn(GameHigh)}, "left")continue // 開局點擊后如無法出現(xiàn)必定可以繼續(xù)的點,直接進入下一個循環(huán)}for i = 0; i < CntNotSure; i++ { // 遍歷不確定的點if GetAroundNotSureCount(NotSurePos[i].x, NotSurePos[i].y) {break // 如果對雷區(qū)有操作則需要重新整個界面掃雷}flagSure++ // 如果把不確定點全部遍歷則表示需要猜雷了}if flagSure == CntNotSure {/** 猜測某個點沒有雷,運氣成分,如需提高勝率可優(yōu)化下面代碼,下面是關于猜雷的思路* 1.(https://tieba.baidu.com/p/1761431400?red_tag=3267954760)* 上面是我看到比較靠譜的理論,由于計算機雖然笨但運算快,因此我打算實現(xiàn)這個方案* 2.死猜,及無論如何都不可能判定哪個是雷,那就只能隨機猜一個了* 3.這里還要注意一點,及剩余雷數(shù),有時候根據(jù)剩余雷數(shù)可以提高勝率* 按照上面3個步驟,還沒發(fā)確定是不是雷,媽逼只能靠運氣了* 到處找教程最終沒能找到一個好點的方案,還是隨機點擊一個位置**/if GuessMineOk == 1 { /* 自動猜雷是隨機點一個 */i = rand.Intn(CntNotSure) // 下面是最挫的猜雷方案,隨機找一個不確定點,在該點周圍隨機點一個點var tPos, _ = GetAroundCount(NotSurePos[i].x, NotSurePos[i].y, 1)i = rand.Intn(len(tPos)) // 在不確定列表中隨機找一個點,隨機點這個點周圍的一個可點擊點ClickPos(Pos{x: tPos[i].x, y: tPos[i].y}, "left")} else {if flagAuto == 0 {flagAuto = 1log.Println("請你猜雷吧,確認后按空格鍵繼續(xù)...")WaitKeyboard(win.VK_SPACE) // 等待空格鍵按下并松開}time.Sleep(time.Millisecond * 500) // 玩家猜雷,可以允許延時}}} else { /* 將開局標志賦值,此時flagStart代表已經不是開局了 */flagStart = flagSureflagAuto = 0 // 經歷了猜雷到不猜}} EndLoop:if GetRemainMineCnt() == 0 {log.Println("你贏了比賽!")} else {log.Println("你輸了比賽!")}fmt.Println("請按回車退出...")fmt.Scanln() // 雙擊打開時避免最終一閃而逝! }/** * 找到不可確定點 * 與周圍的不可確定點一起 * 看能否確定一些雷和可點擊位置 * return,返回true表示一定點了數(shù)字或標了雷 **/ func GetAroundNotSureCount(x, y int) bool {var (i, j, cntMix intclickPos, needMine = GetAroundCount(x, y, 1) /* 得到本點可點擊位置,以及剩余雷數(shù) */clickCnt = len(clickPos) // 可點擊數(shù)個數(shù)MorePos = [2]struct {//* 記錄在點a不在點b周圍可點擊的位置 */pos [8]Pos //最大也就8個點,數(shù)組完全夠用cnt int // 記錄點的個數(shù),用于遍歷時使用}{} // 多于點的位置,以及點的個數(shù)endClick = struct {k int // 最終需要點擊MorePos數(shù)組的哪一個key string // 鼠標鍵值,因為有時候需要左鍵數(shù)字,有時候需要右鍵標雷}{}posInNotSure = func(x1, y1 int) bool { //閉包,確定這個點在不確定列表中for i1 := 0; i1 < CntNotSure; i1++ {if NotSurePos[i1].x == x1 && NotSurePos[i1].y == y1 {return true}}return false})/* 只找x相同或y相同的點 */for i = x - 1; i <= x+1; i++ { // 以下雙層循環(huán)遍歷本點四周的點for j = y - 1; j <= y+1; j++ { /* 只會找上下左右4個點,并且本點是一個數(shù)字點,且必須在不確定列表中 */if i >= 0 && j >= 0 && i < GameHigh && j < GameWide && (i == x && j != y || i != x && j == y) && (GridSave[i][j] >= DefOne && GridSave[i][j] <= DefEight) && posInNotSure(i, j) {cntMix = 0 // 記錄兩個點重合可點擊位置個數(shù)/* 根據(jù)(x,y),(i,j)這兩個不確定點找還能標雷或點擊的位置 */var nowPos, nowMine = GetAroundCount(i, j, 1) // 得到周圍的這個不確定點,周圍可點擊位置和待標雷數(shù)MorePos[0].cnt = 0for _, v1 := range clickPos {endClick.k = 0 // 這里該變量作為標記使用,避免定義太多變量了for _, v2 := range nowPos {if v1 == v2 {endClick.k = 1cntMix++ // 記錄相交的點個數(shù)break}}if endClick.k == 0 {MorePos[0].pos[MorePos[0].cnt] = v1MorePos[0].cnt++ // 記錄在clickPos中且不在nowPos中的點}} // range clickPosMorePos[1].cnt = 0for _, v1 := range nowPos {endClick.k = 0for _, v2 := range clickPos {if v1 == v2 {endClick.k = 1break}}if endClick.k == 0 {MorePos[1].pos[MorePos[1].cnt] = v1MorePos[1].cnt++ // 記錄在clickPos中且不在nowPos中的點}} // range nowPosendClick.k = -1 // 當賦值其他數(shù)據(jù)時,表示一定需要點擊endClick.key = "right" // 因為只有nowMine == needMine才為left,設置默認值if nowMine == needMine { // 兩個點待標雷個數(shù)相同if cntMix == clickCnt { // 表示一個點全部在相交位置,此時另一個點附近不相交的點只能是數(shù)字endClick.k = 1} else if cntMix == len(nowPos) { // 同上,只是換了一個點而已endClick.k = 0}endClick.key = "left"} else if nowMine > needMine { // 待標雷個數(shù)大的一方if nowMine-needMine == len(nowPos)-cntMix {endClick.k = 1 // 2個點待標雷數(shù)相減 = 可點擊數(shù)大的點減去重合點的個數(shù),表示可點擊數(shù)多的點多出的位置一定全是雷}} else {if needMine-nowMine == clickCnt-cntMix {endClick.k = 0 // 同上,只是點不一樣而已}}if endClick.k >= 0 && MorePos[endClick.k].cnt > 0 {for i = 0; i < MorePos[endClick.k].cnt; i++ {ClickPos(MorePos[endClick.k].pos[i], endClick.key) // 需要操作的格子不是地雷則隨便搞}return true // 已經點擊數(shù)字或標雷,整個界面需要重新判定}} // end if} // end j} // end ireturn false // 當前點沒有合適的判定點 }/** * 找到x,y周圍8個點中 * 可點擊的點個數(shù),已經標為紅旗的個數(shù) * 返回可點擊的坐標位置,且返回當前這個點的類型 * 類型有2=>需要點擊鼠標中鍵,1=>需要把周邊的可點擊點標小旗 * 剩下的類型需要更深層次的計算了 **/ func GetAroundCount(x, y, inTpye int) (flagPos []Pos, status int) {var (i, j intcntClick, cntFlag GridDefine /* 標記可點擊,標記紅旗 */)for i = x - 1; i <= x+1; i++ { // 以下雙層循環(huán)遍歷本點四周的點for j = y - 1; j <= y+1; j++ {if i >= 0 && j >= 0 && i < GameHigh && j < GameWide && (i != x || j != y) { // 剔除超過邊界點,以及x,y所在點if DefClick == GridSave[i][j] {flagPos = append(flagPos, Pos{x: j, y: i})cntClick++} else if DefFlag == GridSave[i][j] {cntFlag++}}} // y} // xif 1 == inTpye { /* 返回周圍可點擊點位置,并且返回當前點剩余雷的個數(shù) */return flagPos, int(GridSave[x][y] - cntFlag)}if GridSave[x][y] == cntFlag {if cntClick == 0 { /* 如果可點擊數(shù)量為空,則當前位置不需要點鼠標中鍵 */return flagPos, 3}return flagPos, 2 /* 小旗個數(shù)等于本格子雷數(shù),點擊鼠標中鍵 */}if cntClick+cntFlag == GridSave[x][y] {return flagPos, 1 /* 可點擊 + 小旗 = 本格子雷數(shù),表示可點擊一定全是雷 */}return flagPos, 0 /* 剩下的情況一定是可點擊格數(shù)大于本格剩余雷數(shù) */ }/** * 傳入ClickTask對象 * 模擬鼠標點擊某個位置 * 單擊左鍵中鍵右鍵 **/ func ClickPos(pos Pos, key string) {var NowPos = uintptr((pos.x*GridLen + 21) | (pos.y*GridLen+64)<<16)switch key {case "left": // 確定不是雷,則隨便點左鍵win.SendMessage(GameHwnd, win.WM_LBUTTONDOWN, 0, NowPos)win.SendMessage(GameHwnd, win.WM_LBUTTONUP, 0, NowPos)case "right":if GridSave[pos.y][pos.x] == DefClick { /* 右鍵位置為可點擊才點,否則不點,避免重復標雷 */win.SendMessage(GameHwnd, win.WM_RBUTTONDOWN, 0, NowPos)win.SendMessage(GameHwnd, win.WM_RBUTTONUP, 0, NowPos)GridSave[pos.y][pos.x] = DefFlag // 并且此處標記為地雷}case "center": // 中鍵點開一片區(qū)域win.SendMessage(GameHwnd, win.WM_MBUTTONDOWN, 0, NowPos)win.SendMessage(GameHwnd, win.WM_MBUTTONUP, 0, NowPos)}if TeachModel == 1 && flagStart != 0 { /* 開局以后的操作才顯示 */var tmpPos = win.POINT{X: int32(pos.x*GridLen + 21), Y: int32(pos.y*GridLen + 64)}win.ClientToScreen(GameHwnd, &tmpPos) /* 將相對窗體位置轉化為相對整個屏幕的位置 */win.SetCursorPos(tmpPos.X, tmpPos.Y)log.Printf("點擊鼠標按鍵:%6s,請按空格鍵繼續(xù)...\n", key)WaitKeyboard(win.VK_SPACE) // 等待空格鍵按下并松開} }/** * 等待一個按鍵按下并松開 **/ func WaitKeyboard(key int32) {for win.GetKeyState(key) >= 0 { /* 有按鍵退出循環(huán) */time.Sleep(time.Millisecond * 100)}for win.GetKeyState(key) < 0 { /* 松開按鍵退出循環(huán) */time.Sleep(time.Millisecond * 100)} }/** * 用到獲取屏幕截圖代碼 * 已經去掉robotgo,讓程序沒有dll依賴 * 截屏代碼摘自https://github.com/vova616/screenshot * 這里需要學習指針轉換的操作,以及內存拷貝的操作 **/ func RefreshGrid() bool {var (w, h int32 = GameWide * GridLen, GameHigh * GridLena, b, c, d, e int // 只是作為循環(huán)變量而已screen, screenMem win.HDCdib win.HBITMAPbi win.BITMAPINFOptr = unsafe.Pointer(uintptr(0))obj win.HGDIOBJtmpArr [10]int // 緩存那幾個點的值GrayControl = func(r, g, b byte) int { /* 灰化圖像,閾值為150 */if float32(r)*0.11+float32(g)*0.59+float32(b)*0.3 >= 150 {return 1}return 0})bi.BmiHeader.BiSize = uint32(reflect.TypeOf(bi.BmiHeader).Size())bi.BmiHeader.BiWidth = wbi.BmiHeader.BiHeight = -h /* Non-cartesian, please */bi.BmiHeader.BiPlanes = 1bi.BmiHeader.BiBitCount = 32bi.BmiHeader.BiCompression = win.BI_RGBbi.BmiHeader.BiSizeImage = uint32(4 * w * h)bi.BmiHeader.BiXPelsPerMeter = 0bi.BmiHeader.BiYPelsPerMeter = 0bi.BmiHeader.BiClrUsed = 0bi.BmiHeader.BiClrImportant = 0if screen = win.GetDC(0); screen == 0 {return false}defer win.ReleaseDC(0, screen)dib = win.CreateDIBSection(screen, &bi.BmiHeader, win.DIB_RGB_COLORS, &ptr, 0, 0)if dib == 0 || win.GpStatus(dib) == win.InvalidParameter {return false}defer win.DeleteObject(win.HGDIOBJ(dib))if screenMem = win.CreateCompatibleDC(screen); screenMem == 0 {return false}defer win.DeleteDC(screenMem)if obj = win.SelectObject(screenMem, win.HGDIOBJ(dib)); obj == 0 || obj == 0xffffffff {return false}defer win.DeleteObject(obj)if !win.BitBlt(screenMem, 0, 0, w, h, screen, StartMine.X, StartMine.Y, win.SRCCOPY) {return false // 截屏}hDrp := (*reflect.SliceHeader)(unsafe.Pointer(&GridSlice))hDrp.Data = uintptr(ptr) /* 將指針中的數(shù)據(jù)映射到[]byte中 *///hDrp.Len = int(w * h * 4)//hDrp.Cap = int(w * h * 4)for a = 0; a < GameHigh; a++ { // 遍歷高度for b = 0; b < GameWide; b++ { //遍歷寬度if DefNotNeed == GridSave[a][b] || DefFlag == GridSave[a][b] {continue /* 該點已沒意義 或 該點已經標記為地雷,所以不用計算 */}for c, e = 0, 0; c < 5; c++ { // 找到那幾個特殊的點,備注找到更少點確定值則可以越快得到數(shù)據(jù)d = (a*GridLen+7-c)*4*GameWide*GridLen + 4*(b*GridLen+c+7)tmpArr[e] = GrayControl(GridSlice[d+2], GridSlice[d+1], GridSlice[d])e++/* 注意本處的特征碼是根據(jù)灰化后的圖像得出,我也是花了九牛二虎之力才搞到的額 */d = (a*GridLen+c+9)*4*GameWide*GridLen + 4*(b*GridLen+2)tmpArr[e] = GrayControl(GridSlice[d+2], GridSlice[d+1], GridSlice[d])e++}for k, v := range GridNumbers { // 遍歷map,得到本格子的實際信息for c = 0; c < 10; c++ {if v[c] != tmpArr[c] {c = -1 // 標識該位置與當前v不匹配break}}if c != -1 { /* 如果z=-1表示沒有匹配到當前v的特征值 */if k == DefMine || k == DefRedMine {return false /* 遇到標紅的雷或者黑色的雷,游戲結束 */}GridSave[a][b] = kbreak}}} // 內層for結束} // 外層for結束return true }/** * 從界面得到剩余雷的個數(shù) **/ func GetRemainMineCnt() int {var (i, x, y intNum [3]intFlagCnt [7]int/* __0__* 5| |1* |__6__|* 4| |2* |__3__|* 按照上面的順序標記一個數(shù)字* 相鄰顏色值相同則賦值為1,不同則賦值為0* 根據(jù)對應的map匹配得到該位置具體數(shù)字**/FlagDot = map[int][]int{0: {1, 1, 1, 1, 1, 1, 0},1: {0, 1, 1, 0, 0, 0, 0},2: {1, 1, 0, 1, 1, 0, 1},3: {1, 1, 1, 1, 0, 0, 1},4: {0, 1, 1, 0, 0, 1, 1},5: {1, 0, 1, 1, 0, 1, 1},6: {1, 0, 1, 1, 1, 1, 1},7: {1, 1, 1, 0, 0, 0, 0},8: {1, 1, 1, 1, 1, 1, 1},9: {1, 1, 1, 1, 0, 1, 1},}NumPosX = []int32{StartNum.X, StartNum.X + 13, StartNum.X + 26} /* 三個數(shù)字左上角x坐標 */hdc = win.CreateDC(win.StringToBSTR("DISPLAY"), nil, nil, nil))defer win.DeleteDC(hdc) // 用完hdc對象要釋放for i = 0; i < 3; i++ {if win.GetPixel(hdc, NumPosX[i]+5, StartNum.Y) == win.GetPixel(hdc, NumPosX[i]+5, StartNum.Y+1) {FlagCnt[0] = 1} else {FlagCnt[0] = 0}if win.GetPixel(hdc, NumPosX[i]+9, StartNum.Y+4) == win.GetPixel(hdc, NumPosX[i]+9, StartNum.Y+5) {FlagCnt[1] = 1} else {FlagCnt[1] = 0}if win.GetPixel(hdc, NumPosX[i]+9, StartNum.Y+14) == win.GetPixel(hdc, NumPosX[i]+9, StartNum.Y+15) {FlagCnt[2] = 1} else {FlagCnt[2] = 0}if win.GetPixel(hdc, NumPosX[i]+5, StartNum.Y+18) == win.GetPixel(hdc, NumPosX[i]+5, StartNum.Y+19) {FlagCnt[3] = 1} else {FlagCnt[3] = 0}if win.GetPixel(hdc, NumPosX[i]+1, StartNum.Y+14) == win.GetPixel(hdc, NumPosX[i]+1, StartNum.Y+15) {FlagCnt[4] = 1} else {FlagCnt[4] = 0}if win.GetPixel(hdc, NumPosX[i]+1, StartNum.Y+4) == win.GetPixel(hdc, NumPosX[i]+1, StartNum.Y+5) {FlagCnt[5] = 1} else {FlagCnt[5] = 0}if win.GetPixel(hdc, NumPosX[i]+5, StartNum.Y+9) == win.GetPixel(hdc, NumPosX[i]+5, StartNum.Y+10) {FlagCnt[6] = 1} else {FlagCnt[6] = 0}for x = 0; x < 10; x++ {for y = 0; y < 7; y++ {if FlagCnt[y] != FlagDot[x][y] {y = -1 // 不匹配當前數(shù)字,不必遍歷所有值break}}if -1 != y { // 如果全部匹配則就是這個數(shù)字了Num[i] = xbreak /* 找到數(shù)字值,不必再循環(huán) */}}}return Num[0]*100 + Num[1]*10 + Num[2] /* 轉換為剩余雷數(shù) */ }
  • 這里我要說一下,我的程序可以教你掃雷。如下圖輸入1或0回車即可

    如果選擇了教學模式,那么只能用人工猜雷。此時教學模式會把每一步鼠標操作都展現(xiàn)出來,方便大家思考和學習。這時候按一下空格鍵才會自動進行下一步,而且會顯示鼠標位置到底是右鍵標雷還是左鍵點擊還是中鍵操作。你可以根據(jù)當前操作分析周圍的點,看看我的程序是如何做到判斷一個位置是否有雷的。

  • 剩下的自動模式無非就程序自動掃雷,此時會選擇自動猜雷還是人工猜雷,如果人工猜雷則需要等程序無法判定能否操作時由你自己去猜雷。自動猜雷就是隨便點了一個點而已。綜上所述,我的掃雷代碼算是完成了,除了猜雷沒有好的方案完成以外,其他都做的很不錯。希望給大家一些啟發(fā)。
    這里是程序哈掃雷游戲下載程序

  • 當然如果你沒有csdn積分可以用百度云,密碼49nt

    總結

    以上是生活随笔為你收集整理的用算法去扫雷(go语言)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

    久久97超碰 | 天天鲁天天干天天射 | 国产黄色精品网站 | 久久国产精品一国产精品 | 免费下载高清毛片 | 美女国产免费 | 黄p网站在线观看 | 亚洲激情综合网 | 天天干天天干天天干天天干天天干天天干 | 六月天综合网 | 国产 一区二区三区 在线 | 国产精品精品国产色婷婷 | 免费观看国产成人 | 日韩三级在线观看 | 久久综合九色综合欧美就去吻 | 欧美一区二区三区在线视频观看 | 狠狠狠狠狠狠操 | 九色福利视频 | 国产精品视频99 | 激情av一区二区 | 精品视频123区在线观看 | 国产一区二区影院 | 99精品黄色片免费大全 | 日韩欧美国产成人 | 欧美福利在线播放 | 国产一区二区在线免费观看 | 久久久久色 | 久久成人综合 | 亚洲乱码一区 | 视频一区二区在线观看 | 人人干人人搞 | 欧美污网站 | 国产在线视频一区二区三区 | 91精品综合在线观看 | 丁香六月婷| 欧美人人爱 | 999久久久久久久久 69av视频在线观看 | 中文字幕av有码 | 欧美精品乱码99久久影院 | 99热亚洲精品 | 99国产视频在线 | 国产精品毛片久久蜜 | 在线国产高清 | 99精品免费久久久久久日本 | 欧美日韩一区二区视频在线观看 | 国内成人精品视频 | 色狠狠综合天天综合综合 | 国产精品九九久久久久久久 | 日本精品在线视频 | 国产精品久久久久久久久久不蜜月 | 欧美日韩二区在线 | 激情网站免费观看 | 亚洲网站在线 | 在线看片中文字幕 | 亚洲另类视频 | 色婷婷99| 国产一区免费在线观看 | www.久久色 | 久久毛片高清国产 | 中文字幕在线播放av | 欧美一级性生活视频 | 色视频网页| 国产精品9999久久久久仙踪林 | 久久草在线精品 | 日韩国产精品久久 | 久久激情精品 | 国产69久久 | 亚洲精品91天天久久人人 | 国产精品高潮在线观看 | 久久久久一区 | 99r国产精品 | 九九热99视频 | 五月婷婷激情 | 免费看网站在线 | 久久精品一区二 | 8x成人在线| 亚洲激情婷婷 | 亚洲黄色成人 | 精品视频国产一区 | 美女网站免费福利视频 | 国产精品视频免费观看 | 精品国产电影一区二区 | 精品视频在线视频 | 天天爽天天碰狠狠添 | 国产精品av免费在线观看 | 中文字幕在线观看视频一区 | 免费在线看v | 中文字幕在线影院 | 精品国产一区二区三区在线观看 | 久久综合狠狠综合久久狠狠色综合 | 97超碰超碰 | 美女网站黄在线观看 | 四虎精品成人免费网站 | 欧美精品你懂的 | 国产一二三四在线视频 | 成片免费 | 99视频国产精品免费观看 | av天天色| 激情久久伊人 | 色综合天天综合 | 探花视频在线观看+在线播放 | 久草在线在线视频 | www.com.黄| 丁香综合av | 国产精品久久一区二区无卡 | 日韩在线视频网 | 久久美女免费视频 | 亚洲精品乱码久久久久久高潮 | 狂野欧美激情性xxxx欧美 | av免费在线播放 | 天海冀一区二区三区 | 亚洲精品久久久久999中文字幕 | 久久久2o19精品 | 亚洲黄色免费在线看 | 国产日韩欧美在线影视 | 青青草国产成人99久久 | 久久久久久国产精品 | 人人爽人人爱 | 亚洲精品综合在线观看 | 久久黄色小说视频 | 五月天婷婷丁香花 | 久久免费a | 日韩av福利在线 | 一区二区三区在线免费观看视频 | 久久精品一区二区三区四区 | 一本一道波多野毛片中文在线 | 日韩美在线 | 欧美老人xxxx18 | 日韩黄色免费看 | 99爱爱| 欧美aa在线 | 亚洲伊人网在线观看 | 国产在线色站 | 婷婷网五月天 | 97国产| 久久夜视频 | 九九国产精品视频 | 操操操夜夜操 | 国产精品入口麻豆www | 亚洲久草在线视频 | 色丁香久久 | 国内揄拍国内精品 | 亚洲精品美女在线 | 日本激情视频中文字幕 | 中文字幕在线人 | 日本中文字幕在线播放 | 在线免费观看一区二区三区 | 精品国产三级a∨在线欧美 免费一级片在线观看 | 国产福利av | 西西大胆免费视频 | 超级碰碰碰免费视频 | 一级免费看 | 欧美日韩精品二区第二页 | 色噜噜狠狠狠狠色综合久不 | 精品国产乱码 | 亚洲aⅴ一区二区三区 | 久久久久五月 | 色999视频 | 欧美 亚洲 另类 激情 另类 | 久久深夜 | 97视频亚洲 | 美女免费av | www在线观看国产 | 欧美日韩另类在线观看 | 精品一区 精品二区 | 一区二区理论片 | 麻豆久久久 | 日韩专区在线播放 | 久草视频观看 | 亚洲综合爱 | 国产美女精品视频 | 黄色片网站av | 久久精品国产亚洲 | 久久看视频 | 蜜臀久久99精品久久久酒店新书 | 亚洲一区久久 | 国产高清在线免费观看 | 日韩理论在线 | 日韩高清免费无专码区 | 五月在线视频 | 国产美女久久久 | 成年人电影免费在线观看 | 国产亚洲观看 | 国产福利免费在线观看 | 国产精品美女久久久久久2018 | 欧美韩国日本在线观看 | 精品在线观看一区二区 | 久久精品亚洲精品国产欧美 | 国产精品 中文字幕 亚洲 欧美 | 韩日色视频 | 亚洲清纯国产 | 97看片 | 91成人破解版 | 亚洲经典视频 | 国内成人av | 国产视频九色蝌蚪 | 911国产| 5月丁香婷婷综合 | 日本不卡一区二区三区在线观看 | 视频一区久久 | 久99久精品视频免费观看 | 最近最新中文字幕 | 亚洲国产成人精品电影在线观看 | 免费久久视频 | 狠狠插天天干 | 天天干夜夜夜操天 | 亚洲成人频道 | 在线a视频| 国产精品国产三级国产aⅴ9色 | 国产精品永久在线观看 | 欧美精品国产综合久久 | 国产精品1区 | zzijzzij亚洲日本少妇熟睡 | 又黄又刺激的视频 | 中国一级片在线观看 | 午夜久久成人 | 国产高清专区 | 欧美一区二区三区在线观看 | 免费午夜av | 丁香婷婷基地 | 久久99精品久久久久久三级 | 激情伊人五月天久久综合 | 91视频 - v11av | 亚洲精品美女久久久久 | 69国产盗摄一区二区三区五区 | 超碰97人人在线 | 又黄又爽又无遮挡免费的网站 | 欧美99热| 日本aaaa级毛片在线看 | 亚洲成人精品 | 婷婷久久综合网 | 久久无码av一区二区三区电影网 | 久久久国产一区二区 | 中文字幕在线一二 | 亚洲天堂网视频在线观看 | 中文字幕免费在线看 | 在线观看免费国产小视频 | 日日夜夜狠狠操 | 成人黄色电影在线观看 | 97在线观看视频免费 | 久久伊人精品一区二区三区 | 国产一区影院 | 又湿又紧又大又爽a视频国产 | 九九热久久免费视频 | 99这里精品 | 国产短视频在线播放 | 天天干天天拍天天操天天拍 | 亚洲国产精品成人av | 久久免费电影网 | 久久久久成人精品免费播放动漫 | 精品久久久久久久久久 | av 一区二区三区四区 | 国产中文字幕在线观看 | 成人三级网址 | ww亚洲ww亚在线观看 | 天天曰夜夜爽 | 国产精品久久久久久久av大片 | 国产精品精品视频 | 97精产国品一二三产区在线 | 91在线小视频 | 天天射日 | 91尤物国产尤物福利在线播放 | 国产一二区免费视频 | 特黄特色特刺激视频免费播放 | 久久免费黄色大片 | 天天色成人 | 在线视频久 | 91理论片午午伦夜理片久久 | a极黄色片 | 去看片| 国产精品自产拍在线观看桃花 | av成人在线电影 | 99色精品视频| 一级国产视频 | 久久与婷婷 | 久久久久久久久久久精 | 91免费的视频在线播放 | 天天操人人要 | 中文字幕第一 | 在线黄色观看 | 91亚洲精品国偷拍自产在线观看 | 久久精品网站视频 | 波多野结衣在线观看视频 | 97精品视频在线 | 免费在线观看日韩欧美 | 久久av免费电影 | 黄色www免费 | 免费在线观看午夜视频 | 人人藻人人澡人人爽 | 91秒拍国产福利一区 | 草在线| 国产精品久久久久久久久久久久午夜片 | 欧美精品在线观看 | 国产精品成人一区二区 | 国产一级二级三级视频 | 久久天天操 | 天天av综合网 | 一区二区三区四区精品 | www.福利 | 欧美一区在线观看视频 | 国产中文字幕一区二区三区 | 国产最新视频在线观看 | 欧美精品亚洲二区 | 国产精品久久久久久久久久ktv | 黄色av三级在线 | 91污污视频在线观看 | 中文字幕三区 | 蜜桃av观看 | 久草a在线 | 激情五月五月婷婷 | 国产亚洲在线视频 | 欧美另类美少妇69xxxx | 日本久久高清视频 | 日韩欧美高清在线观看 | 欧美极度另类 | 亚洲高清不卡av | 精品嫩模福利一区二区蜜臀 | 99r在线观看 | 亚洲成av | 免费黄色看片 | 久久精品国产亚洲aⅴ | 亚洲国产成人久久综合 | 蜜臀久久99精品久久久酒店新书 | 中文字幕在线视频国产 | 国产不卡在线观看 | 天天鲁一鲁摸一摸爽一爽 | 天天射综合网视频 | 欧洲一区二区三区精品 | 国产黄视频在线观看 | 久草新在线 | 国产在线视频导航 | 亚洲另类人人澡 | 在线免费观看视频a | 国产视频一区在线免费观看 | 色综合久久88色综合天天人守婷 | 香蕉视频久久久 | 在线视频 区 | 日韩系列 | 中日韩男男gay无套 日韩精品一区二区三区高清免费 | 高清免费在线视频 | 99精品黄色 | 91丨九色丨蝌蚪丰满 | 91精品1区2区| 亚洲天天综合 | 日韩精品不卡 | 美女视频一区二区 | 亚州性色| 国产精品一区二区三区在线播放 | 日本中文字幕久久 | 色资源网免费观看视频 | 综合激情网 | 国产成人高清在线 | 亚洲欧美成人综合 | 久久久精品国产一区二区三区 | 激情在线免费视频 | 久久这里只有精品23 | 一区二区三区动漫 | 中文字幕在线久一本久 | 国产人成在线观看 | 国产精品永久久久久久久久久 | 亚洲一区日韩 | 超黄视频网站 | 天天插伊人| 狠狠色丁香久久婷婷综 | 中文字幕在线播放视频 | 色噜噜在线观看视频 | 综合久久2023 | 9999在线视频| 欧美日韩国产一区二区三区 | 色资源二区在线视频 | 国产经典 欧美精品 | 激情动态 | 久久久久北条麻妃免费看 | 久久成人综合视频 | 麻豆国产精品一区二区三区 | 91九色在线视频观看 | 色欧美日韩 | 国产中文在线播放 | 久久999久久 | 热久久这里只有精品 | 99情趣网视频 | 久久视频精品在线观看 | 99精品免费久久久久久日本 | 久久久久北条麻妃免费看 | 香蕉在线影院 | 亚洲夜夜爽 | 探花视频在线观看免费 | 96精品高清视频在线观看软件特色 | 色亚洲激情 | 亚洲欧美视频在线 | 热久久最新地址 | 麻豆久久久 | 亚色视频在线观看 | 最近高清中文在线字幕在线观看 | 日韩动漫免费观看高清完整版在线观看 | 亚洲视频中文 | 欧美久草在线 | 国产麻豆精品一区 | 国产一区久久久 | av福利电影| 99久热在线精品视频观看 | 亚洲成人av在线播放 | 国产精品欧美一区二区三区不卡 | 99c视频高清免费观看 | 99r在线观看 | 亚洲精品高清一区二区三区四区 | 成人免费视频在线观看 | 国产亚洲欧美日韩高清 | 黄色三级网站在线观看 | 麻豆视频在线看 | 欧美日韩久久不卡 | 在线精品视频在线观看高清 | 免费福利片2019潦草影视午夜 | 日本黄色a级大片 | 天天天色 | 久久国产精品一区二区三区 | 麻豆精品传媒视频 | 国产视频日韩视频欧美视频 | 天堂在线一区二区三区 | 中文字幕丝袜 | 日韩在线色视频 | 91福利视频久久久久 | 国产精品乱码久久 | 成人播放器 | 国产黄色片免费看 | 国产精品久久久久久久电影 | 国内丰满少妇猛烈精品播放 | 成人国产一区二区 | 一区二区不卡视频在线观看 | 91精品啪在线观看国产线免费 | 国产精品自在线拍国产 | 成人免费观看网站 | 日韩视频一区二区在线 | 麻豆一精品传二传媒短视频 | 久久高清片 | 在线国产片 | 一级免费看 | 国产精品ssss在线亚洲 | 国产精品高清免费在线观看 | 精品国产一二三 | 麻豆免费在线播放 | 精品一区二区6 | 激情开心 | 五月婷婷激情 | 日韩在线| 欧美激情综合色综合啪啪五月 | 亚洲日本一区二区在线 | 操操操日日日干干干 | 激情电影影院 | 久久香蕉影视 | 国产做a爱一级久久 | 91成人在线看 | 精品久久久久久久久久岛国gif | 亚洲精品在线二区 | 中文字幕在线免费观看视频 | 久久久久免费精品视频 | 国产毛片久久久 | 99久久99久久精品 | 国产精品成人一区二区三区吃奶 | 国内视频一区二区 | 国产精品永久在线观看 | 中文字幕在线视频国产 | 国产高清免费视频 | 超碰九九 | 伊人久久电影网 | 欧美色插 | 91成人午夜| 2018好看的中文在线观看 | 免费特级黄毛片 | 欧美日韩二区三区 | 日韩午夜电影网 | 久久久电影 | 最近最新最好看中文视频 | 日韩视频中文字幕 | 日产中文字幕 | 亚洲 欧洲av | 在线观看欧美成人 | 精品在线亚洲视频 | 粉嫩av一区二区三区四区在线观看 | 国产精品久久久影视 | 精品产品国产在线不卡 | 免费观看一区 | 精品久久久一区二区 | 日本丰满少妇免费一区 | 国产91免费在线 | 9999在线观看 | 国产人免费人成免费视频 | 国产高清在线永久 | 久久一区二区三区四区 | 国产伦精品一区二区三区… | 麻豆影视在线播放 | 天天射综合网视频 | 综合网欧美 | 国产精品久久久久久久久久东京 | 成人免费网站在线观看 | 开心色停停| 欧美日韩国产精品一区二区亚洲 | 在线观看你懂的网址 | 国语麻豆 | 天天夜夜狠狠操 | 国产精品色| 国产色在线视频 | 97在线视频观看 | av在线免费观看黄 | 一区二区网| 国产在线不卡精品 | 国产伦精品一区二区三区在线 | 992tv人人网tv亚洲精品 | 欧美久久久久久久久久久久 | 伊人狠狠色丁香婷婷综合 | 久久久99精品免费观看app | 麻豆精品传媒视频 | 欧美日韩免费观看一区=区三区 | 国产成年人av | 国产精品午夜免费福利视频 | 激情影院在线 | 欧美 国产 视频 | 午夜电影中文字幕 | 久草在线观看资源 | 日韩r级电影在线观看 | 国产视频一区在线免费观看 | 国产久草在线 | 黄色av网站在线观看 | 免费高清在线观看成人 | 国产精品视屏 | 91在线小视频 | 高清视频一区 | 视频一区二区在线观看 | 国产片免费在线观看视频 | 九热精品| 97超碰中文| 91av免费观看| 国产精品成人在线观看 | 久久免费美女视频 | av一级片在线观看 | 91天堂影院 | 国产专区免费 | 在线观看免费91 | 天天操狠狠操网站 | 久久久www成人免费毛片 | 天天操天天干天天爱 | 日韩精品不卡在线观看 | 国产成人333kkk | av资源免费观看 | 久草在线高清视频 | 超碰人人在线观看 | 91在线精品一区二区 | 国产xxxx性hd极品 | 亚洲一区日韩精品 | 久久久久国产一区二区 | 伊人久久精品久久亚洲一区 | 亚洲精品一区二区三区在线观看 | 日韩中文字幕免费在线观看 | 五月天丁香 | 久久精品激情 | 蜜臀久久99静品久久久久久 | 综合久久久久久久 | 日产乱码一二三区别在线 | 91av在线电影 | 日本韩国精品一区二区在线观看 | 免费高清无人区完整版 | 日韩欧美高清不卡 | 狂野欧美激情性xxxx | 最新免费av在线 | 在线免费高清一区二区三区 | 色综合久久久久综合体桃花网 | 国产一级二级三级在线观看 | 成人日批视频 | 午夜 免费 | 久久99久国产精品黄毛片入口 | 色综合天天综合 | 亚洲一区免费在线 | 伊人婷婷久久 | 国产精品视频免费 | 久久久久久久福利 | 亚洲视频久久久 | 久久高清免费视频 | 精品久久久久久亚洲综合网站 | av三级av| 婷婷天天色| 亚洲丝袜一区二区 | 国产玖玖精品视频 | 亚洲视频在线看 | 日韩免费福利 | 99视频免费观看 | 国产二区电影 | 天天操人人干 | 亚洲 欧洲 国产 精品 | 国产一区免费视频 | 国产黄色精品在线 | 91在线在线观看 | av黄色在线观看 | 波多野结衣视频一区二区 | 国产一级二级三级视频 | 国产亚洲综合精品 | 中文字幕综合在线 | 成人午夜电影免费在线观看 | 久久曰视频 | 亚洲黄色一级视频 | 婷婷狠狠操| 久久精品91视频 | 国产亚洲精品bv在线观看 | 日韩欧美在线观看一区二区 | 91成人破解版 | 天天色中文| 久久久久 | 国产一区网 | 国产日韩精品在线观看 | 国产黄色片久久久 | 91热视频| 狠狠色狠狠综合久久 | 国色天香第二季 | 久久国产精品偷 | 欧美成人精品三级在线观看播放 | 久草在线最新视频 | 中文字幕乱在线伦视频中文字幕乱码在线 | 97超碰影视 | 超碰人人草 | 91传媒在线| 亚洲天堂网视频 | 色老板在线视频 | 中文字幕在线观看免费高清电影 | 91在线免费视频观看 | 91看毛片 | 这里只有精彩视频 | 全黄网站| 九九热久久久 | 在线看成人 | 国内外激情视频 | 久草在线视频免费资源观看 | 日韩欧美黄色网址 | 91精品视频免费看 | 久久中文字幕导航 | 国产亚洲成人网 | 91亚洲狠狠婷婷综合久久久 | 久久久久这里只有精品 | 4hu视频| 91av片 | av成人在线网站 | 欧美成人tv | 国产精品1区2区 | 日本三级大片 | 久久成人欧美 | 高清av免费看 | 热久久视久久精品18亚洲精品 | 国产中文字幕在线视频 | 欧美成人精品欧美一级乱黄 | 999视频在线播放 | 国产亚洲成av人片在线观看桃 | 在线视频a | 日韩久久午夜一级啪啪 | 国产成人一区二区啪在线观看 | 超碰成人av | 日韩在线视频线视频免费网站 | 在线观看视频亚洲 | 欧美色综合天天久久综合精品 | 亚洲免费av一区二区 | 精品99免费 | 99久久精品免费视频 | 亚洲黄色小说网址 | 又黄又刺激的网站 | 一级黄色片在线播放 | 怡红院久久 | 久久99国产视频 | 在线久久| 亚洲精品mv在线观看 | 五月天久久久久久 | 亚洲片在线观看 | 日韩网站在线播放 | 天天干天天摸 | 中文字幕在线高清 | 日本久久久久久科技有限公司 | 国产探花 | www.av免费| 欧美亚洲一区二区在线 | 欧美日韩xx| 一本一道久久a久久综合蜜桃 | 伊人手机在线 | 天天综合色网 | 深爱激情五月综合 | 五月天色中色 | 日日干 天天干 | 国产精品乱码一区二区视频 | 亚洲永久精品一区 | 国产精品va在线观看入 | av免费网页 | 久久五月天婷婷 | 五月天最新网址 | 91麻豆文化传媒在线观看 | 久草电影免费在线观看 | 亚洲电影久久 | 免费网站看av片 | 日韩中文在线播放 | 精品免费在线视频 | 国产视频一区在线播放 | 18国产精品福利片久久婷 | 91亚洲精品久久久中文字幕 | 天堂av免费观看 | 激情视频91| 手机av在线不卡 | 超级碰碰视频 | 午夜精品视频一区二区三区在线看 | 天天做天天干 | 在线观看精品一区 | 中文字幕精品在线 | 亚洲人在线7777777精品 | 毛片随便看 | 九九热1| 99久久精品日本一区二区免费 | 97超碰总站 | 又爽又黄又无遮挡网站动态图 | 99在线免费视频观看 | 正在播放日韩 | 国产精品久久久精品 | 一区二区三区免费看 | 久久久久9999亚洲精品 | 久久成人免费视频 | 国产精品美女久久久久久 | 国产成人精品久 | 五月天网站在线 | 天天操天天曰 | 日韩精品一区二区免费视频 | 狠狠躁日日躁 | 国产 色| 在线观看视频日韩 | 久久狠狠亚洲综合 | www日| 欧美黄色特级片 | 久草视频国产 | 欧洲精品久久久久毛片完整版 | 久草视频精品 | 97国产超碰在线 | 国产精品一区二区三区四区在线观看 | 美女黄视频免费 | 国产成人在线观看免费 | 一二区精品 | www.啪啪.com | 国产在线国偷精品产拍免费yy | 99爱视频 | 天天操网址| 国产精品第二页 | 国产精品成人一区二区三区吃奶 | 国外成人在线视频网站 | 国内久久久久久 | 国产日韩精品在线观看 | 久久久精品久久 | 久久国产精品一区二区三区 | 国产精品岛国久久久久久久久红粉 | 青青色影院| 精品毛片一区二区免费看 | 亚洲精品国产精品乱码不99热 | 69av视频在线观看 | 中文字幕 第二区 | 黄色成人91 | 中文字幕精品www乱入免费视频 | 999超碰 | 天天干天天射天天爽 | 五月婷婷毛片 | 欧美日韩在线播放 | 国产99久久久久久免费看 | 在线看日韩 | 久久成人精品视频 | 夜色资源站国产www在线视频 | 中文字幕在线看视频国产 | 国产精国产精品 | 丁香五月亚洲综合在线 | 精品人人人 | 国产精品一二三 | 五月婷婷激情 | 久草免费福利在线观看 | 狠狠色狠狠色综合日日92 | 国产视频一区精品 | 亚洲精品在线免费 | 免费又黄又爽视频 | 国内精品久久久久久 | 国产精品99精品久久免费 | 午夜精品久久久久久久99无限制 | 四虎亚洲精品 | 久久99国产综合精品免费 | 在线视频a| 国产91免费在线 | 中文字幕a在线 | 日韩av电影国产 | 中文字幕在线播放av | 日韩一级片大全 | 日韩黄色在线观看 | 亚洲精品午夜久久久久久久 | 成片视频在线观看 | 97精品国产91久久久久久久 | 欧美精品乱码久久久久 | 国产中文伊人 | 狠狠色丁香婷婷综合 | 成人污视频在线观看 | 一区二区精品久久 | 国产专区精品 | 又黄又爽又湿又无遮挡的在线视频 | a视频免费在线观看 | 亚洲狠狠丁香婷婷综合久久久 | 亚洲电影影音先锋 | 麻豆视频一区二区 | 西西444www大胆高清图片 | 91精品久久久久久久91蜜桃 | 成人影音在线 | 亚洲天天综合 | 欧美一级网站 | 午夜精品三区 | 国产福利小视频在线 | 婷婷久久网站 | 黄色免费在线看 | 国产精品一区二区三区免费视频 | 综合久久影院 | 欧美一进一出抽搐大尺度视频 | 韩国在线视频一区 | 黄色大片网 | 五月激情天 | 成人午夜黄色 | 91av美女| 香蕉久草 | 男女激情免费网站 | 久久久久久久久久久免费视频 | 国产高h视频 | 区一区二区三在线观看 | 国产精品久久一区二区三区, | 成人黄色大片在线观看 | 在线免费视 | 国产成人久久77777精品 | 伊人成人久久 | 欧美肥妇free| 国产日韩在线看 | 丰满少妇麻豆av | 久久久影片 | 少妇bbb搡bbbb搡bbbb′ | 亚洲国产成人精品电影在线观看 | 在线小视频你懂的 | 精品一区二区免费在线观看 | av成人资源 | 成人av教育 | 久久狠狠一本精品综合网 | 国产精品亚洲人在线观看 | 精品久久精品 | 午夜男人影院 | av色影院| 亚洲精品18p | 天天操夜夜看 | 五月综合激情网 | 51精品国自产在线 | 岛国大片免费视频 | 午夜精品久久一牛影视 | 国产一区二区综合 | 国产成人精品在线播放 | 欧美精品在线观看 | 精品无人国产偷自产在线 | 丁香婷婷久久 | 午夜123| 中文字幕美女免费在线 | 一区二区三区四区五区在线 | 在线国产专区 | 美女福利视频一区二区 | 97免费视频在线 | av千婊在线免费观看 | 天天综合天天做 | 婷婷网站天天婷婷网站 | 欧美一级性| 超碰99人人 | 国产亚洲久一区二区 | 亚洲视频电影在线 | 久久久久久国产精品美女 | 亚洲成熟女人毛片在线 | 国产一区二区三区在线免费观看 | 亚洲一区二区三区毛片 | 特级毛片在线观看 | 二区三区在线视频 | 在线观看亚洲精品视频 | 日韩欧美网站 | 亚洲午夜精品一区二区三区电影院 | 人人爽人人干 | 在线探花| 婷婷色六月天 | 精品在线播放视频 | 伊人久久精品久久亚洲一区 | 99久久精品免费看国产免费软件 | 国产精品三级视频 | 91大神精品视频在线观看 | 欧美精品成人在线 | 欧洲精品二区 | 久久久三级视频 | 亚洲最新毛片 | 久久综合视频网 | 国产专区在线 | 亚洲免费一级电影 | 久久99国产精品视频 | 久久久久网址 | 久久免费国产视频 | 中文字幕传媒 | 色噜噜日韩精品欧美一区二区 | 九草在线视频 | 日韩av看片 | 日韩欧美精品一区二区三区经典 | 免费av视屏 | 中文字幕免费观看 | 91麻豆福利| 亚洲高清国产视频 | 欧美午夜性生活 | 国产视频日韩视频欧美视频 | 天天操天天操天天干 | 国产福利91精品一区二区三区 | 中文字幕在线观看网址 | 国产精品日韩欧美 | 99久久日韩精品免费热麻豆美女 | 一区二区三区在线不卡 | 中文永久免费观看 | 欧美日本中文字幕 | 国产精品久久久久久久久费观看 | 国产精品一区二区三区在线看 | 中文av字幕在线观看 | 成人在线视频你懂的 | 国产成人精品一区二区在线观看 | 日韩欧美xx| 97人人澡人人添人人爽超碰 | 天天草天天 | 欧美成人按摩 | 亚洲精品资源在线 | 久久综合九色综合97婷婷女人 | 97国产情侣爱久久免费观看 | 国产成人一区二区三区 | 国产美女视频黄a视频免费 久久综合九色欧美综合狠狠 | 九九久| 97在线观看免费高清完整版在线观看 | 久久激情日本aⅴ | 久久成人免费电影 | 国产中文字幕国产 | av千婊在线免费观看 | 国产精品大尺度 | 欧美性生爱| 三级在线视频观看 | av不卡中文| 免费下载高清毛片 | 日韩国产精品毛片 | 国产成人精品亚洲 | 五月天久久综合 | 久久精品一二三区 | 91一区一区三区 | 亚洲人视频在线 | 久久久五月天 | 韩国一区二区三区视频 | 日韩美女一级片 | 在线免费中文字幕 | 久草在线免费看视频 | 欧美亚洲成人免费 | 亚洲成人精品国产 | 91爱爱电影 | 精品欧美日韩 | 日本亚洲国产 | 制服丝袜一区二区 | 久久9999久久免费精品国产 | 免费看黄视频 | 亚洲精品激情 | www.久久91 | 欧美日韩视频免费 | 国产精品成人久久久 | 成年人在线观看免费视频 | 天天色天天射天天综合网 | 国产成人免费av电影 | 日韩激情视频在线观看 | 91视频麻豆 | 黄色在线观看免费网站 | 蜜臀av性久久久久av蜜臀三区 | 国产精品99蜜臀久久不卡二区 | 蜜桃视频在线视频 | 国产精品久久片 | 综合精品久久 | 日韩com | 欧美另类高清 | 欧美成a人片在线观看久 | 伊人午夜 | 在线观看免费中文字幕 | 成人av.com | 黄色av三级在线 | 亚洲精品永久免费视频 | 亚洲午夜精品一区二区三区电影院 | 国产精品久久久影视 | 欧美一级久久 | 婷婷播播网 | 51久久成人国产精品麻豆 | 最近中文字幕完整视频高清1 | av中文字幕网站 | 99久久免费看 | 免费视频久久 | 国产小视频网站 | 国产婷婷精品av在线 | 97色se | www.伊人网 | 色综合久久综合网 | 亚欧洲精品视频在线观看 | 在线中文字幕播放 | 五月天亚洲激情 | 久久99精品久久久久久 | 免费观看的av网站 |