久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術(shù)文章
文章詳情頁

我用Python做個AI出牌器斗地主把把贏

瀏覽:62日期:2022-08-06 17:24:00
目錄前言一、核心功能設(shè)計UI設(shè)計排版布局手牌和出牌數(shù)據(jù)識別AI出牌方案輸出二、實現(xiàn)步驟1. UI設(shè)計排版布局2. 手牌和出牌數(shù)據(jù)識別3. AI出牌方案輸出三、出牌器用法1. 環(huán)境配置2. 坐標(biāo)調(diào)整確認3. 運行測試前言

最近在網(wǎng)上看到一個有意思的開源項目,基于快手團隊開發(fā)的開源AI斗地主——DouZero做的一個“成熟”的AI,項目開源地址【https://github.com/tianqiraf/DouZero_For_HappyDouDiZhu – tianqiraf】。

今天我們就一起來學(xué)習(xí)下是如何制作一個基于DouZero的出牌器,看看AI是如何來幫助斗地主的!

一、核心功能設(shè)計

首先這款出牌器是基于DouZero開發(fā)的,核心是需要利用訓(xùn)練好的AI模型來幫住我們,給出最優(yōu)出牌方案。

其次關(guān)于出牌器,先要需要確認一個AI出牌角色,代表我們玩家自己。我們只要給這個AI輸入玩家手牌和三張底牌。確認好地主和農(nóng)民的各個角色,告訴它三個人對應(yīng)的關(guān)系,這樣就可以確定隊友和對手。

我們還要將每一輪其他兩人的出牌輸入,這樣出牌器就可以根據(jù)出牌數(shù)據(jù),及時提供給我們最優(yōu)出牌決策,帶領(lǐng)我們?nèi)〉脛倮?/p>

那么如何獲取三者之間的關(guān)系呢?誰是地主?誰是農(nóng)民?是自己一人作戰(zhàn)還是農(nóng)民合作?自己玩家的手牌是什么?三張底牌是什么?這些也都需要在開局后確認好。

大致可以整理出要實現(xiàn)的核心功能如下:

UI設(shè)計排版布局 顯示三張底牌 顯示AI角色出牌數(shù)據(jù)區(qū)域,上家出牌數(shù)據(jù)區(qū)域,下家出牌數(shù)據(jù)區(qū)域,本局勝率區(qū)域 AI玩家手牌區(qū)域 AI出牌器開始停止手牌和出牌數(shù)據(jù)識別 游戲剛開始根據(jù)屏幕位置,截圖識別AI玩家手牌及三張底牌 確認三者之間的關(guān)系,識別地主和農(nóng)民角色,確認隊友及對手關(guān)系 識別每輪三位玩家依次出了什么牌,刷新顯示對應(yīng)區(qū)域AI出牌方案輸出 加載訓(xùn)練好的AI模型,初始化游戲環(huán)境 每輪出牌判斷,根據(jù)上家出牌數(shù)據(jù)給出最優(yōu)出牌決策 自動刷新玩家剩余手牌和本局勝率預(yù)測二、實現(xiàn)步驟1. UI設(shè)計排版布局

根據(jù)上述功能,首先考慮進行簡單的UI布局設(shè)計,使用的是pyqt5。核心設(shè)計代碼如下:

def setupUi(self, Form): Form.setObjectName('Form') Form.resize(440, 395) font = QtGui.QFont() font.setFamily('Arial') font.setPointSize(9) font.setBold(True) font.setItalic(False) font.setWeight(75) Form.setFont(font) self.WinRate = QtWidgets.QLabel(Form) self.WinRate.setGeometry(QtCore.QRect(240, 180, 171, 61)) font = QtGui.QFont() font.setPointSize(14) self.WinRate.setFont(font) self.WinRate.setAlignment(QtCore.Qt.AlignCenter) self.WinRate.setObjectName('WinRate') self.InitCard = QtWidgets.QPushButton(Form) self.InitCard.setGeometry(QtCore.QRect(60, 330, 121, 41)) font = QtGui.QFont() font.setFamily('Arial') font.setPointSize(14) font.setBold(True) font.setWeight(75) self.InitCard.setFont(font) self.InitCard.setStyleSheet('') self.InitCard.setObjectName('InitCard') self.UserHandCards = QtWidgets.QLabel(Form) self.UserHandCards.setGeometry(QtCore.QRect(10, 260, 421, 41)) font = QtGui.QFont() font.setPointSize(14) self.UserHandCards.setFont(font) self.UserHandCards.setAlignment(QtCore.Qt.AlignCenter) self.UserHandCards.setObjectName('UserHandCards') self.LPlayer = QtWidgets.QFrame(Form) self.LPlayer.setGeometry(QtCore.QRect(10, 80, 201, 61)) self.LPlayer.setFrameShape(QtWidgets.QFrame.StyledPanel) self.LPlayer.setFrameShadow(QtWidgets.QFrame.Raised) self.LPlayer.setObjectName('LPlayer') self.LPlayedCard = QtWidgets.QLabel(self.LPlayer) self.LPlayedCard.setGeometry(QtCore.QRect(0, 0, 201, 61)) font = QtGui.QFont() font.setPointSize(14) self.LPlayedCard.setFont(font) self.LPlayedCard.setAlignment(QtCore.Qt.AlignCenter) self.LPlayedCard.setObjectName('LPlayedCard') self.RPlayer = QtWidgets.QFrame(Form) self.RPlayer.setGeometry(QtCore.QRect(230, 80, 201, 61)) font = QtGui.QFont() font.setPointSize(16) self.RPlayer.setFont(font) self.RPlayer.setFrameShape(QtWidgets.QFrame.StyledPanel) self.RPlayer.setFrameShadow(QtWidgets.QFrame.Raised) self.RPlayer.setObjectName('RPlayer') self.RPlayedCard = QtWidgets.QLabel(self.RPlayer) self.RPlayedCard.setGeometry(QtCore.QRect(0, 0, 201, 61)) font = QtGui.QFont() font.setPointSize(14) self.RPlayedCard.setFont(font) self.RPlayedCard.setAlignment(QtCore.Qt.AlignCenter) self.RPlayedCard.setObjectName('RPlayedCard') self.Player = QtWidgets.QFrame(Form) self.Player.setGeometry(QtCore.QRect(40, 180, 171, 61)) self.Player.setFrameShape(QtWidgets.QFrame.StyledPanel) self.Player.setFrameShadow(QtWidgets.QFrame.Raised) self.Player.setObjectName('Player') self.PredictedCard = QtWidgets.QLabel(self.Player) self.PredictedCard.setGeometry(QtCore.QRect(0, 0, 171, 61)) font = QtGui.QFont() font.setPointSize(14) self.PredictedCard.setFont(font) self.PredictedCard.setAlignment(QtCore.Qt.AlignCenter) self.PredictedCard.setObjectName('PredictedCard') self.ThreeLandlordCards = QtWidgets.QLabel(Form) self.ThreeLandlordCards.setGeometry(QtCore.QRect(140, 10, 161, 41)) font = QtGui.QFont() font.setPointSize(16) self.ThreeLandlordCards.setFont(font) self.ThreeLandlordCards.setAlignment(QtCore.Qt.AlignCenter) self.ThreeLandlordCards.setObjectName('ThreeLandlordCards') self.Stop = QtWidgets.QPushButton(Form) self.Stop.setGeometry(QtCore.QRect(260, 330, 111, 41)) font = QtGui.QFont() font.setFamily('Arial') font.setPointSize(14) font.setBold(True) font.setWeight(75) self.Stop.setFont(font) self.Stop.setStyleSheet('') self.Stop.setObjectName('Stop') self.retranslateUi(Form) self.InitCard.clicked.connect(Form.init_cards) self.Stop.clicked.connect(Form.stop) QtCore.QMetaObject.connectSlotsByName(Form)def retranslateUi(self, Form): _translate = QtCore.QCoreApplication.translate Form.setWindowTitle(_translate('Form', 'AI歡樂斗地主--Dragon少年')) self.WinRate.setText(_translate('Form', '勝率:--%')) self.InitCard.setText(_translate('Form', '開始')) self.UserHandCards.setText(_translate('Form', '手牌')) self.LPlayedCard.setText(_translate('Form', '上家出牌區(qū)域')) self.RPlayedCard.setText(_translate('Form', '下家出牌區(qū)域')) self.PredictedCard.setText(_translate('Form', 'AI出牌區(qū)域')) self.ThreeLandlordCards.setText(_translate('Form', '三張底牌')) self.Stop.setText(_translate('Form', '停止'))2. 手牌和出牌數(shù)據(jù)識別

接下來需要所有撲克牌的模板圖片與游戲屏幕特定區(qū)域的截圖進行對比,這樣才能獲取AI玩家手牌、底牌、每一輪出牌、三者關(guān)系(地主、地主上家、地主下家)。

識別AI玩家手牌及三張底牌:

我們可以截取游戲屏幕,根據(jù)固定位置來識別當(dāng)前AI玩家的手牌和三張底牌。核心代碼如下:

# 牌檢測結(jié)果濾波def cards_filter(self, location, distance): if len(location) == 0:return 0 locList = [location[0][0]] count = 1 for e in location:flag = 1 # “是新的”標(biāo)志for have in locList: if abs(e[0] - have) <= distance:flag = 0breakif flag: count += 1 locList.append(e[0]) return count# 獲取玩家AI手牌def find_my_cards(self, pos): user_hand_cards_real = '' img = pyautogui.screenshot(region=pos) for card in AllCards:result = pyautogui.locateAll(needleImage=’pics/m’ + card + ’.png’, haystackImage=img, confidence=self.MyConfidence)user_hand_cards_real += card[1] * self.cards_filter(list(result), self.MyFilter) return user_hand_cards_real# 獲取地主三張底牌def find_three_landlord_cards(self, pos): three_landlord_cards_real = '' img = pyautogui.screenshot(region=pos) img = img.resize((349, 168)) for card in AllCards:result = pyautogui.locateAll(needleImage=’pics/o’ + card + ’.png’, haystackImage=img, confidence=self.ThreeLandlordCardsConfidence)three_landlord_cards_real += card[1] * self.cards_filter(list(result), self.OtherFilter) return three_landlord_cards_real

效果如下所示:

我用Python做個AI出牌器斗地主把把贏

地主、地主上家、地主下家:

同理我們可以根據(jù)游戲屏幕截圖,識別地主的圖標(biāo),確認地主角色。核心代碼如下:

# 查找地主角色def find_landlord(self, landlord_flag_pos): for pos in landlord_flag_pos:result = pyautogui.locateOnScreen(’pics/landlord_words.png’, region=pos, confidence=self.LandlordFlagConfidence)if result is not None: return landlord_flag_pos.index(pos) return None

這樣我們就可以得到玩家AI手牌,其他玩家手牌(預(yù)測),地主三張底牌,三者角色關(guān)系,出牌順序。核心代碼如下:

# 坐標(biāo)self.MyHandCardsPos = (414, 804, 1041, 59) # AI玩家截圖區(qū)域self.LPlayedCardsPos = (530, 470, 380, 160) # 左側(cè)玩家截圖區(qū)域self.RPlayedCardsPos = (1010, 470, 380, 160) # 右側(cè)玩家截圖區(qū)域self.LandlordFlagPos = [(1320, 300, 110, 140), (320, 720, 110, 140), (500, 300, 110, 140)] # 地主標(biāo)志截圖區(qū)域(右-我-左)self.ThreeLandlordCardsPos = (817, 36, 287, 136) # 地主底牌截圖區(qū)域,resize成349x168def init_cards(self): # 玩家手牌 self.user_hand_cards_real = '' self.user_hand_cards_env = [] # 其他玩家出牌 self.other_played_cards_real = '' self.other_played_cards_env = [] # 其他玩家手牌(整副牌減去玩家手牌,后續(xù)再減掉歷史出牌) self.other_hand_cards = [] # 三張底牌 self.three_landlord_cards_real = '' self.three_landlord_cards_env = [] # 玩家角色代碼:0-地主上家, 1-地主, 2-地主下家 self.user_position_code = None self.user_position = '' # 開局時三個玩家的手牌 self.card_play_data_list = {} # 出牌順序:0-玩家出牌, 1-玩家下家出牌, 2-玩家上家出牌 self.play_order = 0 self.env = None # 識別玩家手牌 self.user_hand_cards_real = self.find_my_cards(self.MyHandCardsPos) self.UserHandCards.setText(self.user_hand_cards_real) self.user_hand_cards_env = [RealCard2EnvCard[c] for c in list(self.user_hand_cards_real)] # 識別三張底牌 self.three_landlord_cards_real = self.find_three_landlord_cards(self.ThreeLandlordCardsPos) self.ThreeLandlordCards.setText('底牌:' + self.three_landlord_cards_real) self.three_landlord_cards_env = [RealCard2EnvCard[c] for c in list(self.three_landlord_cards_real)] # 識別玩家的角色 self.user_position_code = self.find_landlord(self.LandlordFlagPos) if self.user_position_code is None:items = ('地主上家', '地主', '地主下家')item, okPressed = QInputDialog.getItem(self, '選擇角色', '未識別到地主,請手動選擇角色:', items, 0, False)if okPressed and item: self.user_position_code = items.index(item)else: return self.user_position = [’landlord_up’, ’landlord’, ’landlord_down’][self.user_position_code] for player in self.Players:player.setStyleSheet(’background-color: rgba(255, 0, 0, 0);’) self.Players[self.user_position_code].setStyleSheet(’background-color: rgba(255, 0, 0, 0.1);’) # 整副牌減去玩家手上的牌,就是其他人的手牌,再分配給另外兩個角色(如何分配對AI判斷沒有影響) for i in set(AllEnvCard):self.other_hand_cards.extend([i] * (AllEnvCard.count(i) - self.user_hand_cards_env.count(i))) self.card_play_data_list.update({’three_landlord_cards’: self.three_landlord_cards_env,[’landlord_up’, ’landlord’, ’landlord_down’][(self.user_position_code + 0) % 3]: self.user_hand_cards_env,[’landlord_up’, ’landlord’, ’landlord_down’][(self.user_position_code + 1) % 3]: self.other_hand_cards[0:17] if (self.user_position_code + 1) % 3 != 1 else self.other_hand_cards[17:],[’landlord_up’, ’landlord’, ’landlord_down’][(self.user_position_code + 2) % 3]: self.other_hand_cards[0:17] if (self.user_position_code + 1) % 3 == 1 else self.other_hand_cards[17:] }) print(self.card_play_data_list) # 生成手牌結(jié)束,校驗手牌數(shù)量 if len(self.card_play_data_list['three_landlord_cards']) != 3:QMessageBox.critical(self, '底牌識別出錯', '底牌必須是3張!', QMessageBox.Yes, QMessageBox.Yes)self.init_display()return if len(self.card_play_data_list['landlord_up']) != 17 or len(self.card_play_data_list['landlord_down']) != 17 or len(self.card_play_data_list['landlord']) != 20:QMessageBox.critical(self, '手牌識別出錯', '初始手牌數(shù)目有誤', QMessageBox.Yes, QMessageBox.Yes)self.init_display()return # 得到出牌順序 self.play_order = 0 if self.user_position == 'landlord' else 1 if self.user_position == 'landlord_up' else 2

效果如下:

我用Python做個AI出牌器斗地主把把贏

3. AI出牌方案輸出

下面我們就需要用到DouZero開源的AI斗地主了。DouZero項目地址:https://github.com/kwai/DouZero。我們需要將該開源項目下載并導(dǎo)入項目中。

創(chuàng)建一個AI玩家角色,初始化游戲環(huán)境,加載模型,進行每輪的出牌判斷,控制一局游戲流程的進行和結(jié)束。核心代碼如下:

# 創(chuàng)建一個代表玩家的AIai_players = [0, 0]ai_players[0] = self.user_positionai_players[1] = DeepAgent(self.user_position, self.card_play_model_path_dict[self.user_position])# 初始化游戲環(huán)境self.env = GameEnv(ai_players)# 游戲開始self.start()def start(self): self.env.card_play_init(self.card_play_data_list) print('開始出牌n') while not self.env.game_over:# 玩家出牌時就通過智能體獲取action,否則通過識別獲取其他玩家出牌if self.play_order == 0: self.PredictedCard.setText('...') action_message = self.env.step(self.user_position) # 更新界面 self.UserHandCards.setText('手牌:' + str(’’.join([EnvCard2RealCard[c] for c in self.env.info_sets[self.user_position].player_hand_cards]))[::-1]) self.PredictedCard.setText(action_message['action'] if action_message['action'] else '不出') self.WinRate.setText('勝率:' + action_message['win_rate']) print('n手牌:', str(’’.join( [EnvCard2RealCard[c] for c in self.env.info_sets[self.user_position].player_hand_cards]))) print('出牌:', action_message['action'] if action_message['action'] else '不出', ', 勝率:', action_message['win_rate']) while self.have_white(self.RPlayedCardsPos) == 1 or pyautogui.locateOnScreen(’pics/pass.png’, region=self.RPlayedCardsPos, confidence=self.LandlordFlagConfidence):print('等待玩家出牌')self.counter.restart()while self.counter.elapsed() < 100: QtWidgets.QApplication.processEvents(QEventLoop.AllEvents, 50) self.play_order = 1elif self.play_order == 1: self.RPlayedCard.setText('...') pass_flag = None while self.have_white(self.RPlayedCardsPos) == 0 and not pyautogui.locateOnScreen(’pics/pass.png’, region=self.RPlayedCardsPos, confidence=self.LandlordFlagConfidence):print('等待下家出牌')self.counter.restart()while self.counter.elapsed() < 500: QtWidgets.QApplication.processEvents(QEventLoop.AllEvents, 50) self.counter.restart() while self.counter.elapsed() < 500:QtWidgets.QApplication.processEvents(QEventLoop.AllEvents, 50) # 不出 pass_flag = pyautogui.locateOnScreen(’pics/pass.png’, region=self.RPlayedCardsPos, confidence=self.LandlordFlagConfidence) # 未找到'不出' if pass_flag is None:# 識別下家出牌self.other_played_cards_real = self.find_other_cards(self.RPlayedCardsPos) # 找到'不出' else:self.other_played_cards_real = '' print('n下家出牌:', self.other_played_cards_real) self.other_played_cards_env = [RealCard2EnvCard[c] for c in list(self.other_played_cards_real)] self.env.step(self.user_position, self.other_played_cards_env) # 更新界面 self.RPlayedCard.setText(self.other_played_cards_real if self.other_played_cards_real else '不出') self.play_order = 2elif self.play_order == 2: self.LPlayedCard.setText('...') while self.have_white(self.LPlayedCardsPos) == 0 and not pyautogui.locateOnScreen(’pics/pass.png’,region=self.LPlayedCardsPos,confidence=self.LandlordFlagConfidence):print('等待上家出牌')self.counter.restart()while self.counter.elapsed() < 500: QtWidgets.QApplication.processEvents(QEventLoop.AllEvents, 50) self.counter.restart() while self.counter.elapsed() < 500:QtWidgets.QApplication.processEvents(QEventLoop.AllEvents, 50) # 不出 pass_flag = pyautogui.locateOnScreen(’pics/pass.png’, region=self.LPlayedCardsPos, confidence=self.LandlordFlagConfidence) # 未找到'不出' if pass_flag is None:# 識別上家出牌self.other_played_cards_real = self.find_other_cards(self.LPlayedCardsPos) # 找到'不出' else:self.other_played_cards_real = '' print('n上家出牌:', self.other_played_cards_real) self.other_played_cards_env = [RealCard2EnvCard[c] for c in list(self.other_played_cards_real)] self.env.step(self.user_position, self.other_played_cards_env) self.play_order = 0 # 更新界面 self.LPlayedCard.setText(self.other_played_cards_real if self.other_played_cards_real else '不出')else: passself.counter.restart()while self.counter.elapsed() < 100: QtWidgets.QApplication.processEvents(QEventLoop.AllEvents, 50) print('{}勝,本局結(jié)束!n'.format('農(nóng)民' if self.env.winner == 'farmer' else '地主')) QMessageBox.information(self, '本局結(jié)束', '{}勝!'.format('農(nóng)民' if self.env.winner == 'farmer' else '地主'), QMessageBox.Yes, QMessageBox.Yes) self.env.reset() self.init_display()

到這里,整個AI斗地主出牌流程基本已經(jīng)完成了。

我用Python做個AI出牌器斗地主把把贏

三、出牌器用法

按照上述過程,這款A(yù)I出牌器已經(jīng)制作完成了。后面應(yīng)該如何使用呢?如果不想研究源碼,只想使用這款A(yù)I斗地主出牌器,驗證下效果,該怎么配置環(huán)境運行這個AI出牌器呢?下面就開始介紹。

1. 環(huán)境配置

首先我們需要安裝這些第三方庫,配置相關(guān)環(huán)境,如下所示:

torch==1.9.0GitPython==3.0.5gitdb2==2.0.6PyAutoGUI==0.9.50PyQt5==5.13.0PyQt5-sip==12.8.1Pillow>=5.2.0opencv-pythonrlcard2. 坐標(biāo)調(diào)整確認

我們可以打開游戲界面,將游戲窗口模式下最大化運行,把AI出牌器程序窗口需要移至右下角,不能遮擋手牌、地主標(biāo)志、底牌、歷史出牌這些關(guān)鍵位置。

其次我們要確認屏幕截圖獲取的各個區(qū)域是否正確。如果有問題需要進行區(qū)域位置坐標(biāo)調(diào)整。

# 坐標(biāo)self.MyHandCardsPos = (414, 804, 1041, 59) # 我的截圖區(qū)域self.LPlayedCardsPos = (530, 470, 380, 160) # 左邊截圖區(qū)域self.RPlayedCardsPos = (1010, 470, 380, 160) # 右邊截圖區(qū)域self.LandlordFlagPos = [(1320, 300, 110, 140), (320, 720, 110, 140), (500, 300, 110, 140)] # 地主標(biāo)志截圖區(qū)域(右-我-左)self.ThreeLandlordCardsPos = (817, 36, 287, 136) # 地主底牌截圖區(qū)域,resize成349x168

我用Python做個AI出牌器斗地主把把贏

3. 運行測試

當(dāng)所有環(huán)境配置完成,各區(qū)域坐標(biāo)位置確認無誤之后,下面我們就可以直接運行程序,測試效果啦~

首先我們運行AI出牌器程序,打開游戲界面,進入游戲。當(dāng)玩家就位,手牌分發(fā)完畢,地主身份確認之后,我們就可以點擊畫面中開始按鈕,讓AI來幫助我們斗地主了。

基于這個DouZero項目做一個“成熟”的AI,項目開源地址【https://github.com/tianqiraf/DouZero_For_HappyDouDiZhu – tianqiraf】。

今天我們就到這里,明天繼續(xù)努力!

我用Python做個AI出牌器斗地主把把贏

如果本篇博客有任何錯誤,請批評指教,不勝感激 !

到此這篇關(guān)于我用Python做個AI出牌器斗地主把把贏的文章就介紹到這了,更多相關(guān)Python自動出牌器內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 日本a视频| 一区二区久久久 | 最新国产在线 | 日本在线观看视频一区 | 国产探花在线精品一区二区 | 99热最新网站 | 99这里只有精品 | 成人免费淫片aa视频免费 | 97久久超碰 | 在线看片成人 | av在线一区二区三区 | 涩涩视频网站在线观看 | 国产精品久久久久一区二区三区 | 欧美成人免费一级人片100 | av综合在线观看 | 亚洲一区二区三区久久久 | 精品日韩欧美一区二区三区 | 亚洲欧美一区二区三区四区 | 久久爱综合 | 午夜激情视频在线观看 | 亚洲日韩中文字幕 | 亚洲第一区在线 | 精品国产乱码久久久久久蜜臀 | 免费黄在线观看 | 国产在视频一区二区三区吞精 | 国产自产才c区 | 欧美色视频在线观看 | 国产激情在线 | 免费一区二区 | 亚洲一区二区三区免费在线观看 | 国产精品对白一区二区三区 | 国产99久久精品一区二区永久免费 | 国产淫片在线观看 | 国产一区在线看 | 伊人亚洲| 毛片天堂 | 成人精品一区 | 丁香六月av | 亚洲午夜av| 国产一区二区在线观看视频 | av在线网址观看 | 亚洲欧美一区二区三区在线 | 五月激情六月婷婷 | 国产精品久久久久久久 | 一区二区视频 | 亚洲综合在线一区 | 久久精品视 | 韩国精品一区二区 | 国产真实精品久久二三区 | 国产片淫级awww | 91精品综合久久久久久五月天 | 日韩中文字幕无码一区二区三区 | 欧美一级特黄aaaaaaa在线观看 | 午夜成人免费视频 | 天天干 夜夜操 | 日韩在线播放一区 | 久久久久久亚洲国产 | 国产精品美女久久久久aⅴ国产馆 | 中文字幕精品视频在线观看 | 国产精品久久久久久 | 美女视频一区二区三区 | 久久综合成人精品亚洲另类欧美 | 日韩精品一区二区三区在线观看 | 99久久精品一区二区成人 | 久久久成人av | 91精品中文字幕一区二区三区 | 午夜国产在线 | 成人亚洲区 | 一区二区三区免费 | 国产中文一区 | 午夜精品久久久久久久星辰影院 | 国产精品久久久久久吹潮 | 成人免费视频观看 | 日韩毛片免费在线观看 | 亚洲不卡视频在线观看 | 欧美成人h版在线观看 | 日一日干一干 | 一级一片在线观看 | 成人精品免费视频 | 午夜久久网站 | 亚洲精品久久久久午夜 | 免费看的毛片 | 96久久久久久 | 亚洲视频在线观看 | 国产电影一区二区在线观看 | 在线欧美| 日本精品网站 | 91av在线免费看 | 视频一区二区国产 | 日本一区二区精品 | 亚洲国产一区二区在线观看 | www午夜| 日韩一二三区 | 美女黄网| 一区二区免费 | 99精品国产在热久久 | 狠狠爱天天干 | 国产精品美女视频免费观看软件 | 91免费在线视频 | 久草精品在线观看 | 伦理午夜电影免费观看 | 亚洲一区二区三区在线播放 | 久久精品亚洲精品国产欧美 | 亚洲精品视频播放 | 韩日一区 | 精品日韩欧美一区二区三区在线播放 | 日韩一区免费观看 | 亚洲国产午夜视频 | 一本大道综合伊人精品热热 | 91伊人 | 一区二区在线视频 | 2019天天操 | 国产ts视频 | 欧美伦理一区二区三区 | 四虎影院在线免费播放 | 国产精品不卡 | 国产超碰人人爽人人做人人爱 | 免费av在线 | 99精品国产一区二区 | 欧美激情五月 | 国产黄色在线观看 | 精品国产欧美一区二区 | 国产男人的天堂 | 91精品一区二区三区久久久久久 | 99国产精品视频免费观看一公开 | 婷婷久久综合 | 色成人免费网站 | 日韩中文字幕免费观看 | 色婷婷国产精品综合在线观看 | 国产精品美女久久久久久久久久久 | 亚洲精品福利在线观看 | 久久久久久久av | 日本精品视频在线观看 | 亚洲精品一区二区三区蜜桃久 | 久久久久久久久久久免费视频 | 神马香蕉久久 | 另类免费视频 | 天天澡天天狠天天天做 | 欧美不卡一区二区三区 | 欧美成视频 | 电家庭影院午夜 | 亚洲黄色成人 | 欧美精品一区三区 | 你懂的免费在线观看 | 精品国产不卡一区二区三区 | 午夜视频网址 | 亚洲精品久久久久久一区二区 | 中文字幕亚洲欧美日韩在线不卡 | 日韩欧美网| 欧美日本国产 | av2014天堂网| 91se在线 | 国产精品免费观看 | 亚洲精品一区二区另类图片 | 香蕉av777xxx色综合一区 | 国产a久久精品一区二区三区 | 精品在线一区二区 | 国产精品一区二区三区免费 | 欧美 日韩 中文字幕 | 日韩在线播放一区二区 | 国产在线91 | 欧美一区二区三区在线视频观看 | 美女视频一区 | 国外成人在线视频 | 中文字幕第66页 | 九九热在线观看 | 99re在线播放视频 | 成人高清视频在线观看 | 嫩草私人影院 | 日韩精品一区二区三区四区五区 | 日本一区二区精品视频 | 成人影院在线 | 日本一区二区三区视频免费看 | 干干人人 | 国产免费拔擦拔擦8x高清在线人 | 91亚洲国产成人久久精品网站 | 欧美日韩三区 | 亚洲精品一区二三区不卡 | 99精品国产高清在线观看 | 午夜免费视频 | 成人在线观 | 天堂精品久久 | 欧美日韩国产精品 | 毛片一区二区三区 | 在线第一页 | 日韩视频精品在线 | 欧美一级特黄aaaaaa大片在线观看 | 亚洲一区二区三区在线 | 日本中文字幕一区 | 日韩精品99 | av在线网址观看 | 日韩欧美三级 | 麻豆久久| 精品国产一区在线 | 亚洲国产一区二区三区四区 | 日本一级淫片免费看 | 午夜精品一区二区三区在线视频 | 精品久久网 | 男人的天堂在线视频 | 国产日韩精品视频 | 久久伊人av | 国产一区二精品区在线 | 人人鲁人人莫一区二区三区 | 亚洲国产精品网站 | 一区二区三区四区精品 | 成人一区二区三区在线观看 | 欧美不卡| 久久久蜜臀 | 成人在线精品视频 | 最新中文字幕在线 | 亚洲精品乱码久久久久久蜜桃 | 日本黄a三级三级三级 | 免费的污网站 | 欧美高清国产 | 久久综合一区二区 | www.福利视频| 人人射av| 夜夜爆操| 日韩精品在线免费 | 亚洲久久在线 | 精品亚洲国产成av人片传媒 | 国产精品毛片一区视频播 | 日韩一级 | 99热热热 | 精品人伦一区二区三区蜜桃视频 | 在线观看国精产品二区1819 | 亚洲精选国产 | 亚洲巨乳自拍在线视频 | 久久久激情视频 | 免费日韩精品 | 国产精品亚洲综合 | 国产成人免费视频网站视频社区 | 免费观看成人毛片 | 国产精品一品二区三区的使用体验 | 国产精品久久国产愉拍 | 九九99久久 | 在线日韩中文字幕 | 国产精品毛片一区视频播 | 超碰香蕉| 欧美日韩精品一区二区在线播放 | 亚洲精品视频一区 | 精品网站999www | 日韩精品1区2区3区 成人黄页在线观看 | 久久夫妻网 | 亚洲一区不卡 | 国产欧美在线观看 | 奇米影| 免费观看一级淫片 | 日韩av一区二区在线观看 | 欧美成人一区二区三区 | 免费毛片网 | 国产日韩欧美在线 | 亚洲网站视频 | 国产欧美精品一区二区三区 | 欧美一级日韩片 | 国产剧情一区二区三区 | 免费av片网站 | 中文字幕在线免费观看 | 日本不卡一区二区三区在线观看 | 久草视频在线播放 | www.中文字幕 | 国产成人免费视频网站视频社区 | 日本精品在线播放 | 欧美精品成人一区二区三区四区 | 免费v片 | 久热热热 | 香蕉综合久久 | 二区久久 | 久久国产精品视频 | 国产精品久久久久久久久久久新郎 | 综合久久综合久久 | 精品中文字幕在线观看 | 狠狠色综合欧美激情 | 国产精品色婷婷久久58 | 精品av | 精品久久久久久亚洲综合网 | 黄的视频网站 | 精品久久一区 | 国产精品视频免费 | 国产精品久久久久永久免费观看 | 欧美一区二区三区成人 | 国产一级在线观看 | 国产一区二区免费电影 | 九一精品 | 久久久久黄 | 91一区| 亚洲资源站| 国产精品久久久久久久久免费 | 成人h动漫免费观看网站 | 亚洲精品国产成人 | 国产精品久久在线观看 | 国产精品视频导航 | 国产美女久久久 | 午夜妇女aaaa区片 | 美女视频黄色免费 | 一区二区不卡视频在线观看 | 国产精品精品 | 国产精品一区二区精品 | 免费av观看 | 亚洲视频免费网站 | 中文字幕亚洲精品 | 午夜影剧院 | 色噜噜色综合 | 国产91精品在线 | av一区二区在线播放 | 黄色一级片在线观看 | 国产成人免费在线 | 国产精品久久久久久亚洲调教 | 久久久日本| 日操 | 在线观看亚洲精品 | 欧美在线观看视频 | 日日鲁鲁 | 国产日韩精品久久 | 91在线影院 | 亚洲国产精品成人 | 国产精品乱码一区二区三区 | 精品日韩一区二区三区 | 久久亚洲视频 | 无毒黄网 | 日本人做爰大片免费观看一老师 | 久久久精品一区二区三区 | 波多野结衣一区二区三区中文字幕 | 91在线最新 | 欧美性猛交一区二区三区精品 | 91麻豆精品国产91久久久久久 | 久草电影网 | 国产妇女乱码一区二区三区 | 美女毛片 | 欧美在线视频一区 | 免费黄色小视频 | 亚洲aⅴ | 91视频免费观看 | 噜噜噜噜噜在线视频 | jlzzjlzz国产精品久久 | 国产免费黄色大片 | 成人一区二区三区久久精品嫩草 | 欧美另类专区 | 欧美极品视频 | 久操伊人| 欧美精品在线视频 | 亚洲欧美91 | 91精品国产92| 亚洲免费视频一区二区 | 国产传媒一区 | 日韩有码一区 | 日本久久精品视频 | 性视频网站免费 | 三级视频在线 | 国产精品二区一区二区aⅴ污介绍 | 欧美日韩专区 | 国产三级在线 | 一级片av | 日本黄色片免费 | 中文字幕爱爱视频 | 国产精品一区亚洲二区日本三区 | 欧美精品在线视频 | 日韩精品在线播放 | 手机在线不卡av | 久久婷婷麻豆国产91天堂 | 欧美淫视频 | 日本在线观看视频网站 | 久久二区三区 | 黑人一区| 成人h动漫在线看 | 亚洲精品在线免费观看视频 | 男女网站在线观看 | 中文字幕久久精品 | 日韩在线视频免费 | 91社区在线高清 | 91精品久久久久久久久中文字幕 | 国产午夜精品久久久久久久 | 精品久久一二三区 | www久| 欧美精品一二三区 | 成人一级电影在线观看 | 俺要去97中文字幕 | 国产www视频| 国产成人免费视频网站高清观看视频 | 日本三级在线观看网站 | 无毒黄网| 8x国产精品视频一区二区 | 久久成| 国产精品一卡二卡 | 国产精品视频一区二区免费不卡 | 日本亚洲欧美 | 欧美国产日韩一区 | 在线观看国产一区 | 一区二区中文 | 国产偷国产偷精品高清尤物 | 亚洲一区二区国产 | 羞视频在线观看 | 天天精品 | 婷婷综合 | 日韩中文字幕a | 久久成人av | 探花在线观看 | 日日撸 | 91在线观看 | 亚洲人成电影网 | 四虎永久 | 国产xxxx成人精品免费视频频 | 久久色av | 国产精品久久精品 | 欧美精品一区二区三区蜜臀 | 久久久综合亚洲91久久98 | 免费成人高清 | 中文字幕高清在线 | 中文字幕亚洲一区 | 免费的一级毛片 | 91精品国产91久久久久久最新 | 久热久热 | 国产激情午夜 | 日韩精品网站在线观看 | 97久久精品午夜一区二区 | 成人在线播放网站 | 亚州中文| 国产精品成人观看视频国产奇米 | 婷婷色国产偷v国产偷v小说 | 91在线精品视频 | 2018自拍偷拍 | 国产一区二区av | 在线免费看a | 精品乱子伦一区二区三区 | 精品在线一区二区 | 亚洲精品国产第一综合99久久 | 亚洲一区二区在线免费观看 | 久久三区| 每日更新av | av网站免费观看 | 欧日韩免费 | 欧美久久久精品 | 国产精品国产三级国产aⅴ中文 | 国产欧美精品区一区二区三区 | 在线小视频 | 久久久久久久久久久免费视频 | 91视频一88av | 久久大陆 | 午夜电影av | 一级a毛片免费 | 精品日韩在线 | 一级毛片免费播放 | 成人在线www | 欧美日韩精品一区二区 | 国产综合区| 欧美 日韩 国产 在线 | 亚洲精品一区二区另类图片 | 欧美成人激情视频 | 亚洲三区视频 | 亚洲伊人久久综合 | 国产一区二区三区在线免费 | 国产羞羞视频在线观看 | 国产成人精品免高潮在线观看 | 国产精品乱码久久 | 美女91| 香蕉婷婷 | 欧美日韩在线观看中文字幕 | 免费黄色小片 | 午夜午夜精品一区二区三区文 | 国产精品久久久久国产a级 日韩在线二区 | 另类久久| 欧美日韩在线看 | 久久不射电影网 | 欧美一区二区大片 | 天天网 | 色婷婷久久久swag精品 | 久久综合九九 | 成人激情视频在线观看 | 免费欧美视频 | 国产精品成人在线观看 | 亚洲成人精品 | 北条麻妃国产九九九精品小说 | 亚洲欧美在线观看 | 欧美一区二区大片 | 免费中文字幕 | 中文字幕一区二区三区不卡 | 久久99深爱久久99精品 | 欧美成年黄网站色视频 | 一区二区欧美视频 | 国产一区久久 | 欧美午夜视频在线观看 | 日日操夜夜操免费视频 | 嫩草视频入口 | 成人在线看片 | 三级av网站 | a级性生活 | 午夜视频在线观看网站 | 国产视频精品在线观看 | 成人免费高清 | 午夜精品久久久久久久 | 人操人人人 | 91九色视频国产 | 狠狠av| 综合五月激情 | 久久精品国产77777蜜臀 | 91精品国产日韩91久久久久久 | 99精品全国免费观看视频软件 | 波多野结衣一二三四区 | 久草在线观看福利视频 | 亚洲激情一区 | 精品国产一区二区三区日日嗨 | 精品一二区 | 精品国产免费久久久久久尖叫 | 99re国产| 国产老女人精品毛片久久 | 亚洲综合电影 | 久久亚洲天堂 | 欧美久久免费观看 | 国产精品国色综合久久 | 精品一二区 | 中文字幕在线看片 | 久久99精品视频在线观看 | 羞羞网页| 日本欧美国产 | 91看片淫黄大片一级在线观看 | 成人黄色一级片 | 亚洲 欧美 另类 综合 偷拍 | 激情欧美一区二区三区中文字幕 | 国产精品国产三级国产a | 亚洲一区二区中文字幕 | 91视在线国内在线播放酒店 | 中文字幕亚洲欧美日韩在线不卡 | 精品一区二区久久久久久久网站 | 日韩精品一区二区三区中文在线 | 午夜影院| 久久国 | 99中文字幕 | 午夜激情电影在线 | 国产精品美乳一区二区免费 | 国产一级大片 | 欧美在线综合视频 | 久久国产99 | 成人国产精品久久久 | 国产欧美在线一区二区 | 手机看片亚洲 | 北条麻妃一区二区免费播放 | 亚洲欧美在线观看 | 一区二区免费看 | 亚洲美女av在线 | 色黄视频在线看 | 精品久久久久久久久久久久久久 | 日韩三级黄 | 久久国产精品99久久久久久牛牛 | 亚洲精品成人 | 国产精品久久久久久影院8一贰佰 | 午夜影视av | 国产高潮失禁喷水爽网站 | 日韩欧美国产精品综合嫩v 高清av网站 | 一级免费在线视频 | 久久精品a一级国产免视看成人 | 91亚洲国产精品 | 午夜免费 | 中文字幕一区二区三区乱码图片 | 亚洲精品色 | 久久久.com| 亚洲精品在线视频 | av免费网站在线观看 | 国产精品免费观看 | 精品一区二区三区四区五区 | 亚洲色图p | 日韩毛片免费视频一级特黄 | 欧美日韩精品一区二区三区在线观看 | 亚洲综合在线一区二区 | 欧美精品在线视频 | 亚洲精品一区二区三区 | 中文字幕亚洲区 | 黄久久久 | 成人欧美一区二区三区在线观看 | 91日韩欧美| www国产亚洲精品久久网站 | 久久久久久久91 | 免费成人高清 | 久久久久久久久久久久91 | av 一区二区三区 | 人人射人人草 | 婷婷成人免费视频 | 色综合一区二区三区 | 欧美一区久久 | 国产一区视频网站 | 99re在线| 久久久久久久一区 | 亚洲国产一区二 | 超级乱淫片国语对白免费视频 | 日韩欧美a级v片免费播放 | 日韩激情欧美 | 成人免费影院 | 国产99一区二区 | 亚洲精选免费视频 | wwwjizz日本 | 亚洲天堂一区二区三区 | 国产三级电影 | 日本伊人网站 | 超碰97免费在线 | 国产xxxx成人精品免费视频频 | 中文字幕日韩一区二区 | 欧美激情在线播放 | 亚洲欧洲免费视频 | 一区二区三区视频在线观看 | 色婷婷国产精品综合在线观看 | 五月天婷婷综合 | 日本视频网 | 国产色婷婷 | 日本a在线 | 一级看片 | 中文字幕视频在线免费 | 久久99国产精一区二区三区 | 日韩欧美综合在线 | 欧美午夜一区 | 丁香五月网久久综合 | 亚洲精品久久久一区二区三区 | 中文字幕 亚洲一区 | 欧美性猛交xxxx黑人猛交 | 亚洲欧美日韩在线 | 国产一级大片 | 亚洲国产精品久久久久久 |