久久精品国产精品国产精品污,男人扒开添女人下部免费视频,一级国产69式性姿势免费视频,夜鲁夜鲁很鲁在线视频 视频,欧美丰满少妇一区二区三区,国产偷国产偷亚洲高清人乐享,中文 在线 日韩 亚洲 欧美,熟妇人妻无乱码中文字幕真矢织江,一区二区三区人妻制服国产

歡迎訪問 生活随笔!

生活随笔

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

编程问答

基于pygame实现的飞机大战游戏

發布時間:2024/9/20 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于pygame实现的飞机大战游戏 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • 1.引言
    • 1.1 背景
    • 1.2 意義
    • 1.3 功能
  • 2.系統結構
    • 2.1 整體框架
    • 2.2 精靈與精靈組
    • 2.3 功能介紹
      • 2.3.1 玩家飛機
      • 2.3.2 敵機類型和關卡設定
      • 2.3.3 敵機登場
      • 2.3.4 游戲道具和獎勵
      • 2.3.5 游戲結束
    • 2.4 游戲模塊
  • 3.實現過程及代碼
    • 3.1 游戲框架搭建
      • 3.1.1 游戲類的設計
      • 3.1.2 搭建游戲框架
    • 3.2 精靈與精靈組
      • 3.2.1 圖像的加載和繪制
      • 3.2.2 游戲背景連續滾動
    • 3.3 指示器面板
      • 3.3.1 指示器面板類的設計
      • 3.3.3 使用精靈實現文本標簽
      • 3.3.4 游戲數據修改
      • 3.3.5 最好成績的文件讀寫
      • 3.3.6 游戲狀態變化
      • 3.3.7 游戲結束后的重置面板
    • 3.4 逐幀動畫的基本實現
      • 3.4.1 派生飛機類
      • 3.4.2 設置逐幀動畫頻率
      • 3.5.1 派生敵機類
      • 3.5.2 派生英雄飛機類
    • 3.6 碰撞檢測
      • 3.6.1 創建碰撞檢測
      • 3.6.2 敵機撞毀英雄飛機
      • 3.6.3 英雄飛機發射子彈
      • 3.6.4 英雄飛機拾取道具
    • 3.7 音樂與音效
      • 3.7.1 加載和播放背景音樂
      • 3.7.1 加載和播放音效
    • 4.實驗結果
    • 5.總結和展望

?

**摘要**


??為了深入學習python程序設計語言面向對象設計的特點,以此開發一款桌面版的飛機大戰游戲,學習python程序設計語言中數據與功能的組合。此項目是基本pygame開發的一款桌面版的飛機大戰游戲。通過pygame中的精靈與精靈組的特性實現游戲面板上數據內容和圖像內容的顯示,實現飛機、子彈、道具與敵機的生成。幀數的設置實現游戲頁面的顯示和飛機的動態效果,監聽游戲事件以實現游戲事件的執行,pygame中的collide模塊實現飛機、子彈、道具和敵機之間的碰撞接觸,mixer模塊實現背景音樂和游戲音效。游戲有良好的界面顯示,簡單的游戲操作,給玩家良好的游戲體驗。 ?

1.引言

1.1 背景

?此項目是基于pygame開發的一款飛機大戰游戲,良好的游戲界面,玩家通過簡單的鍵盤操作即可進行游戲,體驗游戲樂趣。

1.2 意義

?以pygame開發飛機大戰游戲,體會和理解面向對象開發的同時,了解并學習pygame的高級使用

1.3 功能

?(1)顯示游戲背景圖片
?(2)顯示游戲狀態、游戲分數、炸彈提示、生命次數和文本提示等與游戲數據或狀態相關的內容
?(3)顯示玩家飛機與敵機的逐幀動畫,根據游戲關卡隨機生成相應數量的敵機
?(4)玩家飛機每0.2秒自動連續發射3顆子彈,子彈沿屏幕上方飛行,若與敵機接觸則碰撞擊毀敵機
?(5)玩家飛機通過方向鍵進行移動,還可以通過按鍵“B”釋放炸彈,每次釋放炸彈后,數量減一,當數量為0時,則不可使用
?(6)每30秒隨機從屏幕頂部掉落道具,玩家飛機拾取道具可增加炸彈或增強子彈
?(7)玩家飛機若與敵機碰撞,則減少生命次數,當生命次數達到0則游戲結束
?(8)播放音樂與音效

2.系統結構

2.1 整體框架

圖1 整體框架

?

2.2 精靈與精靈組

為了實現高仿真的飛機大戰游戲,使用了兩個由pygam提供的非常重要的類:精靈(Sprite)和精靈組(Group)
(1)精靈:
?A.在游戲開發中,通常把顯示圖像的對象叫做精靈Sprite
?B.精靈需要兩個重要的屬性:
??a. image 要顯示的圖像
??b. rect 圖像要顯示在屏幕的位置
?C.子類可以重寫update()方法,在每次刷新屏幕時,更新精靈位置,需 在子類的初始化方法中,設置image和rect屬性
(2)精靈組:
?A.一個精靈組可以包含多個精靈對象
?B. 調用精靈組對象的update()方法,可以自動調用組內每一個精靈的 update()方法
?C. 調用精靈組對象的draw()方法,可以將組內每一個精靈的image繪制在rect位置

2.3 功能介紹

2.3.1 玩家飛機

(1)在飛機大戰游戲中,玩家可以操作玩家飛機(又叫英雄飛機)執行移動位置、引爆炸彈以及拾取道具等動作,英雄飛機還能夠自動向上連續發射子彈,其中:
??A. 英雄出場后,會有3秒鐘的無敵時間,也就是在這3秒鐘內,任何敵機都無法摧毀英雄飛機
??B. 使用鍵盤的方向鍵可以在游戲窗口內移動英雄飛機(但不允許將英雄飛機移動到游戲窗口之外)
??C. 英雄出場后,每隔0.2秒,會自動連續發射3顆子彈,其中
???a. 子彈從英雄飛機頭部的正上方發射,沿垂直方向向游戲窗口的上方飛行
???b. 如果子彈飛行途中,擊中了敵機,會對敵機造成傷害
???c. 如果子彈飛出了游戲窗口,中途沒有擊中任何一架敵機,子彈會被銷毀
??D. 英雄出場后,會默認攜帶3顆炸彈
???a. 玩家按下鍵盤上的字母B會引爆炸彈,一旦引爆,游戲窗口中所有敵機都會被炸毀
???b. 引爆炸彈后,游戲窗口左下角的炸彈數量會相應減少,如果炸彈數量不足,則顯示數字0,同時不再允許玩家繼續引爆炸彈

(2)英雄飛機包含的屬性如表1所示:

表1 英雄飛機屬性表

名稱 速度 飛行動畫 被擊中圖片 被摧毀動畫 摧毀音效 升級音效
英雄 5 有 無 有 有 有

(3)子彈包含的屬性如表2所示:

表2 子彈屬性表

名稱 速度 傷害力 音效
子彈 1 2 1 有

2.3.2 敵機類型和關卡設定

(1)敵機類型
飛機大戰游戲中一共有三種類型的敵機,各自對應的屬性如表3所示:

表3 敵機屬性表


序號 名稱 生命值 速度 分值 飛行動畫 被擊中圖片 被摧毀動畫 摧毀音效
01 小敵機 1 1~7 1000 圖片 無 有 有
02 中敵機 6 1~3 6000 圖片 有 有 有
03 大敵機 15 1 15000 有 有 有 有

(2)關卡設定
飛機大戰游戲根據玩家的得分逐步提高難道,共設立3個關卡,具體的設定如表4所示:

表4 關卡級別表


序號 名稱 分值范圍 小敵機數量(速度) 中敵機數量(速度) 大敵機數量(速度)
01 關卡1 <10000 16(1~3) 0(1) 0(1)
02 關卡2 <50000 24(1~5) 2(1) 0(1)
03 關卡3 >=50000 32(1~7) 4(1~3) 2(1)

2.3.3 敵機登場

游戲開始后,根據不同的關卡,準備不同數量的敵機,敵機按照以下規則登場:
?(1)敵機的初始位置在游戲窗口上方的隨機位置
?(2)敵機按照各自不同的速度,沿垂直方向向游戲窗口的下方飛行
?(3)如果飛行途中,與英雄飛機相撞,那么:
? ?A. 英雄飛機被摧毀,同時播放被摧毀動畫及被摧毀音效
? ??a. 動畫播放過程中,不允許操作英雄飛機
?? ?b. 動畫播放完成后,游戲窗口右下角英雄的命數會相應減少。如果還有剩余 命數,那么在英雄犧牲的位置出現新的英雄繼續戰斗(新出場的英雄有3秒的無敵時間,在無敵時間內,英雄飛機不會被摧毀,同時也不會摧毀其他敵機),反之沒有剩余命數,則游戲結束
??B. 摧毀英雄飛機的敵機,同時要播放被摧毀動畫及被摧毀音效
??? a. 動畫播放過程中,敵機在屏幕上位置不會移動
??? b. 動畫播放完成后,敵機會被設置回初始狀態,跳轉到第(1)步繼續執行
?(4)如果飛行途中,被子彈擊中,則敵機的生命值減去子彈的傷害力:
??A. 如果敵機的生命值>0,顯示被擊中圖片(如果有),敵機繼續向屏幕下方飛行
??B. 如果敵機的生命值<=0,播放被撞毀動畫和音效
???a. 動畫播放過程中,敵機在屏幕上位置不會移動
???b. 動畫播放完成后,敵機會被設置回初始轉態,跳轉到(1)步繼續執行
?(5)如果敵機飛出了游戲窗口,中途沒有被摧毀,會被設置回初始狀態,跳轉到第(1)步繼續執行

2.3.4 游戲道具和獎勵

英雄飛機每得到100000分會被獎勵1次生命。此外,游戲開始每隔30秒會從游戲窗口上方隨機位置向下飛出游戲道具,具體道具作用如表5所示:

表5 道具作用表


序號 名稱 功能描述 速度 播放音效
01 炸彈補給 英雄飛機拾取后,炸彈數量加1 5 有
02 子彈增強 英雄飛機拾取后,發射的子彈改為雙排,持續時長20秒 5 有

2.3.5 游戲結束

當英雄飛機沒有剩余命數,無法再繼續進行戰斗則游戲結束。在英雄飛機被撞毀的動畫播放完成之后,會完成以下動作:
(1)整個游戲畫面靜止
(2)游戲窗口中央靠上位置顯示“Game Over!”文字
(3)”Game Over!”下方顯示最好得分,玩家可以對比左上角顯示的當前得分更新最好得分,并在下次游戲時顯示最新的最好得分
(4)在最好得分下面會有“Press spaceBar to continue”的提示語

2.4 游戲模塊

飛機大戰游戲項目中設計4個模塊,分別是:
(1)game.py主游戲模塊.封裝Game類并負責啟動游戲
(2)game_items.py游戲元素模塊,封裝英雄飛機、子彈、敵機、道具等游戲元素類,并定義全局變量
(3)game_hud.py游戲面板模塊,封裝指示器面板類,統一管理游戲狀態、游戲分數、炸彈提示、生命次數以及文本提示等與游戲數據或狀態相關的內容
(4)game_music.py游戲音樂模塊,封裝音樂播放器類,專門負責音樂和音效的播放

3.實現過程及代碼

3.1 游戲框架搭建

3.1.1 游戲類的設計

1.根據功能和整體框架,游戲Game類的設計如圖2所示:


?

圖2 Game類圖

2. 游戲的屬性
根據屬性的作用,又可以將游戲的屬性分為游戲屬性和精靈組屬性
(1)游戲屬性 在游戲對象中,除了常規的主窗口屬性和游戲狀態屬性之外,還定義了2個精靈相關的屬性以及1個音樂播放器屬性。在游戲開發中,通知把顯示圖像的對象叫做精靈Sprite。在pygame中精靈有兩個重要的屬性。
?A. image要顯示的圖像(surface對象)
?B. rect圖像要顯示在游戲窗口的矩形區域 在游戲窗口中看到的每一個獨立的圖像或者一行文本,都可以看做一個精靈Sprite對象,例如:英雄飛機、一顆子彈、一架敵機等

游戲對象中定義的游戲屬性列表如表6所示:

表6 游戲屬性表


序號 名稱 說明
01 main_window 游戲主窗口,初始大小為(480,700)
02 is_game_over 游戲結束標記,初始為False
03 is_pause 游戲暫停標記,初始為False
04 hero 英雄精靈,初始顯示在游戲窗口中間靠下位置
05 hud_panel 指示器面板,負責顯示和游戲狀態以及數據相關的內容,包括:狀態圖像、游戲得分、炸彈數量、英雄命數,以及在游戲暫?;蚪Y束時,顯示在游戲窗口中央位置的提示信息等
06 player 音樂播放器,負責播放背景音樂和游戲音效


(2)精靈組屬性
精靈組是保存了多個精靈對象的組。精靈組有兩個重要的應用場景:
?A. 一次性繪制或更新多個精靈
?B. 碰撞檢測。碰撞檢測就是檢測多個精靈之間是否發生碰撞,例如:子彈是否集中敵機、敵機是否撞到英雄飛機

游戲對象中定義的精靈組屬性列表如表7所示:

表7 精靈組屬性表


序號 名稱 說明
01 all_group 所有精靈組,存放所有要顯示的精靈,用于屏幕繪制和更新位置
02 enemies_group 敵機精靈組,存放所有敵機精靈對象,用于檢測子彈擊中敵機以及敵機撞擊英雄飛機
03 supplies_group 道具精靈組,存放所有道具機靈對象,用于檢測英雄飛機拾取道具


3. 游戲對象的方法
游戲類中為游戲對象封裝了如表8如示:

表8 游戲對象的方法表


序號 名稱 說明
01 reset_game 重置游戲,開啟新一輪游戲之前,將游戲屬性恢復到初始值
02 create_enemies 創建敵機,在新游戲開始或者關卡升級后,根據當前游戲級別創建敵機精靈
03 create_supplies 創建道具,游戲開始后每隔30秒隨機投放炸彈補給或子彈增強道具
04 start 開始游戲,創建時鐘對象并且開啟游戲循環,在游戲循環中監聽事件、更新精靈位置、繪制精靈、更新顯示、設置刷新幀率
05 event_handler 事件監聽,監聽并處理每一次游戲循環執行時發生的事件,避免游戲循環中的代碼過長
06 check_collide 碰撞檢測,監聽并處理每一個游戲循環執行時是否發生精靈與精靈之間的碰撞,其中包括:子彈擊中敵機、英雄拾取道具、敵機撞擊英雄等

3.1.2 搭建游戲框架

  • 在game_items.py模塊定義游戲窗口矩形區域的全局變量,代碼如下:
  • import pygame定義全局變量 SCREEN_RECT = pygame.Rect(0, 0, 480, 700) # 游戲窗口矩形
    • 1
    • 2
    • 3
  • 在game.py定義Game類,并實現初始化方法和重設游戲方法,
    (1). 在初始化方法中:
    ??A. 創建游戲窗口
    ??B. 設置窗口標題
    ??C. 設置游戲狀態屬性
    (2)定義reset_game 方法,恢復游戲狀態的初始值
    (3)定義event_handler方法監聽退出事件和監聽空格鍵按鍵并切換狀態
    (4)在start方法中:
    ??A. 定義時鐘對象
    ??B. 完成游戲循環的基礎代碼
    代碼如下:
  • ```python import pygame from game_hud import * from game_items import * from game_music import *class Game(object):"""游戲核心類"""def __init__(self):# 游戲窗口self.main_window = pygame.display.set_mode(SCREEN_RECT.size)pygame.display.set_caption('飛機大戰')#游戲狀態self.is_game_over = False # 結束標記self.is_game_pause = False # 暫停標記def reset_game(self):"""重置游戲數據"""self.is_game_over = Falseself.is_game_pause = Falsedef start(self):"""開啟游戲主邏輯"""# 創建時鐘clock = pygame.time.Clock()while True:# 處理事件監聽if self.event_handler():# event.handler 返回True則說明發生了退出事件return# 根據游戲轉態切換界面顯示的內容if self.is_game_over:print('游戲已經結束,按空格鍵重新開始游戲...')elif self.is_game_pause:print('游戲已經暫停,按空格鍵繼續...')else:print('游戲進行中...') #刷新頁面pygame.display.update()# 設置刷新率 clock.tick(60)def event_handler(self):"""獲取并處理事件"""for event in pygame.event.get():if event.type == pygame.QUIT:# 退出按鈕被點擊return Trueelif event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE:# 用戶按下了鍵盤上的 ESC 鍵return Trueelif event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:# 用戶按下了鍵盤上的 空格 鍵if self.is_game_over:# 游戲已經結束,重置游戲self.reset_game()else:# 游戲還沒結束,切換暫停狀態self.is_game_pause = not self.is_game_pausereturn False
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
  • 在主程序中創建游戲對象并且啟動游戲
  • if __name__ == '__main__':#初始化數據pygame.init()#開始游戲Game().start()#釋放游戲資源pygame.quit()
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    3.2 精靈與精靈組

    3.2.1 圖像的加載和繪制

  • 在game_items中創建派生游戲精靈子類
  • #定義精靈類 class GameSprite(pygame.sprite.Sprite):res_path = './res/images/'def __init__(self, image_name, speed, *group):"""初始化精靈對象"""# 調用父類方法,把當前精靈對象放到精靈組里super(GameSprite, self).__init__(*group)# 創建圖片self.image = pygame.image.load(self.res_path + image_name)# 獲取矩形self.rect = self.image.get_rect()# 設置移動速度self.speed = speeddef update(self, *args):"""更新元素數據"""self.rect.y += self.speed
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
  • 在game.py中使用精靈組繪制精靈內容
  • class Game(object):"""游戲核心類"""def __init__(self):···# 游戲精靈組self.all_group = pygame.sprite.Group() # 存放界面上的所有精靈self.enemies_group = pygame.sprite.Group() # 敵機精靈組self.supplies_group = pygame.sprite.Group() # 道具精靈組# 游戲精靈GameSprite('background.png', 1, self.all_group) # 創建背景精靈hero_sprite = GameSprite('me1.png', 0, self)hero_sprite.rect.center = SCREEN_RECT.centerdef start(self):….# 繪制內容self.all_group.draw(self.main_window)
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    在start方法內更新精靈組

    def start(self):…while True:…else:print('游戲進行中...')self.all_group.update()
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    3.2.2 游戲背景連續滾動

    (1)基本構思
    游戲在運行的時候,整個游戲窗口顯示一張以星空為背景的圖像,同時背景圖像會緩緩地向下方移動,給玩家產生一種英雄飛機向上方飛行的錯覺
    背景圖像連續、不間斷地向下運動的實現,如示意圖3:

    圖3 背景示意圖



    具體實現:設置2張與屏幕大小相同的圖片,背景圖像1置于屏幕正中間,背景圖像2置于背景圖像1正上方,與背景圖像1相貼合,2張背景圖像沿屏幕向下移動,當背景圖像1移動出屏幕之外時,判斷圖像的y值是否大于或等于屏幕的高度h,如果是則背景圖像1移動到背景圖像2,此時背景圖像2置于正中間,如此循環。
    (2)代碼實現
    ?A. 初始化方法的is_alt參數:
    ??a. False表示第1個精靈,初始矩形區域應該和游戲窗口重疊
    ??b. True表示另一個精靈,初始矩形區域應該和游戲窗口的正上方
    ?B. 重寫update()
    ??a. 先調用父類方法,完成向下移動矩形區域的動作
    ??b. 然后判斷是否移出游戲窗口,如果是,將精靈設置到游戲窗口的正上方
    ?在game_items.py模塊中定義Background類繼承自GameSprite,代碼如下:

    class Background(GameSprite):def __init__(self, is_alt, *group):"""如果 is_alt 為True則在初始化時這個精靈顯示在窗口上方,False則顯示在窗口內部"""super(Background, self).__init__('background.png', 1, *group)if is_alt:self.rect.y = -self.rect.hdef update(self, *args):super(Background, self).update(*args)# 如果圖片已經滾動到底部,則立即回到窗口的最上面,供重新顯示if self.rect.y > self.rect.h:self.rect.y = -self.rect.y
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    在game.py中的Game類中調用,代碼如下

    class Game(object):"""游戲核心類"""def __init__(self):…# 創建背景精靈self.all_group.add(Background(False), Background(True))
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    3.3 指示器面板

    在飛機大戰游戲中設計一個指示器面板,負責顯示和游戲狀態以及數據相關的內容,包括:狀態圖像、游戲得分、炸彈圖像、炸彈數量、英雄命數指示,以及在游戲暫?;蚪Y束時,顯示在游戲窗口中央位置的提示信息等。

    3.3.1 指示器面板類的設計

    根據游戲功能的需要,得指示器面板的類圖如圖4所示:

    圖4 指示器面板類圖


    指示器的示意圖如圖5所示:

    圖5 指示器示意圖

    3.3.2 指示器面板類的準備

  • 指示器面板類的創建
    在game_hud.py模塊中定義 HUDPanel類,并實現初始化方法,代碼如下:
  • """游戲控制面板/提示信息模塊""" import pygame class HUDPanel(object):"""所有面板精靈的控制類"""def __init__(self, display_group):# 基本數據self.score = 0 # 游戲得分self.lives_count = 3 # 生命計數self.level = 1 # 游戲級別self.best_score = 0 # 最好成績
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
  • 設計狀態按鈕類
    按照游戲規則描述,玩家按下空格鍵暫?;蚶^續游戲,左上角狀態精靈的顯示圖像會發生相應的變化。在game_items.py中,從GameSprite中派生一個StatusButton類,專門處理狀態圖像的切換,代碼如下:
  • class StatusButton(GameSprite):"""狀態按鈕精靈類"""def __init__(self, image_names, *groups):"""image_names 接受一個元組,元組的0下標必須是暫停的圖片,1下標必須是運行的圖片"""super(StatusButton, self).__init__(image_names[0], 0, *groups)# 準備用于切換顯示的兩張圖片self.images = [pygame.image.load(self.res_path + name) for name in image_names]def switch_status(self, is_pause):"""根據是否暫停,切換要使用的圖片對象"""self.image = self.images[1 if is_pause else 0]
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
  • 創建圖像精靈
    (1)在game_hud.py中的初始化方法上方,定義幾個屬性,用于設置精靈的矩形區域和標簽精靈的字體顏色,代碼如下:
  • class HUDPanel(object):"""所有面板精靈的控制類"""margin = 10 # 精靈之間的間距white = (255, 255, 255) # 白色gray = (64, 64, 64) # 灰色
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    (2)在初始化方法的末尾增加以下代碼,創建精靈并設置顯示位置:

    def __init__(self, display_group):# 圖像精靈# 狀態精靈self.status_sprite = StatusButton(('pause_nor.png', 'resume_nor.png'), display_group)self.status_sprite.rect.top = self.marginself.status_sprite.rect.left = self.margin# 炸彈精靈self.bomb_sprite = GameSprite('bomb.png', 0, display_group)self.bomb_sprite.rect.x = self.marginself.bomb_sprite.rect.bottom = SCREEN_RECT.bottom - self.margin# 生命精靈self.lives_sprite = GameSprite('life.png', 0, display_group)self.lives_sprite.rect.right = self.lives_label.rect.left - self.marginself.lives_sprite.rect.bottom = SCREEN_RECT.bottom - self.margin
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    (3)在game.py的初始化方法中添加創建游戲控制面板的代碼:

    class Game(object):"""游戲核心類"""def __init__(self):···# 創建游戲控制面板self.hud_panel = HUDPanel(self.all_group)
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    3.3.3 使用精靈實現文本標簽

    ?文本標簽的顯示內容并不需要在每一次游戲循環執行時都發生變化,因此不需要重寫update()方法,同時,在游戲執行過程中,如果希望更改文本標簽的顯示內容,可以通過set_text方法重寫渲染文本圖像image并且更新矩形區域rect
    (1)使用自定義字體定義文本標簽精靈
    ?在game_items.py模塊中定義Label類繼承自pygame.sprite.Sprite,代碼如下:

    class Label(pygame.sprite.Sprite):"""標簽精靈類"""font_path = './res/font/MarkerFelt.ttc'def __init__(self, text, size, color, *groups):"""初始化標簽精靈的數據"""super(Label, self).__init__(*groups)# 創建字體對象self.font = pygame.font.Font(self.font_path, size)# 字體顏色self.color = color# 精靈屬性self.image = self.font.render(text, True, self.color)self.rect = self.image.get_rect()def set_text(self, text):"""更新顯示的文本內容"""self.image = self.font.render(text, True, self.color)self.rect = self.image.get_rect()
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    (2)創建指示器面板中的文本標簽精靈
    在game_hud.py中的HUDPanel類初始化方法的末尾增加代碼,創建指示器面板中的文本標簽精靈,代碼如下:

    #得分標簽self.score_label = Label('%d' % self.score, 32, self.gray, display_group)self.score_label.rect.midleft = (self.status_sprite.rect.right + self.margin,self.status_sprite.rect.centery)# 炸彈計數標簽self.bomb_label = Label('X 3', 32, self.gray, display_group)self.bomb_label.rect.midleft = (self.bomb_sprite.rect.right + self.margin,self.bomb_sprite.rect.centery)# 生命計數標簽self.lives_label = Label('X %d' % self.lives_count, 32, self.gray, display_group)self.lives_label.rect.midright = (SCREEN_RECT.right - self.margin,self.bomb_sprite.rect.centery)# 最好成績標簽self.best_label = Label('Best:%d' % self.best_score, 36, self.white)self.best_label.rect.center = SCREEN_RECT.center# 狀態標簽self.status_label = Label('Game Paused!', 48, self.white)self.status_label.rect.midbottom = (self.best_label.rect.centerx,self.best_label.rect.y - 2 * self.margin)# 提示標簽self.tip_label = Label('Press spaceBar to continue', 22, self.white)self.tip_label.rect.midtop = (self.best_label.rect.centerx,self.best_label.rect.bottom + 8 * self.margin)
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    3.3.4 游戲數據修改

    1.顯示炸彈數量
    (1)英雄出場后,會默認攜帶3顆炸彈
    (2)玩家按下按鍵字母B會引爆炸彈,引爆炸彈后,游戲窗口左下角的炸彈數量應該相應減少
    在game_hud.py中的HUDPanel類中定義show_bomb方法,使用傳入的炸彈數量參數更新炸彈計數標簽的顯示,代碼如下:

    def show_bomb(self, count):"""修改炸彈數量 X count """self.bomb_label.set_text('X %d' % count)self.bomb_label.rect.midleft = (self.bomb_sprite.rect.right + self.margin,self.bomb_sprite.rect.centery)
    • 1
    • 2
    • 3
    • 4
    • 5

    在game.py中event_handler方法中添加使用炸彈事件

    def event_handler(self):"""獲取并處理事件"""for event in pygame.event.get():···# 必須在游戲結束也沒暫停才能執行的操作if not self.is_game_over and not self.is_game_pause:if event.type == pygame.KEYDOWN and event.key == pygame.K_b: self.hud_panel.show_bomb(self.hero_sprite.bomb_count)
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
  • 顯示生命計數
    (1)英雄飛機被敵機撞毀后,游戲窗口右下角的命數計數會相應減少
    (2)英雄飛機每得到100000分會被獎勵1條命,游戲窗口右下角的命數計數也會相應增加
    在game_hud.py中的HUDPanel類中定義show_lives方法,使用生命計數屬性值更新生命計數標簽的顯示,代碼如下:
  • def show_lives(self):"""顯示最新的生命計數為 X lives_count"""self.lives_label.set_text('X %d' % self.lives_count)# 修改生命計數精靈的位置self.lives_label.rect.midright = (SCREEN_RECT.right - self.margin,self.bomb_sprite.rect.centery)# 修改生命精靈的位置self.lives_sprite.rect.right = self.lives_label.rect.x - self.margin
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
  • 增加游戲得分
    每當英雄飛機摧毀一架敵機之后,游戲得分就應該相應增加,并且摧毀不同類型的敵機增加的分值不同
    (1)生命計數 – 英雄飛機每得到100000分會被獎勵1條命
    (2)最好成績 – 如果當前游戲得分超過了歷史最好成績,應該以當前的游戲得分作為最好成績
    (3)游戲級別 – 不同的游戲級別,出場敵機的類型、數量和速度都不盡相同,而游戲得分和游戲級別的關系如下:
    ??A. 得分 < 10000(級別1)
    ??B. 得分 < 50000(級別2)
    ??C. 得分 >= 50000(級別3)
    在HUDPanel類的初始化方法上方,定義獎勵生命和游戲級別的類屬性
  • reward_score = 100000 # 獎勵分值level2_score = 10000 # 級別2分值level3_score = 50000 # 級別3分值
    • 1
    • 2
    • 3

    在HUDPanel類中定義并實現increase_score方法,代碼如下:

    def increase_score(self, enemy_score):"""增加得分,注意同時要處理增加生命、關卡升級、更新最好成績"""# 計算最新得分score = self.score + enemy_score# 判斷是否增加生命if score // self.reward_score != self.score // self.reward_score:self.lives_count += 1self.show_lives()self.score = score# 更新最好成績self.best_score = score if score > self.best_score else self.best_score# 計算最新關卡等級if score < self.level2_score:level = 1elif score < self.level3_score:level = 2else:level = 3is_upgrade = level != self.levelself.level = level# 更新得分的精靈顯示內容self.score_label.set_text('%d' % score)self.score_label.rect.midleft = (self.status_sprite.rect.right + self.margin,self.status_sprite.rect.centery)# 返回是否升級給游戲主邏輯return is_upgrade
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    3.3.5 最好成績的文件讀寫

    將歷史最好歷史成績保存到record.txt文件中
    (1)在游戲退出前,調用指示器面板的save_best_score方法,將最好成績寫入到record.txt文件中
    (2)在指示器面板的初始化方法中調用load_best_score方法,從record.txt文件中讀取最好成績

  • 保存最好成績
    (1)在HUDPanel類的初始化方法上方,定義類屬性指定保存最好成績的文件名,代碼如下:
  • record_filename = "record.txt" # 最好成績文件名
    • 1

    (2)在HUDPanel類中定義save_best_score方法:代碼如下:

    def save_best_score(self):"""保存當前最好得分到文件里"""file = open(self.record_filename, 'w')file.write('%d' % self.best_score)file.close()
    • 1
    • 2
    • 3
    • 4
    • 5

    在game.py中的start方法中添加退出游戲之前保存最好成績事件

    while True:# 判斷英雄是否已經死亡self.is_game_over = self.hud_panel.lives_count == 0# 處理事件監聽if self.event_handler():# event.handler 返回True則說明發生了退出事件# 退出游戲之前要保存最好的成績self.hud_panel.save_best_score()return
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    (3)在HUDPanel類中定義load_best_score方法:代碼如下

    def load_best_score(self):"""從文件里重新加載最好得分"""try:# 讀取文件內容file = open(self.record_filename, 'r')content = file.read()file.close()# 轉換內容為數字self.best_score = int(content)except (FileNotFoundError, ValueError):print('讀取最高得分文件,發生異常')
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在HUDPanel類中的初始化方法末尾添加加載最好成績:代碼如下

    # 從文件里加載最好成績self.load_best_score()print('初始化控制面板,當前最好得分是:', self.best_score)
    • 1
    • 2
    • 3

    3.3.6 游戲狀態變化

    (1)面板暫停:在游戲暫?;蚪Y束時,在游戲窗口中央位置顯示提示信息,而面板中的其他數據不會再發生變化
    (2)面板恢復:在游戲執行期間,不顯示中央位置的提示信息,面板中其他提示標簽的數據,會隨者游戲的推進而變化

  • 精靈組的繪制順序,先創建指示器面板,再創建英雄精靈,代碼如下:
  • # 游戲精靈# 創建背景精靈self.all_group.add(Background(False), Background(True))# 創建游戲控制面板self.hud_panel = HUDPanel(self.all_group)# 創建英雄飛機精靈hero = GameSprite('me1.png', 0, self.all_group)hero.rect.center = SCREEN_RECT.center # 顯示在屏幕中央
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
  • 暫停和恢復面板
    (1)在game_hud.py中的HUDPanel類中定義panel_pause方法,代碼如下:
  • def panel_paused(self, is_game_over, display_group):"""游戲停止,顯示提示信息。is_game_over為 True 則說明游戲結束,為 False 則說明游戲暫停"""# 判斷是否已經顯示了提示信息if display_group.has(self.best_label, self.status_label, self.tip_label):return# 根據游戲狀態生成提示文本status = 'Game Over!' if is_game_over else 'Game Paused!'tip = 'Press spaceBar to 'tip += 'play again.' if is_game_over else 'continue.'# 修改標簽精靈的文本內容self.best_label.set_text('Best:%d' % self.best_score)self.status_label.set_text(status)self.tip_label.set_text(tip)# 修正標簽精靈的位置self.best_label.rect.center = SCREEN_RECT.centerself.status_label.rect.midbottom = (self.best_label.rect.centerx,self.best_label.rect.y - 2 * self.margin)self.tip_label.rect.midtop = (self.best_label.rect.centerx,self.best_label.rect.bottom + 8 * self.margin)# 把標簽精靈添加到精靈組display_group.add(self.best_label, self.status_label, self.tip_label)# 修改狀態按鈕self.status_sprite.switch_status(True)
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    (2)在game_hud.py中的HUDPanel類中定義panel_resume方法,代碼如下:

    def panel_resume(self, display_group):"""取消停止狀態,隱藏提示信息"""display_group.remove(self.best_label, self.status_label, self.tip_label)# 修改狀態按鈕self.status_sprite.switch_status(False)
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    (3)在game.py中的start方法中調用,代碼如下;

    def start(self):···while True:···# 根據游戲轉態切換界面顯示的內容if self.is_game_over:# print('游戲已經結束,按空格鍵重新開始游戲...')self.hud_panel.panel_paused(True, self.all_group)elif self.is_game_pause:# print('游戲已經暫停,按空格鍵繼續...')self.hud_panel.panel_paused(False, self.all_group)else:# print('游戲進行中...')# self.all_group.update()self.hud_panel.panel_resume(self.all_group)
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    3.3.7 游戲結束后的重置面板

    (1)在game.py中game循環中添加判斷游戲是否結束的代碼,如下:

    while True:# 判斷英雄是否已經死亡self.is_game_over = self.hud_panel.lives_count == 0# 處理事件監聽if self.event_handler():# event.handler 返回True則說明發生了退出事件# 退出游戲之前要保存最好的成績self.hud_panel.save_best_score()return
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    (2)在game_hud.py中的HUDPanel類中定義reset_panel方法,代碼如下:

    def reset_panel(self):"""重置面板數據"""# 重置數據self.score = 0self.lives_count = 3# 重置精靈數據self.increase_score(0)self.show_bomb(3)self.show_lives()
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    (3)在game.py的reset_game重新游戲方法中調用,代碼如下:

    def reset_game(self):"""重置游戲數據"""self.is_game_over = Falseself.is_game_pause = False# 重置面板self.hud_panel.reset_panel()
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    3.4 逐幀動畫的基本實現

    3.4.1 派生飛機類

    在game_items.py模塊中從GameSprite類中派生一個Plane類,代碼如下:

    class Plane(GameSprite):"""飛機精靈類"""def __init__(self, normal_names, speed, hp, value, wav_name, hurt_name, destroy_names, *group):"""飛機類的初始化"""super(Plane, self).__init__(normal_names[0], speed, *group)# 飛機基本屬性self.hp = hp # 當前生命值self.max_hp = hp # 初始生命值self.value = value # 分值self.wav_name = wav_name # 音效名# 正常狀態圖像列表self.normal_images = [pygame.image.load(self.res_path + name) for name in normal_names]self.normal_index = 0 # 正常狀態圖像索引self.hurt_image = pygame.image.load(self.res_path + hurt_name) # 受傷圖像# 摧毀狀態圖像列表self.destroy_images = [pygame.image.load(self.res_path + name) for name in destroy_names]self.destroy_index = 0 # 摧毀狀態索引def reset_plane(self):"""重置飛機"""self.hp = self.max_hpself.normal_index = 0self.destroy_index = 0self.image = self.normal_images[0]def update(self, *args):"""更新狀態,準備下一次要顯示的內容"""# 判斷是否要更新if not args[0]:returnif self.hp == self.max_hp:# 切換要顯示的圖片self.image = self.normal_images[self.normal_index]# 計算下一次顯示的索引count = len(self.normal_images)self.normal_index = (self.normal_index + 1) % countelif self.hp > 0:# 受傷self.image = self.hurt_imageelse:# 死亡if self.destroy_index < len(self.destroy_images):self.image = self.destroy_images[self.destroy_index]self.destroy_index += 1else:self.reset_plane()
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55

    3.4.2 設置逐幀動畫頻率

    由于游戲循環的刷新幀率設置成了60幀/秒,導致玩家飛機噴射的動畫效果太快,設置計數器監聽,運行循環每執行10次才更換一次圖像,每秒更換6次圖像,從而減低逐幀動畫的頻率
    (1)在game_items.py模塊中的頂部定義一個全局變量,記錄逐幀動畫更新的間隔幀數,代碼如下:

    FRAME_INTERVAL = 10 # 逐幀動畫間隔幀數
    • 1

    (2)在game.py模塊的start方法中添加以下代碼:

    def start(self):"""開啟游戲主邏輯"""# 創建時鐘clock = pygame.time.Clock()# 動畫幀數計數器frame_count = 0while True:···else:# print('游戲進行中...')self.hud_panel.panel_resume(self.all_group) frame_count = (frame_count + 1) % FRAME_INTERVALself.all_group.update(frame_count == 0)
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    ##3.5 飛機類的設計與實現

    3.5.1 派生敵機類

  • 定義敵機類
    在game_items.py從Plane類中派生Enemy類,代碼如下:
  • class Enemy(Plane):"""敵人飛機"""def __init__(self, kind, max_speed, *groups):"""初始化敵人飛機"""self.kind = kindself.max_speed = max_speedif kind == 0:# 小敵機super(Enemy, self).__init__(['enemy1.png'], 1, 1, 1000,'enemy1_down.wav', 'enemy1.png',['enemy1_down%d.png' % i for i in range(1, 5)],*groups)elif kind == 1:# 中敵機super(Enemy, self).__init__(['enemy2.png'], 1, 6, 6000,'enemy2_down.wav', 'enemy2_hit.png',['enemy2_down%d.png' % i for i in range(1, 5)],*groups)elif kind == 2:# 大敵機super(Enemy, self).__init__(['enemy3_n1.png', 'enemy3_n2.png'], 1, 15, 15000,'enemy3_down.wav', 'enemy3_hit.png',['enemy3_down%d.png' % i for i in range(1, 7)],*groups)# 初始化飛機時,要讓飛機隨機的選擇一個位置顯示self.reset_plane()def reset_plane(self):"""重置敵人飛機"""super(Enemy, self).reset_plane()
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
  • 創建敵機精靈
    在game.py的Game類中定義創建敵機精靈的方法,代碼如下:
  • def create_enemies(self):"""創建敵機"""count = len(self.enemies_group.sprites())groups = (self.all_group, self.enemies_group)# 根據不同的關卡創建不同數量的敵機if self.hud_panel.level == 1 and count == 0:# 關卡1for i in range(16):Enemy(0, 3, *groups)elif self.hud_panel.level == 2 and count == 16:# 關卡2for enemy in self.enemies_group.sprites():enemy.max_speed = 5for i in range(8):Enemy(0, 5, *groups)for i in range(2):Enemy(1, 1, *groups)elif self.hud_panel.level == 3 and count == 26:# 關卡3for enemy in self.enemies_group.sprites():enemy.max_speed = 7 if enemy.kind == 0 else 3for i in range(8):Enemy(0, 7, *groups)for i in range(2):Enemy(1, 3, *groups)for i in range(2):Enemy(2, 1, *groups)
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    在game.py模塊的初始化方法初始化敵機,代碼如下:

    # 初始化敵機self.create_enemies()
    • 1
    • 2
  • 設置敵機精靈隨機位置和敵機飛行
    在屏幕上方再取一個屏幕的高度,敵機隨機位置的y值為 屏幕高度 – 敵機高度的范圍內,
    x值為 屏幕寬度 – 敵機寬度的范圍,這個范圍內隨機位置向屏幕下方移動
    即:
    水平方向取一個0~(SCREEN_RECT.w – self.rect.w)之間的隨機數,設置給敵機矩形區域的x
    垂直方向取一個0~(SCREEN_RECT.h – self.rect.h)之間的隨機數,再減去游戲窗口的高度,然后設置給敵機矩形區域的y
    (1)對Enemy類的reset_plane方法做調整,代碼如下:
  • def reset_plane(self):"""重置敵人飛機"""super(Enemy, self).reset_plane()# 敵人飛機的數據重置x = random.randint(0, SCREEN_RECT.w - self.rect.w)y = random.randint(0, SCREEN_RECT.h - self.rect.h) - SCREEN_RECT.hself.rect.topleft = (x, y)# 重置飛機的飛行速度self.speed = random.randint(1, self.max_speed)
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    (2)修改Enemy類的update方法,代碼如下:

    def update(self, *args):"""更新飛機的位置信息"""super(Enemy, self).update(*args)# 根據血量判斷是否還要移動if self.hp > 0:self.rect.y += self.speed# 如果移動后已經到達屏幕外,則需要重置飛機if self.rect.y >= SCREEN_RECT.h:self.reset_plane()
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    3.5.2 派生英雄飛機類

  • 創建英雄飛機類
    (1)在game_items.py模塊的頂部定義全局常量記錄英雄默認炸彈數量和英雄飛機默認位置
  • HERO_BOMB_COUNT = 3 # 英雄默認炸彈數量 HERO_DEFAULT_MID_BOTTOM = (SCREEN_RECT.centerx,SCREEN_RECT.bottom - 90) # 英雄默認初始位置
    • 1
    • 2
    • 3

    (2)在game_items.py模塊中從Plane類派生一個Hero類,代碼如下:

    class Hero(Plane):"""英雄飛機"""def __init__(self, *groups):"""初始化英雄飛機"""self.is_power = False # 是否無敵self.bomb_count = HERO_BOMB_COUNT # 炸彈數量self.bullets_kind = 0 # 子彈類型self.bullets_group = pygame.sprite.Group() # 子彈精靈組super(Hero, self).__init__(('me1.png', 'me2.png'),5, 1, 0, 'me_down.wav', 'me1.png',['me_destroy_%d.png' % x for x in range(1, 5)],*groups)self.rect.midbottom = HERO_DEFAULT_MID_BOTTOM # 創建好飛機之后要設置飛機位置為屏幕底部中間
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    (3)在game.py模塊中的初始化方法修改創建英雄飛機精靈和修改顯示炸彈數量

    # 創建英雄飛機精靈self.hero_sprite = Hero(self.all_group)self.hud_panel.show_bomb(self.hero_sprite.bomb_count)
    • 1
    • 2
    • 3
  • 移動英雄飛機
    按照pygame坐標系的設定 ---- x軸沿水平方向向右,逐漸增加。右鍵 – 左鍵的值作為英雄水平移動的計數,再用基數乘以英雄飛機的速度,得到飛機在水平方向移動的距離,如表9所示:
  • 表9 水平移動基數表

    按下右鍵 按下左鍵 右鍵-左鍵 移動方向
    0 0 0 不移動
    1 0 1 向右
    0 -1 -1 向左
    1 1 0 不移動

    同理,得垂直移動基數表如表10所示

    表10 垂直移動基數表

    按下上鍵 按下下鍵 上鍵-下鍵 移動方向
    0 0 0 不移動
    1 0 1 向上
    0 -1 -1 向下
    1 1 0 不移動

    (1)在game.py模塊中的start方法中修改代碼:

    ···while True:···else:# print('游戲進行中...')self.hud_panel.panel_resume(self.all_group)# 處理長按事件keys = pygame.key.get_pressed() # get_pressed()得到一個元組,每一個按鍵在元組里都有一個下標,對應下標值為1則說明按鍵被按下move_hor = keys[pygame.K_RIGHT] - keys[pygame.K_LEFT] # 水平的移動基數move_ver = keys[pygame.K_DOWN] - keys[pygame.K_UP] # 垂直的移動基數# 檢測碰撞self.check_collide()frame_count = (frame_count + 1) % FRAME_INTERVALself.all_group.update(frame_count == 0, move_hor, move_ver)
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    (2)在game_items.py模塊中英雄飛機類增加update方法,代碼如下:

    def update(self, *args):"""*args的0號下標說明是否要更新下一幀動畫,1號說明玩家飛機水平方向移動基數,2號說明玩家飛機垂直方向移動基數"""super(Hero, self).update(*args)if len(args) != 3 or self.hp <= 0:return# 屏幕邊緣的位置修正self.rect.x += args[1] * self.speedself.rect.x = 0 if self.rect.x < 0 else self.rect.xif self.rect.right > SCREEN_RECT.right:self.rect.right = SCREEN_RECT.rightself.rect.y += args[2] * self.speedself.rect.y = 0 if self.rect.y < 0 else self.rect.yif self.rect.bottom > SCREEN_RECT.bottom:self.rect.bottom = SCREEN_RECT.bottom
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
  • 炸毀游戲窗口內部的敵機
    (1)在game_items.py模塊的Hero類中定義blowup方法,將出現在游戲窗口內的敵機全部引爆,同時計算并返回得分
  • def blowup(self, enemies_group):"""炸毀所有敵機,并返回得到的總分值"""# 判斷是否能夠發起引爆if self.bomb_count <= 0 or self.hp <= 0:return 0# 引爆所有敵機,累計得分self.bomb_count -= 1score = 0count = 0for enemy in enemies_group.sprites():if enemy.rect.bottom > 0:score += enemy.valueenemy.hp = 0count += 1print('炸毀了%d架敵機,獲取得分%d' % (count, score))return score
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    (2)在event_handler方法中,監聽到玩家按下字母B時,讓英雄飛機調用blowup方法,并使用返回的分數
    ??A. 更新游戲得分
    ??B. 更新炸彈數量顯示
    ??C. 判斷是否升級,如果是,調用create_enemies方法創建更多敵機

    def event_handler(self):"""獲取并處理事件"""for event in pygame.event.get():···# 必須在游戲結束也沒暫停才能執行的操作if not self.is_game_over and not self.is_game_pause:if event.type == pygame.KEYDOWN and event.key == pygame.K_b:# 釋放一顆炸彈,并修改炸彈數量score = self.hero_sprite.blowup(self.enemies_group)self.hud_panel.show_bomb(self.hero_sprite.bomb_count)if self.hud_panel.increase_score(score):self.create_enemies()
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    3.6 碰撞檢測

    3.6.1 創建碰撞檢測

    (1)在game.py中創建check_collide方法,代碼如下:

    def check_collide(self):"""檢查是否有碰撞"""if not self.hero_sprite.is_power:collide_enemies = pygame.sprite.spritecollide(self.hero_sprite, self.enemies_group,False, pygame.sprite.collide_mask)
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    (2)在game_items.py模塊中的GameSprite類的初始化方法中生成描邊,代碼如下:

    # 生成遮罩屬性,提高碰撞檢測的執行效率self.mask = pygame.mask.from_surface(self.image)
    • 1
    • 2

    (3)在game.py模塊中的循環調用碰撞方法,代碼如下:

    def start(self):···while True:···else:# print('游戲進行中...')self.hud_panel.panel_resume(self.all_group) # 檢測碰撞self.check_collide()
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    3.6.2 敵機撞毀英雄飛機

    英雄飛機被撞毀,播放被撞毀動畫,動畫播放完成后,游戲窗口右下角的英雄命數相應減少
    (1)如果還有剩余命數,那么英雄飛機會在犧牲的位置出現新的英雄飛機進行戰斗,期間會有3秒的無敵時間
    (2)如果沒有剩余命數,則游戲結束
    撞毀英雄飛機的敵機,同樣要播放被撞毀動畫
    (1)動畫播放過程中,敵機在屏幕上位置不會移動
    (2)動畫播放完成后,敵機會被設置回初始狀態,再次從游戲窗口上方飛出加入戰斗

  • 英雄飛機被撞毀
    (1)修改check_collide方法中的代碼:
  • def check_collide(self):"""檢查是否有碰撞"""if not self.hero_sprite.is_power:collide_enemies = pygame.sprite.spritecollide(self.hero_sprite, self.enemies_group,False, pygame.sprite.collide_mask)# 過濾掉已經被摧毀的敵機collide_enemies = list(filter(lambda x: x.hp > 0, collide_enemies))# 撞毀玩家飛機if collide_enemies:self.hero_sprite.hp = 0# 撞毀敵人飛機for enemy in collide_enemies:enemy.hp = 0
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
  • 發布自定義事件重置英雄飛機
    (1)在game_items.py模塊的頂部定義全局常量記錄英雄犧牲事件代號,代碼如下:
  • HERO_DEAD_EVENT = pygame.USEREVENT # 英雄犧牲事件 HERO_POWER_OFF_EVENT = pygame.USEREVENT + 1 # 取消英雄無敵事件
    • 1
    • 2

    (2)重新Hero類中的reset_plane方法,代碼如下:

    def reset_plane(self):"""重置玩家飛機數據"""super(Hero, self).reset_plane()self.is_power = Trueself.bomb_count = HERO_BOMB_COUNTself.bullets_kind = 0# 發布事件,讓游戲主邏輯更新界面pygame.event.post(pygame.event.Event(HERO_DEAD_EVENT))# 發布定時事件pygame.time.set_timer(HERO_POWER_OFF_EVENT, 3000)
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    (3)在game.py模塊的event_handler方法中,當游戲未結束也沒暫停時判斷事件,代碼如下:

    for event in pygame.event.get():···# 必須在游戲未結束也沒暫停才能執行的操作if not self.is_game_over and not self.is_game_pause: ··· elif event.type == HERO_DEAD_EVENT:# 玩家飛機死亡self.hud_panel.lives_count -= 1self.hud_panel.show_lives()self.hud_panel.show_bomb(self.hero_sprite.bomb_count)elif event.type == HERO_POWER_OFF_EVENT:self.hero_sprite.is_power = Falsepygame.time.set_timer(HERO_POWER_OFF_EVENT, 0) # 設置定時器延時為0,可以取消定時器
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    玩家飛機被摧毀,重置英雄飛機位置,在game.py模塊的reset_game方法中,代碼如下:

    def reset_game(self):# 重置英雄飛機位置self.hero_sprite.rect.midbottom = HERO_DEFAULT_MID_BOTTOM
    • 1
    • 2
    • 3

    3.6.3 英雄飛機發射子彈

    (1)英雄出場后,每隔0.2秒,會自動連續發射3顆子彈,其中:
    ??A. 子彈會從英雄飛機頭部的正上方發射,沿垂直方向向游戲窗口的上方飛行
    ??B. 如果子彈飛出了游戲窗口,中途沒有擊中任何一架敵機,子彈會被銷毀
    ??C. 如果子彈飛行途中,擊中了敵機,會對敵機造成傷害,敵機的生命值減去子彈的傷害度
    (2)如果英雄飛機拾取到子彈增強道具,發射的子彈會改為雙排,并且持續的時長為20秒

  • 設計子彈類
    在game_items.py模塊從GameSprite類派生一個Bulle類,代碼如下:
  • class Bullet(GameSprite):"""子彈類"""def __init__(self, kind, *group):"""初始化子彈數據"""image_name = 'bullet1.png' if kind == 0 else 'bullet2.png'super(Bullet, self).__init__(image_name, -12, *group)self.damage = 1 # 殺傷力def update(self, *args):"""更新子彈的數據"""super(Bullet, self).update(*args)# 飛出屏幕之外則需要銷毀子彈if self.rect.bottom < 0:self.kill()
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
  • 英雄飛機發射子彈
    在Hero類中定義fire方法,并利用定時器事件,實現英雄發射子彈的功能
    (1)在game_items.py模塊的頂部定義英雄飛機發射子彈事件的全局常量,代碼如下:
  • HERO_FIRE_EVENT = pygame.USEREVENT + 2 # 英雄發射子彈事件
    • 1

    ? ?(2)在Hero類的初始化方法中的末尾,設置英雄發射子彈的定時器事件,代碼如下:

    def __init__(self, *groups):pygame.time.set_timer(HERO_FIRE_EVENT, 200) # 創建玩家飛機之后每0.2秒激活一次發射子彈事件
    • 1
    • 2

    ? ?(3)在Hero類中定義fire方法并根據bullet_kind屬性發射子彈,子彈之間間距為15

    def fire(self, display_group):""""英雄飛機發射一輪新的子彈"""# 準備子彈要顯示到的組groups = (display_group, self.bullets_group)# 創建新子彈并定位for i in range(3):bullet1 = Bullet(self.bullets_kind, *groups)y = self.rect.y - i * 15# 判斷子彈類型if self.bullets_kind == 0:bullet1.rect.midbottom = (self.rect.centerx, y)else:bullet1.rect.midbottom = (self.rect.centerx - 20, y)# 再創建一顆子彈bullet2 = Bullet(self.bullets_kind, *groups)bullet2.rect.midbottom = (self.rect.centerx + 20, y)
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    (4)在game.py模塊的event_handler方法中監聽到英雄飛機發射子彈定時器事件后,讓英雄飛機調用發射子彈方法

    # 必須在游戲未結束也沒暫停才能執行的操作 if not self.is_game_over and not self.is_game_pause: ··· elif event.type == HERO_FIRE_EVENT:# 英雄飛機發射子彈定時事件self.hero_sprite.fire(self.all_group)
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
  • 子彈擊中敵機
    在Game類中check_collide方法中實現子彈擊中并摧毀敵機的功能
    子彈碰撞敵機的流程如圖6所示:
  • 圖6 子彈碰撞敵機流程圖
    (1)在Game類check_collide方法的末尾增加子彈擊中敵機的處理,代碼如下:

    # 子彈和敵機的碰撞分析hit_enemies=pygame.sprite.groupcollide(self.enemies_group, self.hero_sprite.bullets_group, False, False, pygame.sprite.collide_mask)for enemy in hit_enemies:# 已經被摧毀的飛機不需要再處理if enemy.hp <= 0:continuefor bullet in hit_enemies[enemy]:bullet.kill() # 銷毀子彈enemy.hp -= bullet.damage # 修改敵機生命值if enemy.hp > 0:continue # 如果敵機沒有被摧毀,則繼續遍歷下一個子彈# 當前這一顆子彈已經把敵機摧毀if self.hud_panel.increase_score(enemy.value):self.create_enemies()# 這個飛機已經被摧毀,不需要再遍歷下一顆子彈了break
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    (2)游戲的重置,銷毀敵機和子彈,在Game類的reset_game方法中末尾重置,代碼如下:

    # 銷毀所有的敵人飛機for enemy in self.enemies_group:enemy.kill()# 銷毀所有子彈for bullet in self.hero_sprite.bullets_group:bullet.kill()# 重新創建飛機self.create_enemies()
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    3.6.4 英雄飛機拾取道具

    游戲過程中,每隔30秒會從游戲窗口上方隨機位置向下飛出游戲道具

  • 創建游戲道具
    在game_items.py中定義從GameSprite類繼承的Supply類,代碼如下:
  • class Supply(GameSprite):"""道具精靈"""def __init__(self, kind, *group):"""初始化道具屬性"""image_name = 'bomb_supply.png' if kind == 0 else 'bullet_supply.png'super(Supply, self).__init__(image_name, 5, *group)self.kind = kind # 道具類型self.wav_name = 'get_bomb.wav' if kind == 0 else 'get_bullet.wav' # 道具的音效self.rect.bottom = SCREEN_RECT.h # 道具的初始位置def update(self, *args):"""修改道具位置"""if self.rect.y > SCREEN_RECT.h: # 如果已經移動到屏幕之外則不需要繼續移動returnsuper(Supply, self).update(*args)def throw_supply(self):"""投放道具"""self.rect.bottom = 0 # 移動道具到窗口頂部self.rect.x = random.randint(0, SCREEN_RECT.w - self.rect.w)
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
  • 定時投放道具
    (1)在game_items.py模塊的頂部定義全局常量記錄投放道具的定時器事件,代碼如下:
  • THROW_SUPPLY_EVENT = pygame.USEREVENT + 3 # 投放道具事件
    • 1

    (2)在game.py的Game類中實現create_supplies方法

    def create_supply(self):"""初始化兩個道具,并開啟投放道具的定時器"""Supply(0, self.all_group, self.supplies_group)Supply(1, self.all_group, self.supplies_group)pygame.time.set_timer(THROW_SUPPLY_EVENT, 30000)
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在初始化方法的末尾調用

    # 初始化道具 self.create_supply()
    • 1
    • 2

    (3)在事件監聽中監聽到投放道具定時器事件后,讓隨機道具調用投放道具方法

    elif event.type == THROW_SUPPLY_EVENT:# 隨機投放一個道具supply = random.choice(self.supplies_group.sprites())supply.throw_supply()
    • 1
    • 2
    • 3
    • 4
  • 英雄飛機拾取道具
    在Game類的check_collide方法擴展實現英雄飛機拾取道具的功能
    (1)在game_items.py模塊的頂部定義全局常量記錄關閉子彈增強的定時器事件,代碼如下:
  • BULLET_ENHANCED_OFF_EVENT = pygame.USEREVENT + 4 # 關閉子彈增強事件
    • 1

    (2)在Game類check_collide方法的末尾增加英雄飛機拾取道具的處理,代碼如下:

    # 檢查英雄飛機和道具的碰撞supplies = pygame.sprite.spritecollide(self.hero_sprite, self.supplies_group,False, pygame.sprite.collide_mask)if supplies:supply = supplies[0]self.player.play_sound(supply.wav_name) # 根據道具類型播放撿道具的音效# 根據道具類型產生不同的行為if supply.kind == 0:self.hero_sprite.bomb_count += 1self.hud_panel.show_bomb(self.hero_sprite.bomb_count)else:self.hero_sprite.bullets_kind = 1 # 修改英雄子彈為雙排子彈pygame.time.set_timer(BULLET_ENHANCED_OFF_EVENT, 20000) # 20秒之后重新變為單排子彈# 移動道具到屏幕之下supply.rect.y = SCREEN_RECT.h
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    (3)在event_handler方法中監聽到關閉子彈增強的定時器事件

    elif event.type == BULLET_ENHANCED_OFF_EVENT:# 玩家使用雙排子彈的時間已經結束,需要恢復為單排子彈self.hero_sprite.bullets_kind = 0 # 恢復為單排子彈pygame.time.set_timer(BULLET_ENHANCED_OFF_EVENT, 0) # 取消定時
    • 1
    • 2
    • 3
    • 4

    3.7 音樂與音效

    3.7.1 加載和播放背景音樂

    (1)在game_music模塊中定義MusicPlayer類,代碼如下:

    """游戲音樂控制模塊""" import pygame import osclass MusicPlayer(object):"""音樂播放類"""res_path = './res/sound/'def __init__(self, music_file):"""初始化音樂播放器"""# 加載背景音樂pygame.mixer.music.load(self.res_path + music_file)pygame.mixer.music.set_volume(0.1)# 初始化音效的字典self.sound_dict = {}files = os.listdir(self.res_path)for file in files:if file == music_file: # 背景音樂不需要處理continuesound = pygame.mixer.Sound(self.res_path + file)self.sound_dict[file] = sound@staticmethoddef play_music():"""播放背景音樂"""pygame.mixer.music.play(-1)@staticmethoddef pause_music(is_pause):"""根據暫停狀態決定是否要播放背景音樂"""if is_pause:pygame.mixer.music.pause()else:pygame.mixer.music.unpause()def play_sound(self, wav_name):"""根據文件名,播放音效"""self.sound_dict[wav_name].play()
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43

    (2)在Game類初始化方法中調用音樂類的背景音樂播放方法,代碼如下:

    # 音樂播放器self.player = MusicPlayer('game_music.ogg')self.player.play_music()
    • 1
    • 2
    • 3

    (3)在Game類的event_handler方法中切換背景音樂狀態

    else:# 游戲還沒結束,切換暫停狀態self.is_game_pause = not self.is_game_pauseself.player.pause_music(self.is_game_pause) # 切換背景音樂狀態
    • 1
    • 2
    • 3
    • 4

    3.7.1 加載和播放音效

    (1)發射子彈
    在event_handler方法中找到監聽發射子彈事件的分支,代碼如下:

    elif event.type == HERO_FIRE_EVENT:# 英雄飛機發射子彈定時事件self.player.play_sound('bullet.wav')self.hero_sprite.fire(self.all_group)
    • 1
    • 2
    • 3
    • 4

    (2)引爆炸彈
    在event_handler方法中找到監聽玩家按下字母B引爆炸彈的分支,代碼如下:

    # 必須在游戲未結束也沒暫停才能執行的操作if not self.is_game_over and not self.is_game_pause:if event.type == pygame.KEYDOWN and event.key == pygame.K_b:# 釋放一顆炸彈,并修改炸彈數量if self.hero_sprite.hp > 0 and self.hero_sprite.bomb_count > 0:self.player.play_sound('use_bomb.wav')
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    (3)投放和拾取道具
    在event_handler方法中找到監聽投放道具事件的分支,代碼如下:

    elif event.type == THROW_SUPPLY_EVENT:# 隨機投放一個道具self.player.play_sound('supply.wav')supply = random.choice(self.supplies_group.sprites())supply.throw_supply()
    • 1
    • 2
    • 3
    • 4
    • 5

    (4)敵機爆炸
    在check_collide方法中,找到檢測敵機被子彈擊中部分的代碼,調整代碼如下:

    # 當前這一顆子彈已經把敵機摧毀if self.hud_panel.increase_score(enemy.value):self.player.play_sound('upgrade.wav')self.create_enemies()
    • 1
    • 2
    • 3
    • 4

    (5)英雄飛機爆炸
    在check_collide方法中,找到檢測英雄飛機和敵機碰撞部分的代碼,調整代碼如下:

    # 撞毀玩家飛機if collide_enemies:self.player.play_sound(self.hero_sprite.wav_name)self.hero_sprite.hp = 0
    • 1
    • 2
    • 3
    • 4

    4.實驗結果

    (1)游戲開始界面,如圖7所示

    圖7 游戲界面

    (2)游戲結束界面,如圖8所示:

    圖8 游戲結束

    (3)獲取道具,子彈增強,如圖9所示:

    圖9 子彈增強

    4)釋放炸彈,炸毀屏幕所有敵機,如圖10所示

    圖10 炸彈炸毀敵機

    (5)掉落道具和生命次數的增加,如圖11所示:

    圖11 掉落道具和生命次數增加

    5.總結和展望

    (1)飛機大戰游戲的完成參考了網上的視頻和資料,在學習過程中,明顯暴露了自己在學習上的不足,對python的學習不夠深入,對pygame的學習也僅僅是皮毛。
    (2)飛機大戰的功能簡單,希望在以后深入學習的過程中繼續完善游戲,給游戲增添一些更好玩的功能,例如敵機釋放子彈、獲取道具增加玩家飛機等功能。
    (3)在學習的過程中,不但認識到python語言的強大和簡潔,而且學習到pygame面向對象設計的思想,對以后的學習很有幫助。

    總結

    以上是生活随笔為你收集整理的基于pygame实现的飞机大战游戏的全部內容,希望文章能夠幫你解決所遇到的問題。

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

    波多野结衣一区二区三区av免费 | 99久久精品日本一区二区免费 | 国产精品多人p群无码 | 午夜精品久久久内射近拍高清 | 无码国产色欲xxxxx视频 | 亚洲性无码av中文字幕 | 永久黄网站色视频免费直播 | 久久久www成人免费毛片 | 色一情一乱一伦一视频免费看 | 人人爽人人爽人人片av亚洲 | 国产麻豆精品精东影业av网站 | 国产成人无码av在线影院 | 日本饥渴人妻欲求不满 | 国产亚洲欧美在线专区 | 久久久av男人的天堂 | 国产精品人人妻人人爽 | 亚洲小说春色综合另类 | 国产乡下妇女做爰 | 全黄性性激高免费视频 | 日韩人妻无码一区二区三区久久99 | 国产精品免费大片 | 97夜夜澡人人双人人人喊 | 18禁黄网站男男禁片免费观看 | 国产婷婷色一区二区三区在线 | 日本xxxx色视频在线观看免费 | 无码国产色欲xxxxx视频 | 成人女人看片免费视频放人 | 婷婷色婷婷开心五月四房播播 | 国产亚洲精品久久久闺蜜 | 俺去俺来也在线www色官网 | 天天做天天爱天天爽综合网 | 亚洲欧美日韩综合久久久 | 亚洲无人区午夜福利码高清完整版 | 国产乱码精品一品二品 | 日本丰满熟妇videos | 久久久久成人精品免费播放动漫 | 日本精品高清一区二区 | 中文无码精品a∨在线观看不卡 | 日韩欧美中文字幕公布 | 亚洲 a v无 码免 费 成 人 a v | 久久精品国产一区二区三区肥胖 | 亚洲成在人网站无码天堂 | 四虎影视成人永久免费观看视频 | 国内丰满熟女出轨videos | 无码人妻出轨黑人中文字幕 | 久久久中文字幕日本无吗 | 最新国产麻豆aⅴ精品无码 | 久久久av男人的天堂 | 久久国产自偷自偷免费一区调 | 久久久精品456亚洲影院 | 在线观看欧美一区二区三区 | 国内少妇偷人精品视频免费 | 国内精品人妻无码久久久影院 | 久久久久久亚洲精品a片成人 | 蜜桃臀无码内射一区二区三区 | 少妇人妻av毛片在线看 | 女人和拘做爰正片视频 | a片在线免费观看 | 7777奇米四色成人眼影 | 色 综合 欧美 亚洲 国产 | 国产又粗又硬又大爽黄老大爷视 | 国产亚洲欧美在线专区 | 亚洲人成影院在线无码按摩店 | 三上悠亚人妻中文字幕在线 | 国内揄拍国内精品少妇国语 | 亚洲a无码综合a国产av中文 | 国产在线无码精品电影网 | 欧美freesex黑人又粗又大 | 欧美人与牲动交xxxx | 亚洲熟悉妇女xxx妇女av | 欧美 日韩 人妻 高清 中文 | 无套内射视频囯产 | 欧美丰满熟妇xxxx性ppx人交 | 日韩少妇白浆无码系列 | 亚洲成熟女人毛毛耸耸多 | 国产卡一卡二卡三 | 极品尤物被啪到呻吟喷水 | 牲交欧美兽交欧美 | 性生交大片免费看l | 人妻互换免费中文字幕 | av人摸人人人澡人人超碰下载 | 牲欲强的熟妇农村老妇女 | 亚洲 激情 小说 另类 欧美 | 国产av久久久久精东av | 一个人免费观看的www视频 | 日日摸天天摸爽爽狠狠97 | 377p欧洲日本亚洲大胆 | 久久www免费人成人片 | 精品国产青草久久久久福利 | 久久成人a毛片免费观看网站 | 亚洲 高清 成人 动漫 | 精品日本一区二区三区在线观看 | 97久久精品无码一区二区 | 亚洲国产精品一区二区美利坚 | 中文字幕人成乱码熟女app | 中文字幕无码日韩欧毛 | 国产av久久久久精东av | 国内少妇偷人精品视频免费 | 亚洲a无码综合a国产av中文 | 丝袜足控一区二区三区 | 全黄性性激高免费视频 | 日本护士xxxxhd少妇 | 风流少妇按摩来高潮 | 无人区乱码一区二区三区 | 未满小14洗澡无码视频网站 | 大肉大捧一进一出视频出来呀 | 日本精品少妇一区二区三区 | 国产亚av手机在线观看 | 欧美日韩色另类综合 | 日本熟妇大屁股人妻 | 色一情一乱一伦 | 欧美国产日韩亚洲中文 | 国产一区二区不卡老阿姨 | 亚洲精品午夜无码电影网 | 亚洲国产精品美女久久久久 | 国产成人精品一区二区在线小狼 | 久久久久亚洲精品男人的天堂 | 免费无码的av片在线观看 | 欧美高清在线精品一区 | 色欲人妻aaaaaaa无码 | 亚洲精品一区二区三区婷婷月 | 玩弄人妻少妇500系列视频 | 九九久久精品国产免费看小说 | 欧美日韩在线亚洲综合国产人 | 97久久精品无码一区二区 | 人人超人人超碰超国产 | 成人性做爰aaa片免费看不忠 | 国产农村妇女高潮大叫 | 久久久久免费精品国产 | 1000部夫妻午夜免费 | 成人无码精品1区2区3区免费看 | 精品国产av色一区二区深夜久久 | 午夜精品一区二区三区的区别 | a在线观看免费网站大全 | 国产午夜福利100集发布 | 两性色午夜免费视频 | 国产乱码精品一品二品 | 午夜不卡av免费 一本久久a久久精品vr综合 | 精品厕所偷拍各类美女tp嘘嘘 | 免费无码午夜福利片69 | 国产精品美女久久久 | 亚洲精品欧美二区三区中文字幕 | 色婷婷综合中文久久一本 | 九月婷婷人人澡人人添人人爽 | 人妻少妇精品无码专区二区 | 成人免费视频在线观看 | 国产亚洲精品久久久闺蜜 | 色综合久久久久综合一本到桃花网 | 欧美性猛交内射兽交老熟妇 | 特大黑人娇小亚洲女 | 男人的天堂av网站 | 国产一区二区三区四区五区加勒比 | 国产 浪潮av性色四虎 | 日韩av无码中文无码电影 | 国产日产欧产精品精品app | 亚洲综合无码久久精品综合 | 国产人妻精品一区二区三区不卡 | 牛和人交xxxx欧美 | 秋霞特色aa大片 | 99精品视频在线观看免费 | 日日天干夜夜狠狠爱 | 日日夜夜撸啊撸 | 国产精品嫩草久久久久 | 红桃av一区二区三区在线无码av | 亚洲成在人网站无码天堂 | 噜噜噜亚洲色成人网站 | 婷婷色婷婷开心五月四房播播 | 人妻中文无码久热丝袜 | 国产真人无遮挡作爱免费视频 | 欧美丰满熟妇xxxx | 欧美丰满熟妇xxxx性ppx人交 | 免费国产黄网站在线观看 | 夜夜高潮次次欢爽av女 | 久久久久免费精品国产 | 日产精品高潮呻吟av久久 | 成年美女黄网站色大免费视频 | 亚洲中文无码av永久不收费 | 性色欲情网站iwww九文堂 | 精品久久久无码人妻字幂 | 亚洲欧美综合区丁香五月小说 | 亚洲熟妇色xxxxx亚洲 | 久久国内精品自在自线 | 色五月丁香五月综合五月 | 天天综合网天天综合色 | 成人欧美一区二区三区黑人免费 | 午夜丰满少妇性开放视频 | 人妻插b视频一区二区三区 | 人妻体内射精一区二区三四 | 中文精品无码中文字幕无码专区 | 国产一区二区三区影院 | 中文字幕无码乱人伦 | 人人妻在人人 | 无套内射视频囯产 | 欧美成人免费全部网站 | 日韩av无码一区二区三区 | 亚洲一区av无码专区在线观看 | av香港经典三级级 在线 | 亚洲a无码综合a国产av中文 | 欧美zoozzooz性欧美 | 亚洲欧美国产精品久久 | 中文字幕无码av激情不卡 | 少妇性荡欲午夜性开放视频剧场 | 女人被男人躁得好爽免费视频 | av在线亚洲欧洲日产一区二区 | 国色天香社区在线视频 | 免费播放一区二区三区 | 日韩av无码中文无码电影 | 久久综合网欧美色妞网 | 乱人伦人妻中文字幕无码久久网 | 丝袜足控一区二区三区 | 亚洲国产日韩a在线播放 | 亚洲精品中文字幕乱码 | 欧美xxxxx精品 | 久久综合久久自在自线精品自 | 免费无码一区二区三区蜜桃大 | 日日碰狠狠丁香久燥 | 波多野结衣aⅴ在线 | 国产香蕉尹人视频在线 | 国产在线精品一区二区三区直播 | 亚洲 日韩 欧美 成人 在线观看 | 性欧美牲交在线视频 | 乱人伦人妻中文字幕无码久久网 | 欧美 日韩 人妻 高清 中文 | 国产农村妇女高潮大叫 | 高潮喷水的毛片 | 国产suv精品一区二区五 | 亚洲成a人一区二区三区 | 国产欧美亚洲精品a | 97精品国产97久久久久久免费 | 麻豆精品国产精华精华液好用吗 | 无码精品人妻一区二区三区av | 国产绳艺sm调教室论坛 | 国产亚洲人成a在线v网站 | 中文字幕人妻丝袜二区 | 亚洲国产精华液网站w | 俺去俺来也在线www色官网 | 国产午夜无码精品免费看 | 亚洲午夜无码久久 | 欧美猛少妇色xxxxx | 粉嫩少妇内射浓精videos | av在线亚洲欧洲日产一区二区 | 国产成人无码专区 | 精品午夜福利在线观看 | 国产婷婷色一区二区三区在线 | 熟女少妇人妻中文字幕 | 福利一区二区三区视频在线观看 | 夫妻免费无码v看片 | 欧美一区二区三区视频在线观看 | 377p欧洲日本亚洲大胆 | 最新国产麻豆aⅴ精品无码 | 学生妹亚洲一区二区 | 亚洲人成影院在线无码按摩店 | 精品久久久中文字幕人妻 | 成人无码视频免费播放 | 亚洲熟妇色xxxxx欧美老妇 | 思思久久99热只有频精品66 | 国产极品美女高潮无套在线观看 | 天堂亚洲免费视频 | 人妻尝试又大又粗久久 | 正在播放老肥熟妇露脸 | 国产成人无码一二三区视频 | 99麻豆久久久国产精品免费 | 丰满人妻被黑人猛烈进入 | 欧洲美熟女乱又伦 | 男女猛烈xx00免费视频试看 | 日韩精品无码免费一区二区三区 | 青青草原综合久久大伊人精品 | 7777奇米四色成人眼影 | 一本久道高清无码视频 | 精品人妻中文字幕有码在线 | 国产午夜手机精彩视频 | 欧美老熟妇乱xxxxx | 自拍偷自拍亚洲精品10p | 日韩精品无码免费一区二区三区 | 99麻豆久久久国产精品免费 | 日韩精品乱码av一区二区 | 久久97精品久久久久久久不卡 | 亚洲精品综合一区二区三区在线 | 日本乱人伦片中文三区 | 亚洲精品中文字幕 | 中文字幕人妻无码一夲道 | 国产精华av午夜在线观看 | 激情五月综合色婷婷一区二区 | 给我免费的视频在线观看 | 99久久精品无码一区二区毛片 | 久在线观看福利视频 | 久久久国产精品无码免费专区 | 国产综合色产在线精品 | 欧美xxxx黑人又粗又长 | 婷婷五月综合缴情在线视频 | 国产特级毛片aaaaaaa高清 | 中文字幕中文有码在线 | 日日摸日日碰夜夜爽av | 欧美自拍另类欧美综合图片区 | 成人一在线视频日韩国产 | 台湾无码一区二区 | 久久国内精品自在自线 | 国产在线aaa片一区二区99 | 精品成在人线av无码免费看 | 国产特级毛片aaaaaaa高清 | 国产亚洲精品久久久久久久久动漫 | 精品偷拍一区二区三区在线看 | 大地资源网第二页免费观看 | 人妻夜夜爽天天爽三区 | 欧美 日韩 人妻 高清 中文 | 无码人妻久久一区二区三区不卡 | 久久亚洲日韩精品一区二区三区 | 久久国产精品_国产精品 | 亚洲成色在线综合网站 | 国产无遮挡吃胸膜奶免费看 | 久久亚洲精品中文字幕无男同 | 麻豆精产国品 | 亚洲欧洲中文日韩av乱码 | 天天躁夜夜躁狠狠是什么心态 | 人妻少妇被猛烈进入中文字幕 | 亚洲乱亚洲乱妇50p | 国产精品亚洲专区无码不卡 | 国产精品美女久久久久av爽李琼 | 黄网在线观看免费网站 | 亚洲gv猛男gv无码男同 | 无码人妻精品一区二区三区下载 | 色欲av亚洲一区无码少妇 | 亚洲精品中文字幕 | 国产精品无码一区二区三区不卡 | 2020久久香蕉国产线看观看 | 国产精品内射视频免费 | 性开放的女人aaa片 | 国产亚洲精品久久久久久久 | 久久国产精品精品国产色婷婷 | 成人性做爰aaa片免费看 | 亚洲午夜久久久影院 | 秋霞成人午夜鲁丝一区二区三区 | 狠狠色丁香久久婷婷综合五月 | 国产成人综合色在线观看网站 | 免费播放一区二区三区 | 一区二区三区高清视频一 | 亚洲综合另类小说色区 | 成人综合网亚洲伊人 | 乱人伦中文视频在线观看 | 在线看片无码永久免费视频 | 国产高潮视频在线观看 | 欧美精品免费观看二区 | 亚洲 日韩 欧美 成人 在线观看 | 久久99精品久久久久久动态图 | 亚洲综合无码久久精品综合 | 网友自拍区视频精品 | 国产综合久久久久鬼色 | 麻豆国产97在线 | 欧洲 | 欧美老妇交乱视频在线观看 | 午夜福利电影 | 欧美三级a做爰在线观看 | 亚洲熟女一区二区三区 | 国产九九九九九九九a片 | av小次郎收藏 | 国产成人精品三级麻豆 | 国产两女互慰高潮视频在线观看 | 久久久www成人免费毛片 | 亚洲国产欧美在线成人 | 国产精品免费大片 | 日韩精品乱码av一区二区 | 国产无套内射久久久国产 | 漂亮人妻洗澡被公强 日日躁 | 午夜丰满少妇性开放视频 | 76少妇精品导航 | 国内老熟妇对白xxxxhd | 中文字幕人妻无码一区二区三区 | 亚洲最大成人网站 | 亚洲国产欧美在线成人 | 国产无套粉嫩白浆在线 | 婷婷色婷婷开心五月四房播播 | 无遮挡国产高潮视频免费观看 | 国产在线aaa片一区二区99 | 亚洲中文字幕无码中字 | 极品尤物被啪到呻吟喷水 | 中文字幕无码av激情不卡 | 永久免费观看美女裸体的网站 | 国产精品久久久久久久影院 | 午夜男女很黄的视频 | 亚洲成av人片在线观看无码不卡 | 中文字幕乱码中文乱码51精品 | 无码任你躁久久久久久久 | 麻豆国产丝袜白领秘书在线观看 | 欧美日韩色另类综合 | 精品国产成人一区二区三区 | 丰满岳乱妇在线观看中字无码 | 亚洲中文字幕成人无码 | 中文字幕乱码中文乱码51精品 | 97精品国产97久久久久久免费 | 天天摸天天透天天添 | 国产后入清纯学生妹 | 欧美35页视频在线观看 | ass日本丰满熟妇pics | 亚洲精品综合五月久久小说 | 精品国产青草久久久久福利 | 国产精品无码一区二区三区不卡 | 理论片87福利理论电影 | 人妻与老人中文字幕 | 美女黄网站人色视频免费国产 | 成 人影片 免费观看 | 久久久精品人妻久久影视 | 狠狠躁日日躁夜夜躁2020 | 宝宝好涨水快流出来免费视频 | 少妇久久久久久人妻无码 | 捆绑白丝粉色jk震动捧喷白浆 | 欧美人与物videos另类 | 无码av中文字幕免费放 | 国产真人无遮挡作爱免费视频 | 国产人妻精品一区二区三区 | 成人免费视频视频在线观看 免费 | 国产精品高潮呻吟av久久 | 极品尤物被啪到呻吟喷水 | 国产熟妇另类久久久久 | 国产美女极度色诱视频www | 少妇激情av一区二区 | 少妇高潮一区二区三区99 | 天天拍夜夜添久久精品大 | 中文字幕乱码人妻无码久久 | 欧洲欧美人成视频在线 | 亚洲国产精华液网站w | 日本一卡2卡3卡四卡精品网站 | 熟妇人妻激情偷爽文 | aⅴ亚洲 日韩 色 图网站 播放 | 国产成人综合在线女婷五月99播放 | 日韩av无码中文无码电影 | 中文字幕+乱码+中文字幕一区 | 亚洲国产成人a精品不卡在线 | 久久国产精品偷任你爽任你 | 国产精品香蕉在线观看 | 欧美日韩人成综合在线播放 | 国产人成高清在线视频99最全资源 | 无套内谢老熟女 | 任你躁国产自任一区二区三区 | 亚洲国产精品无码久久久久高潮 | 国产精品无码久久av | 自拍偷自拍亚洲精品10p | 国产乡下妇女做爰 | aⅴ亚洲 日韩 色 图网站 播放 | 久久综合给合久久狠狠狠97色 | 野外少妇愉情中文字幕 | 精品久久综合1区2区3区激情 | 欧美老熟妇乱xxxxx | 熟妇女人妻丰满少妇中文字幕 | 三上悠亚人妻中文字幕在线 | 波多野结衣 黑人 | 天天拍夜夜添久久精品大 | 内射爽无广熟女亚洲 | 久久综合久久自在自线精品自 | 国产精品无码永久免费888 | 国产精品久久精品三级 | 中文字幕精品av一区二区五区 | 久久99精品国产麻豆 | 麻豆蜜桃av蜜臀av色欲av | 99久久久国产精品无码免费 | 俺去俺来也在线www色官网 | 亚洲欧洲无卡二区视頻 | 无码人妻精品一区二区三区不卡 | 老熟妇仑乱视频一区二区 | 在线观看欧美一区二区三区 | 日本在线高清不卡免费播放 | 亚洲欧美国产精品专区久久 | 久久精品国产一区二区三区 | 久久久成人毛片无码 | 日韩精品无码一区二区中文字幕 | 日产精品99久久久久久 | 色综合久久88色综合天天 | 亚洲の无码国产の无码步美 | 亚洲春色在线视频 | 5858s亚洲色大成网站www | 日本高清一区免费中文视频 | 精品久久久久香蕉网 | 久久综合香蕉国产蜜臀av | 无码播放一区二区三区 | 99久久人妻精品免费二区 | 高潮喷水的毛片 | 中文字幕av伊人av无码av | 男女猛烈xx00免费视频试看 | 国产精品对白交换视频 | 国内老熟妇对白xxxxhd | 亚洲成a人片在线观看无码3d | 俺去俺来也在线www色官网 | 免费观看的无遮挡av | 露脸叫床粗话东北少妇 | 国产精品毛多多水多 | a片免费视频在线观看 | 国产舌乚八伦偷品w中 | 又粗又大又硬毛片免费看 | 欧美日本免费一区二区三区 | 少妇无码一区二区二三区 | 午夜性刺激在线视频免费 | 99久久精品日本一区二区免费 | 亚洲中文字幕久久无码 | 国产精品无码永久免费888 | 在线观看免费人成视频 | 亚洲国产欧美国产综合一区 | 久久亚洲a片com人成 | 亚洲 a v无 码免 费 成 人 a v | 久久精品中文闷骚内射 | 亚洲精品成人福利网站 | 亚洲娇小与黑人巨大交 | 日日碰狠狠躁久久躁蜜桃 | 欧美熟妇另类久久久久久不卡 | 老头边吃奶边弄进去呻吟 | 国产手机在线αⅴ片无码观看 | 欧美国产亚洲日韩在线二区 | 色婷婷综合中文久久一本 | 色综合久久久无码网中文 | 国产免费久久久久久无码 | 国产免费久久精品国产传媒 | 日本精品高清一区二区 | 99精品无人区乱码1区2区3区 | 美女黄网站人色视频免费国产 | 亚洲の无码国产の无码影院 | 精品国产一区av天美传媒 | 成熟人妻av无码专区 | 黑人大群体交免费视频 | 中文字幕无码av波多野吉衣 | 色一情一乱一伦 | 奇米影视888欧美在线观看 | 亚洲中文字幕无码中文字在线 | 丰腴饱满的极品熟妇 | 久久国语露脸国产精品电影 | 国产精品视频免费播放 | 国产精品国产三级国产专播 | 无码精品人妻一区二区三区av | 18无码粉嫩小泬无套在线观看 | 欧美国产日韩亚洲中文 | 午夜精品一区二区三区的区别 | 国产无套粉嫩白浆在线 | 男女超爽视频免费播放 | 精品无人国产偷自产在线 | 久久精品人妻少妇一区二区三区 | 伦伦影院午夜理论片 | 东京无码熟妇人妻av在线网址 | 国产午夜手机精彩视频 | 中文字幕无线码 | 99久久久无码国产aaa精品 | 国内揄拍国内精品少妇国语 | 久久久av男人的天堂 | 夜夜夜高潮夜夜爽夜夜爰爰 | 成人试看120秒体验区 | 波多野结衣 黑人 | 亚洲中文字幕无码中字 | 色狠狠av一区二区三区 | 欧美日本免费一区二区三区 | 日日麻批免费40分钟无码 | 又大又紧又粉嫩18p少妇 | 玩弄人妻少妇500系列视频 | 自拍偷自拍亚洲精品被多人伦好爽 | 精品国产青草久久久久福利 | 扒开双腿疯狂进出爽爽爽视频 | 欧美精品在线观看 | 丝袜 中出 制服 人妻 美腿 | 日本熟妇人妻xxxxx人hd | 中文字幕无线码免费人妻 | 人人爽人人爽人人片av亚洲 | 日本熟妇人妻xxxxx人hd | 久久99精品久久久久婷婷 | 人妻互换免费中文字幕 | 中文字幕无码乱人伦 | 色偷偷av老熟女 久久精品人妻少妇一区二区三区 | 中文无码精品a∨在线观看不卡 | 又紧又大又爽精品一区二区 | 国产精品久久久久久无码 | 免费网站看v片在线18禁无码 | 特黄特色大片免费播放器图片 | 高清不卡一区二区三区 | 国产精品.xx视频.xxtv | 中文精品久久久久人妻不卡 | 亚洲中文字幕无码一久久区 | 少妇高潮一区二区三区99 | 久久久久久a亚洲欧洲av冫 | 在线精品国产一区二区三区 | 中文字幕人妻无码一夲道 | 日本精品高清一区二区 | 天天拍夜夜添久久精品 | 5858s亚洲色大成网站www | 成人一区二区免费视频 | 四虎4hu永久免费 | a在线观看免费网站大全 | 九月婷婷人人澡人人添人人爽 | 亚无码乱人伦一区二区 | 精品偷拍一区二区三区在线看 | 全黄性性激高免费视频 | 大屁股大乳丰满人妻 | 秋霞特色aa大片 | 欧美成人午夜精品久久久 | 偷窥日本少妇撒尿chinese | 精品日本一区二区三区在线观看 | 好爽又高潮了毛片免费下载 | 欧美兽交xxxx×视频 | 亚洲色偷偷男人的天堂 | 欧美人与禽zoz0性伦交 | 国产精品无套呻吟在线 | 久久天天躁夜夜躁狠狠 | 丰满少妇弄高潮了www | 日日碰狠狠丁香久燥 | 久久人人爽人人人人片 | 正在播放老肥熟妇露脸 | 日本熟妇乱子伦xxxx | 国产性生交xxxxx无码 | 亚洲午夜久久久影院 | 精品亚洲成av人在线观看 | 国内揄拍国内精品少妇国语 | 久久精品中文闷骚内射 | 性欧美大战久久久久久久 | 国产精品香蕉在线观看 | 中文久久乱码一区二区 | 成年美女黄网站色大免费全看 | 欧美性猛交内射兽交老熟妇 | 日本欧美一区二区三区乱码 | 国产高清av在线播放 | 天堂亚洲免费视频 | 亚洲色大成网站www国产 | 亚洲熟熟妇xxxx | 男女下面进入的视频免费午夜 | 永久免费精品精品永久-夜色 | 又色又爽又黄的美女裸体网站 | 午夜免费福利小电影 | 丝袜人妻一区二区三区 | 欧美人妻一区二区三区 | 国语自产偷拍精品视频偷 | 红桃av一区二区三区在线无码av | 中文字幕精品av一区二区五区 | 99麻豆久久久国产精品免费 | 国产日产欧产精品精品app | 国产香蕉97碰碰久久人人 | 乱人伦人妻中文字幕无码久久网 | 激情国产av做激情国产爱 | 亚洲精品综合一区二区三区在线 | 国产av久久久久精东av | 精品无码国产一区二区三区av | 日韩av无码一区二区三区不卡 | 中文字幕 亚洲精品 第1页 | 熟女俱乐部五十路六十路av | a在线观看免费网站大全 | 又湿又紧又大又爽a视频国产 | 高潮毛片无遮挡高清免费 | 亚洲综合在线一区二区三区 | 亚洲熟妇色xxxxx欧美老妇y | 大地资源网第二页免费观看 | 国产日产欧产精品精品app | 亚洲精品成人福利网站 | 亚洲大尺度无码无码专区 | 波多野42部无码喷潮在线 | 久久午夜夜伦鲁鲁片无码免费 | 成人试看120秒体验区 | a国产一区二区免费入口 | 久久久久久亚洲精品a片成人 | 国产精品久久久久久久9999 | 人人妻人人澡人人爽欧美精品 | 久久久成人毛片无码 | 国产农村乱对白刺激视频 | av无码电影一区二区三区 | 久久国产精品精品国产色婷婷 | 欧美性色19p | 国语自产偷拍精品视频偷 | 亚洲а∨天堂久久精品2021 | 欧美成人高清在线播放 | 亚洲国产欧美国产综合一区 | 人人超人人超碰超国产 | 午夜不卡av免费 一本久久a久久精品vr综合 | 亚洲综合另类小说色区 | 女人被男人躁得好爽免费视频 | 3d动漫精品啪啪一区二区中 | 国产超碰人人爽人人做人人添 | 色狠狠av一区二区三区 | 久久人妻内射无码一区三区 | 色欲人妻aaaaaaa无码 | 久久亚洲日韩精品一区二区三区 | 超碰97人人做人人爱少妇 | 无遮挡国产高潮视频免费观看 | aⅴ在线视频男人的天堂 | 国产精品免费大片 | 丰满妇女强制高潮18xxxx | 亚洲国产av精品一区二区蜜芽 | 久久精品中文字幕大胸 | 丰满人妻精品国产99aⅴ | 日日天干夜夜狠狠爱 | 男人的天堂2018无码 | 亚洲精品国产品国语在线观看 | 精品熟女少妇av免费观看 | 久热国产vs视频在线观看 | 久久精品国产精品国产精品污 | 久久精品99久久香蕉国产色戒 | 曰韩无码二三区中文字幕 | 国产精品久久精品三级 | 久久久中文久久久无码 | 亚洲 高清 成人 动漫 | 欧美激情综合亚洲一二区 | 荫蒂被男人添的好舒服爽免费视频 | 国产成人无码av一区二区 | 俺去俺来也www色官网 | 97夜夜澡人人爽人人喊中国片 | 领导边摸边吃奶边做爽在线观看 | 国产精品福利视频导航 | 无码人妻精品一区二区三区下载 | 丰满岳乱妇在线观看中字无码 | 少妇无套内谢久久久久 | 午夜性刺激在线视频免费 | 国产精品人人妻人人爽 | 中文字幕色婷婷在线视频 | 97人妻精品一区二区三区 | 丝袜足控一区二区三区 | 日本www一道久久久免费榴莲 | 日本又色又爽又黄的a片18禁 | 国产超碰人人爽人人做人人添 | 国产激情一区二区三区 | 精品久久久中文字幕人妻 | 亚洲精品久久久久久一区二区 | 亚洲一区二区三区偷拍女厕 | 精品夜夜澡人妻无码av蜜桃 | 国产无遮挡又黄又爽免费视频 | 久久精品99久久香蕉国产色戒 | 蜜臀aⅴ国产精品久久久国产老师 | 成人欧美一区二区三区黑人免费 | 丰满少妇高潮惨叫视频 | 国产真实伦对白全集 | 99re在线播放 | 亚洲s色大片在线观看 | 久久久久久国产精品无码下载 | 国产特级毛片aaaaaa高潮流水 | 无码乱肉视频免费大全合集 | 国产绳艺sm调教室论坛 | 色婷婷av一区二区三区之红樱桃 | 日韩少妇内射免费播放 | 美女黄网站人色视频免费国产 | 性做久久久久久久免费看 | 国产手机在线αⅴ片无码观看 | 欧美丰满老熟妇xxxxx性 | 精品乱码久久久久久久 | 图片区 小说区 区 亚洲五月 | 国产激情精品一区二区三区 | 丝袜 中出 制服 人妻 美腿 | 国产av无码专区亚洲a∨毛片 | 国产卡一卡二卡三 | 亚洲人成网站在线播放942 | 亚洲天堂2017无码 | 又大又硬又黄的免费视频 | 久激情内射婷内射蜜桃人妖 | 装睡被陌生人摸出水好爽 | 久9re热视频这里只有精品 | 久久久精品人妻久久影视 | 日韩人妻无码一区二区三区久久99 | 熟妇女人妻丰满少妇中文字幕 | 熟妇女人妻丰满少妇中文字幕 | v一区无码内射国产 | 老熟妇乱子伦牲交视频 | 中文无码伦av中文字幕 | 国产激情艳情在线看视频 | 樱花草在线播放免费中文 | 久久国产精品_国产精品 | 日本大香伊一区二区三区 | 久久成人a毛片免费观看网站 | 国产精品久久国产精品99 | 亚洲熟妇色xxxxx欧美老妇 | 亚洲精品欧美二区三区中文字幕 | 国产精品国产三级国产专播 | 久久久久国色av免费观看性色 | 国产成人综合色在线观看网站 | 精品欧美一区二区三区久久久 | 国产免费久久久久久无码 | 俺去俺来也在线www色官网 | 无码av最新清无码专区吞精 | 色五月五月丁香亚洲综合网 | 国产凸凹视频一区二区 | 亚洲一区二区三区含羞草 | 色老头在线一区二区三区 | 精品欧美一区二区三区久久久 | 国产人妖乱国产精品人妖 | 国产在线aaa片一区二区99 | 日本精品人妻无码77777 天堂一区人妻无码 | 国产艳妇av在线观看果冻传媒 | 久久国产36精品色熟妇 | 小泽玛莉亚一区二区视频在线 | 又紧又大又爽精品一区二区 | 无码人妻久久一区二区三区不卡 | 中文字幕人妻无码一区二区三区 | 99riav国产精品视频 | 亚洲精品一区二区三区大桥未久 | 欧美成人高清在线播放 | 国产精品高潮呻吟av久久 | 少妇人妻av毛片在线看 | √8天堂资源地址中文在线 | v一区无码内射国产 | 少妇一晚三次一区二区三区 | 67194成是人免费无码 | 久久综合久久自在自线精品自 | 欧美老熟妇乱xxxxx | 日本熟妇人妻xxxxx人hd | 日韩av激情在线观看 | 偷窥村妇洗澡毛毛多 | 成年女人永久免费看片 | 国产综合久久久久鬼色 | 国产三级精品三级男人的天堂 | 少妇厨房愉情理9仑片视频 | av无码电影一区二区三区 | 妺妺窝人体色www在线小说 | 亚洲国产精品成人久久蜜臀 | 亚洲第一网站男人都懂 | 欧美精品免费观看二区 | 久久国产精品萌白酱免费 | 久久精品丝袜高跟鞋 | 曰韩无码二三区中文字幕 | 98国产精品综合一区二区三区 | 国产成人一区二区三区别 | 久久 国产 尿 小便 嘘嘘 | 男女性色大片免费网站 | 亚洲色无码一区二区三区 | 啦啦啦www在线观看免费视频 | 男女作爱免费网站 | 人妻夜夜爽天天爽三区 | 娇妻被黑人粗大高潮白浆 | 高潮毛片无遮挡高清免费视频 | 久久精品人人做人人综合 | 国产人妻精品一区二区三区 | 久久人人爽人人爽人人片av高清 | 无码人妻少妇伦在线电影 | 精品 日韩 国产 欧美 视频 | 精品一区二区不卡无码av | 中文字幕久久久久人妻 | 99久久精品日本一区二区免费 | 亚洲自偷自拍另类第1页 | 对白脏话肉麻粗话av | 国产无遮挡吃胸膜奶免费看 | 亚洲 日韩 欧美 成人 在线观看 | 亚洲精品综合一区二区三区在线 | 日本一卡2卡3卡四卡精品网站 | 亚洲午夜无码久久 | 亚洲s码欧洲m码国产av | 奇米影视888欧美在线观看 | 国产黄在线观看免费观看不卡 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 久久无码专区国产精品s | 亚洲精品国偷拍自产在线麻豆 | 国产精品人人爽人人做我的可爱 | 男人扒开女人内裤强吻桶进去 | 国产精品嫩草久久久久 | 中文字幕av日韩精品一区二区 | 夜夜躁日日躁狠狠久久av | 日韩精品a片一区二区三区妖精 | 国产午夜视频在线观看 | 国产亚洲精品久久久久久久 | 国产午夜无码精品免费看 | 亚洲码国产精品高潮在线 | 亚洲乱码日产精品bd | 丰满少妇高潮惨叫视频 | 乱人伦中文视频在线观看 | 国产精品国产三级国产专播 | 久久久久久九九精品久 | 亚洲区小说区激情区图片区 | 久久99精品国产.久久久久 | 亚洲毛片av日韩av无码 | 香蕉久久久久久av成人 | 欧洲vodafone精品性 | 少妇久久久久久人妻无码 | 亚洲成av人影院在线观看 | 成人女人看片免费视频放人 | 久久久国产精品无码免费专区 | 国产亚洲精品精品国产亚洲综合 | 欧美性生交活xxxxxdddd | 亚洲欧美国产精品久久 | 久久精品国产日本波多野结衣 | 日韩精品成人一区二区三区 | 成人精品视频一区二区三区尤物 | 波多野结衣一区二区三区av免费 | 性欧美牲交xxxxx视频 | 婷婷综合久久中文字幕蜜桃三电影 | 亚洲精品国偷拍自产在线麻豆 | 曰韩无码二三区中文字幕 | 中文无码成人免费视频在线观看 | 国内精品人妻无码久久久影院蜜桃 | 日韩人妻无码一区二区三区久久99 | 成年女人永久免费看片 | 精品午夜福利在线观看 | 日本一区二区三区免费播放 | 中文字幕无码av激情不卡 | 亚洲无人区一区二区三区 | 亚洲精品一区二区三区婷婷月 | 国产欧美精品一区二区三区 | 大地资源网第二页免费观看 | 亚洲日本va午夜在线电影 | 国产乱子伦视频在线播放 | aⅴ在线视频男人的天堂 | 2020最新国产自产精品 | 女人被爽到呻吟gif动态图视看 | 九九在线中文字幕无码 | 狠狠色欧美亚洲狠狠色www | 亚洲日韩av一区二区三区中文 | 国产av一区二区三区最新精品 | 精品国产一区二区三区四区 | 欧美性猛交内射兽交老熟妇 | 久久精品视频在线看15 | 国产亚洲人成在线播放 | 99国产欧美久久久精品 | 国产69精品久久久久app下载 | 亚洲一区二区三区国产精华液 | 无码人妻丰满熟妇区五十路百度 | 国产精品久久久久久亚洲影视内衣 | 伊人久久大香线蕉午夜 | 国产免费无码一区二区视频 | 白嫩日本少妇做爰 | 精品一区二区三区波多野结衣 | 亚洲人成无码网www | 亚洲精品中文字幕乱码 | 撕开奶罩揉吮奶头视频 | 给我免费的视频在线观看 | 欧美肥老太牲交大战 | 国产偷国产偷精品高清尤物 | 少妇无码av无码专区在线观看 | 欧美老熟妇乱xxxxx | 国产精品无码mv在线观看 | a国产一区二区免费入口 | 熟女少妇在线视频播放 | 欧美喷潮久久久xxxxx | 亚洲日韩av一区二区三区四区 | 久久精品无码一区二区三区 | 精品偷拍一区二区三区在线看 | 亚洲精品鲁一鲁一区二区三区 | 精品人妻人人做人人爽夜夜爽 | 亚洲狠狠色丁香婷婷综合 | 人妻少妇精品无码专区二区 | 欧美熟妇另类久久久久久多毛 | 亚洲日本一区二区三区在线 | 亚洲精品久久久久中文第一幕 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 天天爽夜夜爽夜夜爽 | 亚洲欧洲无卡二区视頻 | 学生妹亚洲一区二区 | 色五月五月丁香亚洲综合网 | 亚洲综合精品香蕉久久网 | 欧洲熟妇精品视频 | 亚洲s色大片在线观看 | 国产精品igao视频网 | 亚洲精品一区二区三区大桥未久 | 日本一区二区更新不卡 | 大胆欧美熟妇xx | 成年美女黄网站色大免费视频 | 曰韩少妇内射免费播放 | 中文字幕精品av一区二区五区 | 性开放的女人aaa片 | 女人色极品影院 | 99精品无人区乱码1区2区3区 | 日本一区二区更新不卡 | 六月丁香婷婷色狠狠久久 | 女人高潮内射99精品 | 精品国产一区二区三区四区在线看 | 国内揄拍国内精品少妇国语 | 国产无套内射久久久国产 | 日本熟妇浓毛 | 无码国产乱人伦偷精品视频 | 在线观看欧美一区二区三区 | 国产日产欧产精品精品app | 美女扒开屁股让男人桶 | 亚洲精品一区二区三区在线 | 三级4级全黄60分钟 | 欧美三级不卡在线观看 | 97夜夜澡人人爽人人喊中国片 | 国产激情一区二区三区 | 99精品国产综合久久久久五月天 | 国精产品一区二区三区 | 人妻与老人中文字幕 | 成人无码精品一区二区三区 | 国产av无码专区亚洲awww | 少女韩国电视剧在线观看完整 | 日本精品少妇一区二区三区 | 国产av一区二区三区最新精品 | 欧美大屁股xxxxhd黑色 | 熟女少妇在线视频播放 | 精品亚洲成av人在线观看 | 无码免费一区二区三区 | 99国产精品白浆在线观看免费 | 人人妻在人人 | 欧美性猛交xxxx富婆 | 婷婷综合久久中文字幕蜜桃三电影 | 欧美猛少妇色xxxxx | 精品无人区无码乱码毛片国产 | 精品久久综合1区2区3区激情 | 久久亚洲国产成人精品性色 | 一本久久a久久精品vr综合 | 欧美丰满少妇xxxx性 | 久久99精品久久久久久 | 大色综合色综合网站 | 亚洲国产午夜精品理论片 | 国产欧美熟妇另类久久久 | 欧洲vodafone精品性 | 国产99久久精品一区二区 | 人人妻在人人 | 欧美人与物videos另类 | 欧美性生交xxxxx久久久 | 99精品视频在线观看免费 | 色综合久久中文娱乐网 | 丰满人妻被黑人猛烈进入 | 亚洲日韩精品欧美一区二区 | 亚洲а∨天堂久久精品2021 | 中国女人内谢69xxxx | 国产精品99久久精品爆乳 | 亚洲 欧美 激情 小说 另类 | 中文字幕精品av一区二区五区 | 日韩欧美成人免费观看 | 中文字幕日韩精品一区二区三区 | 国产亚洲人成a在线v网站 | 亚洲乱码国产乱码精品精 | 国产精品久久久久久久9999 | 18禁黄网站男男禁片免费观看 | 日韩在线不卡免费视频一区 | 久久精品99久久香蕉国产色戒 | 国产亚洲视频中文字幕97精品 | 亚洲码国产精品高潮在线 | 国产亚洲人成在线播放 | 乱人伦人妻中文字幕无码久久网 | 性色av无码免费一区二区三区 | 搡女人真爽免费视频大全 | 好男人www社区 | 欧美精品免费观看二区 | 日日噜噜噜噜夜夜爽亚洲精品 | 久久久国产一区二区三区 | 亚洲无人区午夜福利码高清完整版 | 亚洲中文字幕无码中文字在线 | 在线欧美精品一区二区三区 | 亚洲色偷偷偷综合网 | 久久精品国产大片免费观看 | 国产一区二区不卡老阿姨 | 国产精品对白交换视频 | 亚洲精品无码国产 | 日韩少妇内射免费播放 | v一区无码内射国产 | 精品日本一区二区三区在线观看 | 亚洲七七久久桃花影院 | 亚洲人亚洲人成电影网站色 | 午夜熟女插插xx免费视频 | 人人妻人人澡人人爽精品欧美 | 国内揄拍国内精品人妻 | 人妻无码αv中文字幕久久琪琪布 | 亚洲熟妇自偷自拍另类 | 老司机亚洲精品影院无码 | 婷婷五月综合激情中文字幕 | 精品无码一区二区三区的天堂 | 九九久久精品国产免费看小说 | 男女作爱免费网站 | 亚洲无人区午夜福利码高清完整版 | 亚洲精品国产精品乱码不卡 | 性史性农村dvd毛片 | 精品无码一区二区三区的天堂 | 夜精品a片一区二区三区无码白浆 | 男女下面进入的视频免费午夜 | av无码电影一区二区三区 | 国产97人人超碰caoprom | 精品国产精品久久一区免费式 | 欧美日韩一区二区免费视频 | 人人妻人人澡人人爽人人精品 | 欧美老人巨大xxxx做受 | 欧美成人午夜精品久久久 | 精品人妻中文字幕有码在线 | 精品久久久中文字幕人妻 | 奇米影视888欧美在线观看 | 伊人久久大香线蕉亚洲 | 久久人妻内射无码一区三区 | 老子影院午夜精品无码 | 爱做久久久久久 | 中文字幕无码免费久久9一区9 | 毛片内射-百度 | 东京热一精品无码av | 内射爽无广熟女亚洲 | 久久99精品久久久久久 | 欧美亚洲国产一区二区三区 | 亚洲第一无码av无码专区 | 丝袜美腿亚洲一区二区 | 无码国产乱人伦偷精品视频 | 99精品久久毛片a片 | 亚洲精品成人福利网站 | 国产精品多人p群无码 | 真人与拘做受免费视频一 | 熟女少妇人妻中文字幕 | 男人和女人高潮免费网站 | 疯狂三人交性欧美 | 99riav国产精品视频 | av无码电影一区二区三区 | 在线看片无码永久免费视频 | 真人与拘做受免费视频一 | ass日本丰满熟妇pics | 亚洲日韩乱码中文无码蜜桃臀网站 | 麻豆果冻传媒2021精品传媒一区下载 | 亚洲精品国产精品乱码不卡 | www国产精品内射老师 | 又大又紧又粉嫩18p少妇 | av香港经典三级级 在线 | 99久久人妻精品免费二区 | 人妻无码αv中文字幕久久琪琪布 | 在线观看欧美一区二区三区 | 中文字幕无码人妻少妇免费 | 精品久久8x国产免费观看 | 免费无码av一区二区 | 亚洲人成影院在线观看 | 日韩亚洲欧美精品综合 | 日本乱偷人妻中文字幕 | 人人澡人摸人人添 | 欧美人与禽zoz0性伦交 | 人人妻人人澡人人爽欧美精品 | 奇米影视888欧美在线观看 | 国产精品人人妻人人爽 | 亚洲国产欧美国产综合一区 | 精品久久久久香蕉网 | 成人影院yy111111在线观看 | 国产亚洲视频中文字幕97精品 | 亚洲精品一区二区三区四区五区 | 日韩在线不卡免费视频一区 | 亚洲精品综合五月久久小说 | 日韩在线不卡免费视频一区 | 鲁一鲁av2019在线 | 欧美喷潮久久久xxxxx | 精品无码国产自产拍在线观看蜜 | 丰满诱人的人妻3 | 国产精品va在线播放 | 鲁大师影院在线观看 | 亚洲国产精华液网站w | 国产va免费精品观看 | 国内精品久久毛片一区二区 | 人人超人人超碰超国产 | 欧美成人午夜精品久久久 | 丰满少妇高潮惨叫视频 | 亚洲人成无码网www | 久久精品国产大片免费观看 | 国产超碰人人爽人人做人人添 | 亚洲精品一区二区三区大桥未久 | 欧美一区二区三区 | 亚洲日韩精品欧美一区二区 | 中文字幕色婷婷在线视频 | 小sao货水好多真紧h无码视频 | 久久久久亚洲精品中文字幕 | 亚洲中文字幕无码中字 | 国产办公室秘书无码精品99 | 日本丰满熟妇videos | 夜夜影院未满十八勿进 | 狠狠cao日日穞夜夜穞av | 亚洲大尺度无码无码专区 | 国产国语老龄妇女a片 | 夜夜影院未满十八勿进 | 亚洲熟妇色xxxxx亚洲 | 国产精品久久久午夜夜伦鲁鲁 | 亚洲色无码一区二区三区 | 人妻少妇精品无码专区动漫 | 日韩在线不卡免费视频一区 | 大屁股大乳丰满人妻 | 午夜精品一区二区三区的区别 | 九一九色国产 | 国产偷国产偷精品高清尤物 | √天堂中文官网8在线 | 国产热a欧美热a在线视频 | 亚洲色欲色欲欲www在线 | 女人被爽到呻吟gif动态图视看 | 99精品国产综合久久久久五月天 | 亚洲色无码一区二区三区 | 亚洲一区二区三区偷拍女厕 | 大地资源网第二页免费观看 | 国产精品igao视频网 | 大肉大捧一进一出好爽视频 | 永久免费观看美女裸体的网站 | 久久久国产精品无码免费专区 | 日日噜噜噜噜夜夜爽亚洲精品 | 国产一区二区三区四区五区加勒比 | av无码久久久久不卡免费网站 | 未满小14洗澡无码视频网站 | 欧美xxxx黑人又粗又长 | 狠狠躁日日躁夜夜躁2020 | 4hu四虎永久在线观看 | 一本久道高清无码视频 | 欧美日韩人成综合在线播放 | 18精品久久久无码午夜福利 | 熟女少妇在线视频播放 | 成在人线av无码免观看麻豆 | 四十如虎的丰满熟妇啪啪 | 高潮毛片无遮挡高清免费视频 | 无码福利日韩神码福利片 | 亚洲毛片av日韩av无码 | 亚洲第一网站男人都懂 | 国产无遮挡又黄又爽免费视频 | 小鲜肉自慰网站xnxx | 丰满妇女强制高潮18xxxx | 国产精品人妻一区二区三区四 | 国产一区二区三区四区五区加勒比 | 国产精品无码一区二区三区不卡 | 国产午夜精品一区二区三区嫩草 | 狂野欧美激情性xxxx | 少妇无码吹潮 | 99在线 | 亚洲 | 999久久久国产精品消防器材 | 两性色午夜免费视频 | 亚洲熟熟妇xxxx | 久久精品国产精品国产精品污 | 亚洲精品中文字幕乱码 | 亚洲 日韩 欧美 成人 在线观看 | 久久久久免费精品国产 | 在线亚洲高清揄拍自拍一品区 | 精品国偷自产在线视频 | 久久国语露脸国产精品电影 | 98国产精品综合一区二区三区 | 久久久无码中文字幕久... | 亚洲色大成网站www国产 | 国产乱人偷精品人妻a片 | 激情综合激情五月俺也去 | 成人免费视频在线观看 | 精品国产青草久久久久福利 | 国产成人亚洲综合无码 | 国产午夜精品一区二区三区嫩草 | a国产一区二区免费入口 | 国产亚洲美女精品久久久2020 | 综合激情五月综合激情五月激情1 | 内射白嫩少妇超碰 | 精品久久综合1区2区3区激情 | 骚片av蜜桃精品一区 | 东北女人啪啪对白 | 色偷偷人人澡人人爽人人模 | 男女超爽视频免费播放 | 高清不卡一区二区三区 | 国产9 9在线 | 中文 | 国产后入清纯学生妹 | 精品国产成人一区二区三区 | 国产精品高潮呻吟av久久4虎 | 在线观看国产午夜福利片 | 国产欧美熟妇另类久久久 | 亚洲日本va午夜在线电影 | 亚洲自偷自拍另类第1页 | 国产精品毛片一区二区 | 青青久在线视频免费观看 | 对白脏话肉麻粗话av | 两性色午夜视频免费播放 | 男人的天堂2018无码 | 99久久久国产精品无码免费 | 久久久精品欧美一区二区免费 | 强辱丰满人妻hd中文字幕 | 黑人大群体交免费视频 | 3d动漫精品啪啪一区二区中 | 色妞www精品免费视频 | 日日夜夜撸啊撸 | 无码播放一区二区三区 | 蜜桃臀无码内射一区二区三区 | 色综合久久88色综合天天 | 兔费看少妇性l交大片免费 | 午夜肉伦伦影院 | 成年美女黄网站色大免费全看 | 丰满岳乱妇在线观看中字无码 | 99久久久国产精品无码免费 | 理论片87福利理论电影 | 高中生自慰www网站 | 亚洲人成影院在线无码按摩店 | 国产精品无码一区二区三区不卡 | 亚洲阿v天堂在线 | 国产精品二区一区二区aⅴ污介绍 | 亚洲高清偷拍一区二区三区 | 亚洲人成网站免费播放 | 国产在线一区二区三区四区五区 | 国产激情无码一区二区app | 久久99精品国产.久久久久 | 四虎影视成人永久免费观看视频 | 性欧美疯狂xxxxbbbb | 天堂无码人妻精品一区二区三区 | 久久亚洲中文字幕无码 | 亚洲人交乣女bbw | 婷婷丁香六月激情综合啪 | 小泽玛莉亚一区二区视频在线 | 黑人粗大猛烈进出高潮视频 | 中文字幕无码日韩专区 | 久久久久成人精品免费播放动漫 | 成 人 免费观看网站 | 正在播放东北夫妻内射 | 国产激情一区二区三区 | а√天堂www在线天堂小说 | 亚洲成a人片在线观看无码3d | 久久综合色之久久综合 | 精品人妻中文字幕有码在线 | 国产香蕉97碰碰久久人人 | 国产精品.xx视频.xxtv | 精品国产国产综合精品 | 人妻人人添人妻人人爱 | 国产精品99久久精品爆乳 | 内射白嫩少妇超碰 | 粉嫩少妇内射浓精videos | 国产成人精品一区二区在线小狼 | 红桃av一区二区三区在线无码av | 黄网在线观看免费网站 | 国产乱人伦av在线无码 | 国产亚洲精品久久久久久久久动漫 | 成熟人妻av无码专区 | 激情亚洲一区国产精品 | 欧美国产日产一区二区 | 精品国偷自产在线 | 国产精品久久久久9999小说 | 欧美精品一区二区精品久久 | 国产精品爱久久久久久久 | 欧美午夜特黄aaaaaa片 | 丰满人妻被黑人猛烈进入 | 中文字幕乱码亚洲无线三区 | 久久国产精品_国产精品 | 国产精品理论片在线观看 | 日产精品99久久久久久 | 中文字幕人妻丝袜二区 | 亚洲精品久久久久中文第一幕 | 国产手机在线αⅴ片无码观看 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 国产69精品久久久久app下载 | 亚洲国产一区二区三区在线观看 | 亚洲gv猛男gv无码男同 | 国产乱码精品一品二品 | 国产性生大片免费观看性 | 蜜臀aⅴ国产精品久久久国产老师 | 欧美日韩在线亚洲综合国产人 | 国产精品va在线观看无码 | 在教室伦流澡到高潮hnp视频 | 亚洲成av人影院在线观看 | 内射老妇bbwx0c0ck | 亚洲色偷偷偷综合网 | 18精品久久久无码午夜福利 | 国产一区二区三区精品视频 | 蜜桃臀无码内射一区二区三区 | 国产精品久久久午夜夜伦鲁鲁 | 精品偷自拍另类在线观看 | 97色伦图片97综合影院 | 国产办公室秘书无码精品99 | 久久精品国产日本波多野结衣 | 奇米影视7777久久精品 | 高清无码午夜福利视频 | 成人免费视频在线观看 | 伊人久久大香线蕉av一区二区 | 国产欧美亚洲精品a | 亚洲天堂2017无码 | 大肉大捧一进一出好爽视频 | 亚洲乱码国产乱码精品精 | 影音先锋中文字幕无码 | 强辱丰满人妻hd中文字幕 | 欧美35页视频在线观看 | 亚洲va欧美va天堂v国产综合 | 亚洲国产精华液网站w | 日韩精品成人一区二区三区 | 东京无码熟妇人妻av在线网址 | 伊人久久大香线蕉亚洲 | 日本精品人妻无码77777 天堂一区人妻无码 | 精品 日韩 国产 欧美 视频 | 强开小婷嫩苞又嫩又紧视频 | 好男人www社区 | 人人妻人人澡人人爽人人精品浪潮 | 亚洲精品一区二区三区在线 | 成人毛片一区二区 | 国产精品久久久久久无码 | 国产莉萝无码av在线播放 | 亚洲成在人网站无码天堂 | 成人亚洲精品久久久久软件 | 国产成人午夜福利在线播放 | 蜜臀av在线播放 久久综合激激的五月天 | 六月丁香婷婷色狠狠久久 | 永久免费观看美女裸体的网站 | 久久精品人人做人人综合试看 | 扒开双腿吃奶呻吟做受视频 | 色婷婷香蕉在线一区二区 | 国产亚洲美女精品久久久2020 | 久久国产精品_国产精品 | 久久久久亚洲精品男人的天堂 | 97夜夜澡人人爽人人喊中国片 | 婷婷色婷婷开心五月四房播播 | 又粗又大又硬又长又爽 | 亚洲大尺度无码无码专区 | 久久天天躁夜夜躁狠狠 | 婷婷六月久久综合丁香 | 中文毛片无遮挡高清免费 | 亚洲日韩乱码中文无码蜜桃臀网站 | 日本免费一区二区三区最新 | 日本大香伊一区二区三区 | 成人aaa片一区国产精品 | 亚洲天堂2017无码 | 国产综合久久久久鬼色 | 国产精品办公室沙发 | 成熟人妻av无码专区 | 国内丰满熟女出轨videos | 国精产品一品二品国精品69xx | 国产真人无遮挡作爱免费视频 | 无码人妻av免费一区二区三区 | 国产人妻精品一区二区三区 | 国精产品一品二品国精品69xx | 国产精品高潮呻吟av久久 | 国产成人综合色在线观看网站 | 18禁黄网站男男禁片免费观看 | 丰满岳乱妇在线观看中字无码 | 国产精品人人爽人人做我的可爱 | 亚洲爆乳精品无码一区二区三区 | 成人免费无码大片a毛片 | 国精产品一品二品国精品69xx | 亚洲午夜福利在线观看 | 婷婷综合久久中文字幕蜜桃三电影 | 久久精品女人的天堂av | a片在线免费观看 | a在线观看免费网站大全 | 麻豆国产人妻欲求不满 | 欧美 日韩 亚洲 在线 | 国产精品久久久一区二区三区 | 久久久婷婷五月亚洲97号色 | 亚洲日本在线电影 | 欧美 日韩 亚洲 在线 | 亚洲七七久久桃花影院 | 欧美大屁股xxxxhd黑色 | 久久五月精品中文字幕 | 99精品国产综合久久久久五月天 | 欧美日韩一区二区三区自拍 | 色一情一乱一伦 | 狠狠亚洲超碰狼人久久 | 日产精品高潮呻吟av久久 | 久久精品无码一区二区三区 | 久9re热视频这里只有精品 | 无人区乱码一区二区三区 | 在线精品国产一区二区三区 | 国产真实伦对白全集 | 5858s亚洲色大成网站www | 精品久久久久久亚洲精品 | 中文亚洲成a人片在线观看 | 国产精品亚洲а∨无码播放麻豆 | 日欧一片内射va在线影院 | 牲欲强的熟妇农村老妇女视频 | 亚洲日韩精品欧美一区二区 | 亚洲中文字幕乱码av波多ji | 亚洲精品一区二区三区在线 | 99麻豆久久久国产精品免费 | 亚洲色欲久久久综合网东京热 | 亚洲精品久久久久avwww潮水 | 无码国产激情在线观看 | 亚洲男人av香蕉爽爽爽爽 | 久久99精品久久久久久动态图 | 久久久国产精品无码免费专区 | 成人一在线视频日韩国产 | 青草视频在线播放 | 国产九九九九九九九a片 | 中文字幕av无码一区二区三区电影 | 日韩欧美群交p片內射中文 | √8天堂资源地址中文在线 | 欧美人与禽zoz0性伦交 | 欧美xxxxx精品 | 国产精品二区一区二区aⅴ污介绍 | 精品国产麻豆免费人成网站 | av人摸人人人澡人人超碰下载 | 免费无码av一区二区 | 久久综合香蕉国产蜜臀av | 午夜福利电影 | 内射欧美老妇wbb | 国产乱子伦视频在线播放 | 久久精品99久久香蕉国产色戒 | 国产黄在线观看免费观看不卡 | 4hu四虎永久在线观看 | 亚洲精品无码国产 | 亚洲精品无码国产 | 成人免费视频视频在线观看 免费 | 四虎4hu永久免费 | 久久国语露脸国产精品电影 | 天干天干啦夜天干天2017 | 久久99精品国产麻豆蜜芽 | 欧美丰满熟妇xxxx | 国产精品久久国产三级国 | 亚洲色欲色欲天天天www | 扒开双腿吃奶呻吟做受视频 | 国产精品亚洲а∨无码播放麻豆 | 久久精品中文字幕大胸 | 图片小说视频一区二区 | 国内少妇偷人精品视频免费 | 无遮挡国产高潮视频免费观看 | 久久亚洲中文字幕精品一区 | 精品厕所偷拍各类美女tp嘘嘘 | 3d动漫精品啪啪一区二区中 | 欧美性生交xxxxx久久久 | 亚洲人成影院在线无码按摩店 | 美女扒开屁股让男人桶 | 国精品人妻无码一区二区三区蜜柚 | 色一情一乱一伦一视频免费看 | 色情久久久av熟女人妻网站 | 女人被爽到呻吟gif动态图视看 | 久久久久久久久888 | 精品国产福利一区二区 | 国产两女互慰高潮视频在线观看 | 欧美日韩色另类综合 | 成人aaa片一区国产精品 | 国产乱人无码伦av在线a | 国产麻豆精品一区二区三区v视界 | 国产成人午夜福利在线播放 | 免费无码一区二区三区蜜桃大 | 强伦人妻一区二区三区视频18 | 日本一卡2卡3卡四卡精品网站 | 六十路熟妇乱子伦 | 久久午夜夜伦鲁鲁片无码免费 | 精品无码国产一区二区三区av | 18精品久久久无码午夜福利 | 1000部啪啪未满十八勿入下载 | 男人扒开女人内裤强吻桶进去 | 日日干夜夜干 | 亚洲中文字幕无码一久久区 | 日本精品高清一区二区 | 无码人妻丰满熟妇区五十路百度 | 白嫩日本少妇做爰 | 乱人伦中文视频在线观看 | 欧美 日韩 人妻 高清 中文 | 国产精品久久久一区二区三区 | 国产精品二区一区二区aⅴ污介绍 | 亚洲热妇无码av在线播放 | 亚洲欧美精品伊人久久 | www一区二区www免费 | 成人试看120秒体验区 | 亚洲人成人无码网www国产 | 国产后入清纯学生妹 | 国产精品18久久久久久麻辣 | 最近免费中文字幕中文高清百度 | 色综合久久久无码网中文 | 国产乱子伦视频在线播放 | 少妇无码av无码专区在线观看 | 精品久久久无码人妻字幂 | 人妻夜夜爽天天爽三区 | 久久久久成人精品免费播放动漫 | 日韩av无码一区二区三区不卡 | 搡女人真爽免费视频大全 | 国产午夜手机精彩视频 | √天堂资源地址中文在线 | 国产av无码专区亚洲awww | 久激情内射婷内射蜜桃人妖 | 国产激情一区二区三区 | 麻豆人妻少妇精品无码专区 | 亚洲性无码av中文字幕 | 亚洲中文字幕在线无码一区二区 | 亚洲国产精品成人久久蜜臀 | 亚洲中文字幕乱码av波多ji | 国产九九九九九九九a片 | 在教室伦流澡到高潮hnp视频 | 国产一区二区三区四区五区加勒比 | 久久精品国产亚洲精品 | 欧美喷潮久久久xxxxx | 国内老熟妇对白xxxxhd | 国产三级精品三级男人的天堂 | 久久99精品久久久久久动态图 | 免费中文字幕日韩欧美 | 亚洲男人av香蕉爽爽爽爽 | 在教室伦流澡到高潮hnp视频 | 丁香花在线影院观看在线播放 | 麻豆md0077饥渴少妇 | 午夜精品久久久内射近拍高清 | 亚洲男人av香蕉爽爽爽爽 | 精品少妇爆乳无码av无码专区 | 377p欧洲日本亚洲大胆 | 熟妇人妻无乱码中文字幕 | 国产精品自产拍在线观看 | 人妻插b视频一区二区三区 | 午夜男女很黄的视频 | 99久久久国产精品无码免费 | 亚洲中文无码av永久不收费 | 天天摸天天透天天添 | 日本饥渴人妻欲求不满 | 爱做久久久久久 | 好爽又高潮了毛片免费下载 | 男女猛烈xx00免费视频试看 | 美女黄网站人色视频免费国产 | 日韩av无码一区二区三区不卡 | 国产无av码在线观看 | 中文字幕无码av波多野吉衣 | 成人毛片一区二区 | 精品人妻人人做人人爽夜夜爽 | 欧美 丝袜 自拍 制服 另类 | 国产综合久久久久鬼色 | 亚洲国产精品无码久久久久高潮 | 欧美高清在线精品一区 | 大色综合色综合网站 | 国产亚洲精品久久久ai换 | 精品无码一区二区三区爱欲 | 一本久道久久综合婷婷五月 | 奇米影视888欧美在线观看 | 久久国产精品偷任你爽任你 | 久在线观看福利视频 | 人人妻人人澡人人爽欧美一区 | 免费看男女做好爽好硬视频 | 内射老妇bbwx0c0ck | 久9re热视频这里只有精品 | 老司机亚洲精品影院无码 | 国内精品人妻无码久久久影院 | 澳门永久av免费网站 | 人妻少妇被猛烈进入中文字幕 | 国产成人亚洲综合无码 | 亚洲精品成a人在线观看 | 亚洲一区av无码专区在线观看 | 婷婷综合久久中文字幕蜜桃三电影 | 久久精品99久久香蕉国产色戒 | 网友自拍区视频精品 | 亚洲伊人久久精品影院 | 亚洲自偷自偷在线制服 | 色欲人妻aaaaaaa无码 | 国产精品久久久久无码av色戒 | 波多野42部无码喷潮在线 | 丰满护士巨好爽好大乳 | 丰满少妇弄高潮了www | 日韩精品无码免费一区二区三区 | 国产精品无码mv在线观看 | 国产精品久久久久久亚洲毛片 | 亚洲 日韩 欧美 成人 在线观看 | 国产无遮挡又黄又爽免费视频 | 亚洲色偷偷男人的天堂 | 亚洲色成人中文字幕网站 | 成人无码视频在线观看网站 | 国产精品va在线观看无码 | 国产极品美女高潮无套在线观看 | 1000部夫妻午夜免费 | 一本久道久久综合婷婷五月 | 中文字幕无线码免费人妻 | 狠狠噜狠狠狠狠丁香五月 | 久久精品国产大片免费观看 | 牲欲强的熟妇农村老妇女视频 | 亚洲成av人在线观看网址 | 国产成人精品一区二区在线小狼 | 男人和女人高潮免费网站 | 国产片av国语在线观看 | 青青草原综合久久大伊人精品 | 国产黄在线观看免费观看不卡 | 亚洲午夜无码久久 | 高潮毛片无遮挡高清免费 | 国产精品人人爽人人做我的可爱 | 99久久无码一区人妻 | 秋霞成人午夜鲁丝一区二区三区 | 成人性做爰aaa片免费看不忠 | 国产激情艳情在线看视频 | 日本一卡2卡3卡四卡精品网站 | 国产精品无码永久免费888 | 久久久中文字幕日本无吗 | 人妻尝试又大又粗久久 | 久久天天躁狠狠躁夜夜免费观看 | 国产亚洲精品久久久久久大师 | 狠狠色丁香久久婷婷综合五月 | 亚洲无人区一区二区三区 | 亚洲一区av无码专区在线观看 | 兔费看少妇性l交大片免费 | 欧美老人巨大xxxx做受 | 无码播放一区二区三区 | 少妇高潮喷潮久久久影院 | 天天摸天天碰天天添 | 亚洲码国产精品高潮在线 | 精品偷拍一区二区三区在线看 | 欧美成人高清在线播放 | 久久久久久a亚洲欧洲av冫 | 国产成人精品优优av | 国产精品久久久久久久9999 | 精品国产一区二区三区av 性色 | 成人欧美一区二区三区黑人 | 国内综合精品午夜久久资源 | 99久久精品日本一区二区免费 | 国产精品无套呻吟在线 | a国产一区二区免费入口 | 久久久久久av无码免费看大片 | 成人精品天堂一区二区三区 | 中文无码精品a∨在线观看不卡 | 国产成人无码区免费内射一片色欲 | 日韩人妻系列无码专区 | 国产精品久久精品三级 | 中文字幕+乱码+中文字幕一区 | 国产在线无码精品电影网 | 无码人妻av免费一区二区三区 | 乱人伦中文视频在线观看 | 中文字幕 人妻熟女 | 乱中年女人伦av三区 | 婷婷色婷婷开心五月四房播播 | 四虎永久在线精品免费网址 | 免费看男女做好爽好硬视频 | 丝袜人妻一区二区三区 | 国产suv精品一区二区五 | 久久国语露脸国产精品电影 | 国产精品久免费的黄网站 | 大乳丰满人妻中文字幕日本 | 无码人妻久久一区二区三区不卡 | 国产内射爽爽大片视频社区在线 | 国产精品无码mv在线观看 | 日日摸天天摸爽爽狠狠97 | 精品无人国产偷自产在线 | 亚洲小说图区综合在线 | 一个人免费观看的www视频 | 日欧一片内射va在线影院 | 精品乱子伦一区二区三区 | 午夜性刺激在线视频免费 | 99精品久久毛片a片 | 男女猛烈xx00免费视频试看 | 久久视频在线观看精品 |