日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

游戏人工智能开发之6种决策方法

發(fā)布時(shí)間:2024/8/26 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 游戏人工智能开发之6种决策方法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

人工智能遵循著:感知->思考->行動(dòng)

決策方法:有限狀態(tài)機(jī)(Finite-State Machines),分層狀態(tài)機(jī)(Hierarchical Finite-State Machines),行為樹(Behavior Trees),效用系統(tǒng)(Utility Systems),目標(biāo)導(dǎo)向型行動(dòng)計(jì)劃(Goal-Oriented Action??Planners),分層任務(wù)網(wǎng)絡(luò)(Hierarchical Task Networks)

有限狀態(tài)機(jī)

有限狀態(tài)機(jī)是目前游戲AI中最常見的行為模型。狀態(tài)機(jī)的代碼簡單又快速,使用上強(qiáng)大、靈活、計(jì)算開銷小。

狀態(tài)機(jī)的一個(gè)好處是可以可視化,如下圖所示:
?


圖中有四個(gè)狀態(tài):巡邏(patrol),查看(investigate),攻擊(attack),逃走(flee),我們把實(shí)心圓當(dāng)做初始狀態(tài)。

簡要過程:假設(shè)NPC士兵正在保衛(wèi)他的陣地,當(dāng)前狀態(tài)為巡邏,當(dāng)他聽到什么動(dòng)靜時(shí)就會(huì)轉(zhuǎn)到查看狀態(tài),跑到聲音源去查看,如果看到敵人就轉(zhuǎn)到攻擊狀態(tài),如果沒看到過一段時(shí)間又會(huì)回到巡邏狀態(tài)。在攻擊狀態(tài)中如果血值低下就會(huì)進(jìn)入逃跑狀態(tài)。如果擊敗了敵人,又會(huì)回到巡邏狀態(tài)。

狀態(tài)機(jī)狀態(tài)類的一個(gè)主要結(jié)構(gòu)如下,onEnter函數(shù)就相當(dāng)于unity中的Start()函數(shù),在類開始時(shí)調(diào)用,作為對舊狀態(tài)的過度和新狀態(tài)產(chǎn)生的開始,比如當(dāng)從巡邏轉(zhuǎn)向攻擊狀態(tài)時(shí),可以在攻擊狀態(tài)的開始讓NPC大喊“發(fā)現(xiàn)敵人!進(jìn)攻!”等等。onUpdate()就相當(dāng)于unity中的Update(),你可以讓它每幀都執(zhí)行,或者幾秒鐘執(zhí)行一次,是循環(huán)執(zhí)行的,每次執(zhí)行時(shí)間間隔由你來決定。onExit()就是在退出一個(gè)狀態(tài)之前要執(zhí)行的,比如,殺死敵人之后由攻擊狀態(tài)轉(zhuǎn)向巡邏狀態(tài)之前,讓NPC做一個(gè)歡呼手勢并大叫勝利了。FSMTransition列表為將要轉(zhuǎn)到的所有可能的狀態(tài)。

  • class FSMState
  • {
  • ??virtual void onEnter();
  • ??virtual void onUpdate();
  • ??virtual void onExit();
  • ??list<FSMTransition> transitions;
  • };
  • 復(fù)制代碼

    每個(gè)狀態(tài)還存儲(chǔ)著FSMTransition的類,代表能從當(dāng)前狀態(tài)可以轉(zhuǎn)到的狀態(tài)

  • class FSMTransition
  • {
  • ??virtual bool isValid();
  • ??virtual FSMState* getNextState();
  • ??virtual void onTransition();
  • }
  • 復(fù)制代碼

    當(dāng)轉(zhuǎn)換條件滿足時(shí)isValid()返回true,比如當(dāng)發(fā)現(xiàn)敵人NPC就從巡邏狀態(tài)轉(zhuǎn)到攻擊,getNextState()返回將要轉(zhuǎn)到的狀態(tài),onTransition()是狀態(tài)之間轉(zhuǎn)換的過渡,和上面說的onEnter()差不多。

    最后是有限狀態(tài)機(jī)類FiniteStateMachine
    ?

  • class FiniteStateMachine
  • {
  • ??void update();
  • ??list<FSMState> states;
  • ??FSMState* initialState;
  • ??FSMState* activeState;
  • }
  • 復(fù)制代碼

    有限狀態(tài)機(jī)類包含一個(gè)包含所有狀態(tài)的列表states,initialState為初始狀態(tài),activeState為當(dāng)前狀態(tài)。

    偽代碼如下:
    ?

  • 在??activeState.transtitions中循環(huán)調(diào)用isValid(),檢測是否符合達(dá)到下一狀態(tài)的條件
  • 如果符合轉(zhuǎn)換條件
  • 調(diào)用activeState.on Exit(),退出當(dāng)前狀態(tài)
  • 設(shè)置activeState 為 validTransition.getNextState(),把當(dāng)前狀態(tài)賦值為下一狀態(tài)
  • 調(diào)用activeState.onEnter(),下一狀態(tài)的開始
  • 如果不符合轉(zhuǎn)換條件,調(diào)用activeState.onUpdate(),讓NPC執(zhí)行當(dāng)前狀態(tài)需要做的事
  • 復(fù)制代碼


    在編寫有限狀態(tài)機(jī)的代碼只前最好畫一個(gè)上面的草圖,這樣既可以明確轉(zhuǎn)換關(guān)系,又可以不漏掉該有的狀態(tài)。

    分層有限狀態(tài)機(jī)

    有限狀態(tài)機(jī)雖然好,但是它有很大的缺點(diǎn),當(dāng)狀態(tài)少的時(shí)候可以運(yùn)用自如,當(dāng)狀態(tài)多的時(shí)候10個(gè)以上就已經(jīng)結(jié)構(gòu)非常復(fù)雜,而且容易出錯(cuò)。

    如果我們讓NPC巡邏兩個(gè)地方,比如安全的室內(nèi),和門口。
    ?


    如果我們想在一個(gè)狀態(tài)上附加一些狀況,例如當(dāng)NPC在巡邏時(shí),讓他接一個(gè)電話然后再恢復(fù)巡邏,此時(shí)如果使用有限狀態(tài)機(jī)的話我們必須要新建一個(gè)打電話的狀態(tài)來做過渡,但是此時(shí)的巡邏有兩個(gè),所以能接到電話的狀態(tài)也有兩個(gè),然后加了兩個(gè)相同的狀態(tài),很多這樣的重復(fù)的小狀態(tài)使得狀態(tài)機(jī)越來越復(fù)雜。如下圖:
    ?


    這時(shí),我們可以用分層有限狀態(tài)機(jī)來解決這個(gè)問題,把多個(gè)狀態(tài)機(jī)歸為一層,如下圖,把巡邏安全處和門口歸為看守建筑,這樣我們只需要有一個(gè)手機(jī)號(hào)買號(hào)打電話狀態(tài)就可以了。


    分層有限狀態(tài)機(jī)增加了一個(gè)滯后,在有限狀態(tài)機(jī)中并沒有,在一個(gè)普通的有限狀態(tài)機(jī)中,是從初始狀態(tài)開始的,在分層有限狀態(tài)機(jī)中是一個(gè)嵌套的狀態(tài)。注意上圖有H的圈,代表歷史狀態(tài)(history state),當(dāng)我們第一次進(jìn)入嵌套狀態(tài)->看守建筑時(shí),歷史狀態(tài)H表示為初始狀態(tài),之后歷史狀態(tài)H表示為最近處在的一個(gè)狀態(tài)。

    在我們的例子中:初始狀態(tài)就是看守建筑,,然后進(jìn)入看到手機(jī)按住這個(gè)嵌套,巡邏安全處是初始狀態(tài)。當(dāng)從巡邏安全處轉(zhuǎn)換到巡邏門口這個(gè)狀態(tài)時(shí),H歷史狀態(tài)就轉(zhuǎn)變?yōu)檠策夐T口狀態(tài),此時(shí)來電話了,轉(zhuǎn)換到接電話狀態(tài),接電話結(jié)束,我們回到嵌套狀態(tài)中的歷史狀態(tài),此時(shí)為巡邏門口,可見H歷史狀態(tài)就是一個(gè)臨時(shí)的,便于嵌套外的狀態(tài)返回到之前的嵌套內(nèi)的小狀態(tài),以不至于出錯(cuò),或者換回了別的狀態(tài),如果接完電話回到巡邏安全處,那就出大錯(cuò)了。

    分層有限狀態(tài)機(jī),就這樣避免了重復(fù)狀態(tài),可以實(shí)現(xiàn)更大的更復(fù)雜的狀態(tài)。

    實(shí)例:

    Halo2使用了這一技術(shù),如下圖:
    ?


    可見:把使用手雷、掩蔽、防御歸為自衛(wèi),交戰(zhàn)部分使用了多層嵌套,但是原理是一樣的,向尸體設(shè)計(jì)和搜查尸體歸為戰(zhàn)后處理。在撤退和閑置部分只有一個(gè)行為被嵌套,但是日后可以繼續(xù)添加行為,可擴(kuò)展性良好。

    至于如何在嵌套的層里對行為進(jìn)行選擇,可以就按這個(gè)順序執(zhí)行,也可以加上權(quán)重優(yōu)先級(jí),或者你想讓他執(zhí)行哪個(gè)通過代碼來控制。

    行為樹

    行為樹是樹型結(jié)構(gòu)的,每個(gè)節(jié)點(diǎn)都代表了一個(gè)行為,每個(gè)行為都可以有子行為。

    所有行為都有一個(gè)先決條件,就是產(chǎn)生的這些行為的條件。

    整個(gè)算法先從樹的根部開始,然后開始檢查每一個(gè)先決條件。樹的每一層只可以執(zhí)行一個(gè)行為,所以當(dāng)一個(gè)行為正在執(zhí)行,它的兄弟節(jié)點(diǎn)都不會(huì)被檢查,但是它們的子節(jié)點(diǎn)還是要檢查的。相反如果一個(gè)行為的先決條件當(dāng)前并不滿足,則跳過判斷它的子節(jié)點(diǎn),繼續(xù)判斷它的兄弟節(jié)點(diǎn)。一個(gè)樹全部檢查完畢之后,決定執(zhí)行優(yōu)先級(jí)最大的,然后再依次執(zhí)行每個(gè)動(dòng)作。

    偽代碼:
    ?

  • 使根節(jié)點(diǎn)為當(dāng)前節(jié)點(diǎn)
  • 當(dāng)存在當(dāng)前節(jié)點(diǎn)
  • 判斷當(dāng)前節(jié)點(diǎn)的先決條件
  • 如果先決條件返回true
  • 把節(jié)點(diǎn)加到執(zhí)行清單
  • 使子節(jié)點(diǎn)為當(dāng)前節(jié)點(diǎn)
  • 否則
  • 使兄弟節(jié)點(diǎn)為當(dāng)前節(jié)點(diǎn)
  • 執(zhí)行執(zhí)行清單上的所有行為
  • 復(fù)制代碼


    不同于狀態(tài)機(jī),行為樹是無狀態(tài)的,不需要記下之前執(zhí)行的行為,只是判斷行為該不該執(zhí)行。

    行為樹的節(jié)點(diǎn)之間是不相關(guān)的,刪除或增加節(jié)點(diǎn),對其他節(jié)點(diǎn)都無影響。所以,可擴(kuò)展性也是行為樹的一個(gè)優(yōu)勢。另外還可以為決策樹添加靈活性與隨機(jī)性,父節(jié)點(diǎn)可以隨機(jī)決定是否檢查子節(jié)點(diǎn)。

    缺點(diǎn):決策樹做的選擇并不一定是最優(yōu)的,結(jié)果也不一定是我們想要的。而且決策每次都要從根部往下判斷選擇行為節(jié)點(diǎn),比狀態(tài)機(jī)要耗費(fèi)時(shí)間。每次決策都要經(jīng)過大量的條件判斷語句,會(huì)變得非常慢。

    另外還有一個(gè)問題,例如:一個(gè)農(nóng)民要收割作物,敵人出現(xiàn)了,農(nóng)民逃跑,逃出了距離敵人的一定范圍之后,又回去收割作物,走到敵人的范圍又逃出,這樣來回往復(fù),是一個(gè)弊端,,可以根據(jù)情況來寫代碼避免,否則會(huì)被玩家***的。

    效用系統(tǒng)

    人工智能的邏輯->電腦的邏輯,是基于簡單的bool問題,比如:“我能看到敵人嗎?”,“我有彈藥嗎”,是簡單的是或者不是的問題,所以做出的行為通常是極端化的,一個(gè)單一的行動(dòng)。比如:
    ?

  • if (CanSeeEnemy())
  • {
  • ??AttackEnemy();
  • }
  • if (OutOfAmmo())
  • {
  • ??Reload();
  • }
  • 即時(shí)有多條件的行為,bool判斷帶來的也是一個(gè)單一的行動(dòng)。
  • if (OutOfAmmo() && CanSeeEnemy())
  • {
  • ??Hide();
  • }
  • 復(fù)制代碼


    所以有些情況,只是做這些布爾判斷是不合適的,會(huì)遺漏很多情況,判斷也不妥當(dāng)。比如:我們可能需要同時(shí)考慮與敵人的距離、有多少彈藥、饑餓程度、HP值,等等。這些判斷條件能映射出許多動(dòng)作,比我們單一的判斷做不做這個(gè)動(dòng)作要好很多。utility-based system,基于效用的系統(tǒng),會(huì)根據(jù)權(quán)重、比率、隊(duì)列和許多需要考慮的事項(xiàng)來做出最優(yōu)選擇,使AI比普通的行為樹更有頭腦。根據(jù)上面的例子,使用效用系統(tǒng)我們的AI可以做出我們想要的動(dòng)作,并根據(jù)當(dāng)前情況做出不同強(qiáng)度的動(dòng)作,使AI真實(shí)、更具可能性,也不再是只有一個(gè)正確的選擇了。決策樹就是對AI說,“只是你將要做的一個(gè)行為”,效用系統(tǒng)就是對AI說:“這些是你可能要做的行為”

    Sims模擬人生的人工智能就是使用的效用系統(tǒng)(sims的人工智能讓我膜拜至今),在sims中,小人結(jié)合當(dāng)前環(huán)境和自身的狀態(tài),來做出行動(dòng)的選擇。例如:小人“非常餓”結(jié)合環(huán)境“沒有食物”會(huì)比只有“有一點(diǎn)餓”更加吸引人的眼球。如果“有一點(diǎn)餓”小人會(huì)以接近“美食”為第一執(zhí)行行為。注意,這里的“美食(的美味程度)”、“食物很少(食物儲(chǔ)備程度)”、“一點(diǎn)餓(餓的程度)”,都是一個(gè)有范圍的數(shù)值(常用的是0-1的浮點(diǎn)值)。

    當(dāng)需要選擇新的行為時(shí),我們通過分?jǐn)?shù)(上面說的各種程度)來選擇相對最優(yōu)的選擇,或者加上一個(gè)隨機(jī)值再選擇,使得接近優(yōu)選的幾個(gè)選擇都有一定幾率(幾率可根據(jù)所加隨機(jī)值決定)被選中。

    目標(biāo)導(dǎo)向型行動(dòng)計(jì)劃

    GOAP來源于STRIPS方法,這兩種都是讓AI創(chuàng)造他們自己的方法去解決問題,我們提供給它一系列可能的動(dòng)作作為對這個(gè)世界的描述,和每個(gè)動(dòng)作使用的先決條件,和行動(dòng)帶來的影響。AI擁有一個(gè)初始狀態(tài)和他需要達(dá)到的目標(biāo)。有一組目標(biāo),AI可以通過優(yōu)先級(jí)或當(dāng)前狀態(tài)選擇一個(gè)。計(jì)劃系統(tǒng)決定一個(gè)動(dòng)作序列來滿足當(dāng)前目標(biāo),計(jì)劃出一個(gè)像路徑一樣的能最簡單達(dá)到目標(biāo)狀態(tài)的動(dòng)作序列。

    GOAP是一個(gè)反向鏈接搜索,從要實(shí)現(xiàn)的目標(biāo)開始,找到什么動(dòng)作能實(shí)現(xiàn)目標(biāo),在尋找剛才動(dòng)作的先決條件,一直往前推,知道達(dá)到你的當(dāng)前(初始)狀態(tài)。這種反向鏈接搜索替代了啟發(fā)式的前向鏈接搜索。

    偽代碼:
    ?

  • 把目標(biāo)加到未解決事件列表
  • 對于每個(gè)為解決事件(for)
  • 移除這個(gè)為解決事件
  • 找到達(dá)成事件的動(dòng)作
  • 如果動(dòng)作的先決條件已經(jīng)滿足
  • 增加動(dòng)作到計(jì)劃中
  • 往回推需要達(dá)到先決條件的動(dòng)作到計(jì)劃中
  • 否則
  • 添加該先決條件到未解決時(shí)間中
  • 復(fù)制代碼


    例如:我們建立一個(gè)NPC士兵,把它的目標(biāo)設(shè)為殺死其他敵人,我們設(shè)置它的目標(biāo)為Target.Dead。為了讓目標(biāo)去死,NPC必須要有一個(gè)武器用來射擊,這是一個(gè)先決條件,但是現(xiàn)在NPC并沒有正在裝備的武器,NPC就需要執(zhí)行找到武器這個(gè)動(dòng)作,如果NPC有武器庫,他就會(huì)從武器庫中拿一個(gè),如果病沒有武器庫,就需要尋路去找一個(gè)武器裝備了。得到武器裝備之后就要找到敵人,實(shí)現(xiàn)方式多種多樣,徒步尋找、或者NPC周圍有車也可以開著車去尋找。我么發(fā)現(xiàn),我們給NPC大量的動(dòng)作選擇,讓NPC自己決定該做什么,因而產(chǎn)生動(dòng)態(tài)不可預(yù)知又有趣的行為,而且表現(xiàn)得很自然,比開發(fā)者創(chuàng)建行為好多了。

    分層任務(wù)網(wǎng)絡(luò)

    HTN也是尋找一個(gè)計(jì)劃來讓AI執(zhí)行,不同之處在于怎樣找出這個(gè)計(jì)劃。開始擁有一個(gè)初始狀態(tài)和一個(gè)跟任務(wù)代表我們需要解決的問題。原理是最高級(jí)的任務(wù)分解成更小的任務(wù)再繼續(xù)分解直到我們解決問題。每個(gè)高級(jí)任務(wù)都有很多方式被完成,當(dāng)前世界狀態(tài)決定高級(jí)任務(wù)要分解成哪組小任務(wù)。HTN與GOAP相反,HTN是前向鏈接搜索,是從當(dāng)前狀態(tài)一直推到目標(biāo)狀態(tài),向前推直到問題解決。世界狀態(tài)分散成幾種屬性,它的HP、精力,敵人的HP、相距距離,計(jì)劃根據(jù)這些來制定。

    我們有兩種任務(wù):原始任務(wù)和復(fù)合任務(wù)。原始任務(wù)是可以只解決問題的任務(wù),也就是可以直接達(dá)到目標(biāo)的任務(wù)。在游戲中,它可以為開火、裝填子彈、移動(dòng)到掩蔽物。這些人物可以影響世界狀態(tài),開火這個(gè)任務(wù)需要先有子彈,并執(zhí)行裝填子彈這個(gè)任務(wù)。復(fù)合任務(wù)是高級(jí)別的任務(wù),可以看作方法。一個(gè)方法是一組任務(wù)可以完成復(fù)合任務(wù),這一組任務(wù)是由先決條件決定的。復(fù)合任務(wù)讓HTN推斷出世界并且決定該做什么動(dòng)作。

    使用復(fù)合任務(wù),我們就能構(gòu)建一個(gè)HTN域,這個(gè)域是一大層任務(wù),代表我們解決問題的方法。

    偽代碼:
    ?

  • 增加根復(fù)合任務(wù)到分解列表中
  • 對于每個(gè)在我們分解列表中的任務(wù)(for)
  • 移除任務(wù)
  • 如果任務(wù)是復(fù)合任務(wù)
  • 找到滿足當(dāng)前條件狀態(tài)并且能處理該復(fù)合任務(wù)的方法
  • 如果該方法找到了,增加方法的任務(wù)到分解列表中
  • 如果沒找到,恢復(fù)到之前分解任務(wù)的狀態(tài)中
  • 如果任務(wù)是原始任務(wù)
  • 在當(dāng)前狀態(tài)下執(zhí)行任務(wù)
  • 增加任務(wù)到最終計(jì)劃列表
  • 復(fù)制代碼


    HTN就是從最高級(jí)的根任務(wù)分解更小的任務(wù)再分解成更更小,分解是需要判斷當(dāng)前狀態(tài)和條件的。當(dāng)我們終于分解為原始任務(wù),我們把原始任務(wù)加到最終計(jì)劃中,每一個(gè)原始任務(wù)都是一個(gè)可操作步驟,我們可以直接執(zhí)行它。

    總結(jié)

    以上是生活随笔為你收集整理的游戏人工智能开发之6种决策方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 国产成人免费在线 | 综合精品在线 | 日韩电影二区 | 国产91黄色 | 国产片自拍| 精品国产一区二区三区四区阿崩 | 91精品成人| 久久久久久9| 丝袜老师让我了一夜网站 | 在线观看免费视频一区 | www..com黄色| 久久99精品久久久久婷婷 | 国产精品a级 | xxxxx日韩| 法国空姐在线观看视频 | 国产冒白浆 | 亚洲午夜久久久久久久久 | 免费成人av片 | 91 在线观看 | 人人入人人 | 狠狠躁夜夜躁av无码中文幕 | 亚洲第九十九页 | 学生孕妇videosex性欧美 | 日一日干一干 | 免费看a级片 | 欧美精品一区二区免费看 | 污污内射在线观看一区二区少妇 | 一亲二脱三插 | 丰满少妇被猛烈进入高清播放 | jizzjizz日本免费视频 | 女女百合高h喷汁呻吟玩具 www.亚洲一区 | 大尺度电影在线 | 欧美67194 | 91爱爱网| 99蜜桃臀久久久欧美精品网站 | 天天草天天摸 | 亚洲在线综合 | av在线免费网址 | 99视频久 | 亚洲av永久无码精品一百度影院 | 亚洲91精品 | 美女诱惑一区二区 | 麻豆av网站 | www.色多多| 夜福利视频 | 97精品人人妻人人 | 亚洲码视频 | 成年人在线观看网站 | 一二区在线观看 | 国产午夜电影 | 69视频在线观看免费 | 原创真实夫妻啪啪av | 狠狠干中文字幕 | xiuxiuavnet| 91精品国产一区二区无码 | 黄色一级一片免费播放 | 日本黄色录像片 | 成人啪啪18免费游戏链接 | 91中文字幕视频 | 国产精品天天看 | 日日碰狠狠添天天爽 | 亚洲色视频| 国产欧美综合在线 | 少妇人妻综合久久中文字幕 | 67194成人在线观看 | 日本一区二区免费在线观看 | av在线黄色 | 米奇7777狠狠狠狠视频 | 2025中文字幕 | 亚洲色中色 | 亚洲精品乱码久久久久久蜜桃不卡 | 美日韩精品一区二区 | 在线观看精品视频 | 免费一级片视频 | 亚洲AV蜜桃永久无码精品性色 | 成人一区在线观看 | 国产亚洲精品女人久久久久久 | 久久偷看各类wc女厕嘘嘘偷窃 | 午夜在线成人 | 午夜一区二区三区在线观看 | 天天干天天爽天天射 | 亚洲色图影院 | 激情小说视频在线 | 日韩视频中文 | 午夜一本 | 麻豆视频在线免费看 | 强制高潮抽搐哭叫求饶h | 奴色虐av一区二区三区 | 欧美日色 | 久久综合国产精品 | 亚洲色图清纯唯美 | 国产一区午夜 | 日本精品成人 | 国产小视频免费在线观看 | 黄色一毛片 | 少妇2做爰hd韩国电影 | 在线亚洲网站 | 在线免费观看毛片 | 男男做性免费视频网 |