日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

java實現坦克大戰小游戲

瀏覽:173日期:2022-08-17 17:48:08

用java程序編寫的一個坦克大戰,可以實現兩人同時在線

需要代碼的可以私信聯系我

package com.mr.frame;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.Rectangle;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.awt.image.BufferedImage;import java.util.ArrayList;import java.util.List;import java.util.Random;import java.util.Vector;import javax.swing.JPanel;import com.mr.model.Base;import com.mr.model.Boom;import com.mr.model.Bot;import com.mr.model.Bullet;import com.mr.model.Level;import com.mr.model.Map;import com.mr.model.Tank;import com.mr.model.wall.Wall;import com.mr.type.GameType;import com.mr.type.TankType;import com.mr.util.ImageUtil;/** * 游戲面板 實際大小[794,572] * * @author www.mingrisoft.com * */public class GamePanel extends JPanel implements KeyListener { /** * 游戲界面刷新時間:20毫秒 */ public static final int FRESH = 20; private BufferedImage image;// 在面板中顯示的主圖片 private Graphics2D g2;// 圖片的繪圖對象 private MainFrame frame;// 主窗體 private GameType gameType;// 游戲模式 private Tank play1, play2;// 玩家1、玩家2 private boolean y_key, s_key, w_key, a_key, d_key, up_key, down_key, left_key, right_key, num1_key;// 按鍵是否按下標志,左側單詞是按鍵名 private int level;// 關卡值 private List<Bullet> bullets;// 所有子彈集合 private volatile List<Tank> allTanks;// 所有坦克集合 private List<Tank> botTanks;// 電腦坦克集合 private final int botCount = 20;// 電腦坦克總數 private int botReadyCount = botCount;// 準備出場的電腦坦克總數 private int botSurplusCount = botCount;// 電腦坦克剩余量 private int botMaxInMap = 6;// 場上最大電腦坦克數 private int botX[] = { 10, 367, 754 };// 電腦坦克出生的3個橫坐標位置 private List<Tank> playerTanks;// 玩家坦克集合 private volatile boolean finish = false;// 游戲是否結束 private Base base;// 基地 private List<Wall> walls;// 所有墻塊 private List<Boom> boomImage;// 坦克陣亡后的爆炸效果集合 private Random r = new Random();// 隨機數對象 private int createBotTimer = 0;// 生產電腦計時器 private Tank survivor;// (玩家)幸存者,用于繪制最后一個爆炸效果 /** * 游戲面板構造方法 * * @param frame * - 主窗體 * @param level * - 關卡 * @param gameType * - 游戲模式 */ public GamePanel(MainFrame frame, int level, GameType gameType) { this.frame = frame; this.level = level; this.gameType = gameType; setBackground(Color.WHITE);// 面板使用白色背景 init();// 初始化組件 Thread t = new FreshThead();// 創建游戲幀刷新線程 t.start();// 啟動線程 addListener();// 開啟監聽 } /** * 組件初始化 */ private void init() { bullets = new ArrayList<Bullet>();// 實例化子彈集合 allTanks = new ArrayList<>();// 實例化所有坦克集合 walls = new ArrayList<>();// 實例化所有墻塊集合 boomImage = new ArrayList<>();// 實例化爆炸效果集合 image = new BufferedImage(794, 572, BufferedImage.TYPE_INT_BGR);// 實例化主圖片,采用面板實際大小 g2 = image.createGraphics();// 獲取主圖片繪圖對象 playerTanks = new ArrayList<>();// 實例化玩家坦克集合 play1 = new Tank(278, 537, ImageUtil.PLAYER1_UP_IMAGE_URL, this, TankType.player1);// 實例化玩家1 if (gameType == GameType.TWO_PLAYER) {// 如果是雙人模式 play2 = new Tank(448, 537, ImageUtil.PLAYER2_UP_IMAGE_URL, this, TankType.player2);// 實例化玩家2 playerTanks.add(play2);// 玩家坦克集合添加玩家2 } playerTanks.add(play1);// 玩家坦克集合添加玩家1 botTanks = new Vector<>();// 實例化電腦坦克集合 botTanks.add(new Bot(botX[0], 1, this, TankType.bot));// 在第一個位置添加電腦 botTanks.add(new Bot(botX[1], 1, this, TankType.bot));// 在第二個位置添加電腦 botTanks.add(new Bot(botX[2], 1, this, TankType.bot));// 在第三個位置添加電腦 botReadyCount -= 3;// 準備出場的坦克總數減去初始化數量 allTanks.addAll(playerTanks);// 所有坦克集合添加玩家坦克集合 allTanks.addAll(botTanks);// 所有坦克集合添加電腦坦克集合 base = new Base(367, 532);// 實例化基地 initWalls();// 初始化地圖中的墻塊 } /** * 組件監聽 */ private void addListener() { frame.addKeyListener(this);// 主窗體載入鍵盤監聽,本類已實現KeyListener接口 } /** * 初始化地圖中的墻塊 */ private void initWalls() { Map map = Map.getMap(level);// 獲取當前關卡的地圖對象 walls.addAll(map.getWalls());// 墻塊集合添加當前地圖中所有墻塊 walls.add(base);// 墻塊集合添加基地 } /** * 重寫繪制組件方法 */ public void paint(Graphics g) { paintTankActoin();// 執行坦克動作 CreateBot();// 循環創建電腦坦克 paintImage();// 繪制主圖片 g.drawImage(image, 0, 0, this); // 將主圖片繪制到面板上 } /** * 繪制主圖片 */ private void paintImage() { g2.setColor(Color.WHITE);// 使用白色 g2.fillRect(0, 0, image.getWidth(), image.getHeight());// 填充一個覆蓋整個圖片的白色矩形 panitBoom();// 繪制爆炸效果 paintBotCount();// 在屏幕頂部繪制剩余坦克數量 panitBotTanks();// 繪制電腦坦克 panitPlayerTanks();// 繪制玩家坦克 allTanks.addAll(playerTanks);// 坦克集合添加玩家坦克集合 allTanks.addAll(botTanks);// 坦克集合添加電腦坦克集合 panitWalls();// 繪制墻塊 panitBullets();// 繪制子彈 if (botSurplusCount == 0) {// 如果所有電腦都被消滅 stopThread();// 結束游戲幀刷新線程 paintBotCount();// 在屏幕頂部繪制剩余坦克數量 g2.setFont(new Font('楷體', Font.BOLD, 50));// 設置繪圖字體 g2.setColor(Color.green);// 使用綠色 g2.drawString('勝 利 !', 250, 400);// 在指定坐標繪制文字 gotoNextLevel();// 進入下一關卡 } if (gameType == GameType.ONE_PLAYER) {// 如果是單人模式 if (!play1.isAlive()) {// 如果玩家陣亡 stopThread();// 結束游戲幀刷新線程 boomImage.add(new Boom(play1.x, play1.y));// 添加玩家1爆炸效果 panitBoom();// 繪制爆炸效果 paintGameOver();// 在屏幕中央繪制game over gotoPrevisousLevel();// 重新進入本關卡 } } else {// 如果是雙人模式 if (play1.isAlive() && !play2.isAlive()) {// 如果玩家1是 幸存者 survivor = play1;// 幸存者是玩家1 } else if (!play1.isAlive() && play2.isAlive()) { survivor = play2;// 幸存者是玩家2 } else if (!(play1.isAlive() || play2.isAlive())) {// 如果兩個玩家全部陣亡 stopThread();// 結束游戲幀刷新線程 boomImage.add(new Boom(survivor.x, survivor.y));// 添加幸存者爆炸效果 panitBoom();// 繪制爆炸效果 paintGameOver();// 在屏幕中央繪制game over gotoPrevisousLevel();// 重新進入本關卡 } } if (!base.isAlive()) {// 如果基地被擊中 stopThread();// 結束游戲幀刷新線程 paintGameOver();// 在屏幕中央繪制game over base.setImage(ImageUtil.BREAK_BASE_IMAGE_URL);// 基地使用陣亡圖片 gotoPrevisousLevel();// 重新進入本關卡 } g2.drawImage(base.getImage(), base.x, base.y, this);// 繪制基地 } /** * 在屏幕頂部繪制剩余坦克數量 */ private void paintBotCount() { g2.setColor(Color.BLUE);// 使用藍色 g2.drawString('敵方坦克剩余:' + botSurplusCount, 337, 15);// 在指定坐標繪制字符串 } /** * 在屏幕中央繪制game over */ private void paintGameOver() { g2.setFont(new Font('楷體', Font.BOLD, 50));// 設置繪圖字體 g2.setColor(Color.RED);// 設置繪圖顏色 g2.drawString('Game Over !', 250, 400);// 在指定坐標繪制文字 } /** * 繪制爆炸效果 */ private void panitBoom() { for (int i = 0; i < boomImage.size(); i++) {// 循環遍歷爆炸效果集合 Boom boom = boomImage.get(i);// 獲取爆炸對象 if (boom.isAlive()) {// 如果爆炸效果有效 boom.show(g2);// 展示爆炸效果 } else {// 如果爆炸效果無效 boomImage.remove(i);// 在集合中?h除此爆炸對象 i--;// 循環變量-1,保證下次循環i的值不會變成i+1,以便有效遍歷集合,且防止下標越界 } } } /** * 繪制墻塊 */ private void panitWalls() { for (int i = 0; i < walls.size(); i++) {// 循環遍歷墻塊集合 Wall w = walls.get(i);// 獲取墻塊對象 if (w.isAlive()) {// 如果墻塊有效 g2.drawImage(w.getImage(), w.x, w.y, this);// 繪制墻塊 } else {// 如果墻塊無效 walls.remove(i);// 在集合中?h除此墻塊 i--;// 循環變量-1,保證下次循環i的值不會變成i+1,以便有效遍歷集合,且防止下標越界 } } } /** * 繪制子彈 */ private void panitBullets() { for (int i = 0; i < bullets.size(); i++) {// 循環遍歷子彈集合 Bullet b = bullets.get(i);// 獲取子彈對象 if (b.isAlive()) {// 如果子彈有效 b.move();// 子彈執行移動操作 b.hitBase();// 子彈執行擊中基地判斷 b.hitWall();// 子彈執行擊中墻壁判斷 b.hitTank();// 子彈執行擊中坦克判斷 g2.drawImage(b.getImage(), b.x, b.y, this);// 繪制子彈 } else {// 如果子彈無效 bullets.remove(i);// 在集合中?h除此子彈 i--;// 循環變量-1,保證下次循環i的值不會變成i+1,以便有效遍歷集合,且防止下標越界 } } } /** * 繪制電腦坦克 */ private void panitBotTanks() { for (int i = 0; i < botTanks.size(); i++) {// 循環遍歷電腦坦克集合 Bot t = (Bot) botTanks.get(i);// 獲取電腦坦克對象 if (t.isAlive()) {// 如果坦克存活 t.go();// 電腦坦克展開行動 g2.drawImage(t.getImage(), t.x, t.y, this);// 繪制坦克 } else {// 如果坦克陣亡 botTanks.remove(i);// 集合中刪除此坦克 i--;// 循環變量-1,保證下次循環i的值不會變成i+1,以便有效遍歷集合,且防止下標越界 boomImage.add(new Boom(t.x, t.y));// 在坦克位置創建爆炸效果 decreaseBot();// 剩余坦克數量-1 } } } /** * 繪制玩家坦克 */ private void panitPlayerTanks() { for (int i = 0; i < playerTanks.size(); i++) {// 循環遍歷玩家坦克 Tank t = playerTanks.get(i);// 獲取玩家坦克對象 if (t.isAlive()) {// 如果坦克存活 g2.drawImage(t.getImage(), t.x, t.y, this);// 繪制坦克 } else {// 如果坦克陣亡 playerTanks.remove(i);// 集合中刪除此坦克 i--;// 循環變量-1,保證下次循環i的值不會變成i+1,以便有效遍歷集合,且防止下標越界 boomImage.add(new Boom(t.x, t.y));// 在坦克位置創建爆炸效果 } } } /** * 結束游戲幀刷新 */ private synchronized void stopThread() { frame.removeKeyListener(this);// 主窗體刪除本類鍵盤事件監聽對象 finish = true;// 游戲停止標志為true } /** * 游戲幀刷新線程 */ private class FreshThead extends Thread { public void run() {// 線程主方法 while (!finish) {// 如果游戲未停止 repaint();// 執行本類重繪方法 try { Thread.sleep(FRESH);// 指定時間后重新繪制界面 } catch (InterruptedException e) { e.printStackTrace(); } } } } /** * 添加電腦坦克,如果場上坦克未到達最大值,每4秒鐘之后在三個出生位置隨機選擇其一,創建電腦坦克。 */ private void CreateBot() { createBotTimer += FRESH;// 計時器按照刷新時間遞增 // “當場上電腦小于場上最大數時” 并且 “準備上場的坦克數量大于0” 并且 “計時器記錄已過去4秒鐘” if (botTanks.size() < botMaxInMap && botReadyCount > 0 && createBotTimer >= 4000) { int index = r.nextInt(3);// 隨機獲取0或1或2其中一個值 Rectangle bornRect = new Rectangle(botX[index], 1, 35, 35);// 創建坦克隨機出生區域 for (int i = 0, lengh = allTanks.size(); i < lengh; i++) {// 循環遍歷所有坦克集合 Tank t = allTanks.get(i);// 獲取坦克對象 if (t.isAlive() && t.hit(bornRect)) {// 如果場上存在與隨機位置重合并存活的坦克 return;// 結束方法 } } botTanks.add(new Bot(botX[index], 1, GamePanel.this, TankType.bot));// 在隨機位置創造電腦坦克 botReadyCount--;// 準備上場電腦數量-1 createBotTimer = 0;// 產生電腦計時器重新計時 } } /** * 進入下一關卡 */ private void gotoNextLevel() { Thread jump = new JumpPageThead(Level.nextLevel());// 創建跳轉到下一關卡的線程 jump.start();// 啟動線程 } /** * 重新進入本關卡 */ private void gotoPrevisousLevel() { Thread jump = new JumpPageThead(Level.previsousLevel());// 創建重新進入本關卡的線程 jump.start();// 啟動線程 } /** * 剩余坦克數量減少1 */ public void decreaseBot() { botSurplusCount--;// 電腦剩余數量-1 } /** * 按鍵按下時 */ @Override public void keyPressed(KeyEvent e) { switch (e.getKeyCode()) {// 判斷按下的按鍵值 case KeyEvent.VK_Y:// 如果按下的是“Y” y_key = true;// “Y”按下標志為true break; case KeyEvent.VK_W:// 如果按下的是“W” w_key = true;// “W”按下標志為true a_key = false;// “A”按下標志為false s_key = false;// “S”按下標志為false d_key = false;// “D”按下標志為false break; case KeyEvent.VK_A:// 如果按下的是“A” w_key = false;// “W”按下標志為false a_key = true;// “A”按下標志為true s_key = false;// “S”按下標志為false d_key = false;// “D”按下標志為false break; case KeyEvent.VK_S:// 如果按下的是“S” w_key = false;// “W”按下標志為false a_key = false;// “A”按下標志為false s_key = true;// “S”按下標志為true d_key = false;// “D”按下標志為false break; case KeyEvent.VK_D:// 如果按下的是“D” w_key = false;// “W”按下標志為false a_key = false;// “A”按下標志為false s_key = false;// “S”按下標志為false d_key = true;// “D”按下標志為true break; case KeyEvent.VK_HOME:// 如果按下的是“HOME”,效果同下 case KeyEvent.VK_NUMPAD1:// 如果按下的是小鍵盤數字1 num1_key = true;// 小鍵盤數字1按下標志為true break; case KeyEvent.VK_UP:// 如果按下的是“↑” up_key = true;// “↑”按下標志為true down_key = false;// “↓”按下標志為false right_key = false;// “→”按下標志為false left_key = false;// “←”按下標志為false break; case KeyEvent.VK_DOWN:// 如果按下的是“↓” up_key = false;// “↑”按下標志為false down_key = true;// “↓”按下標志為true right_key = false;// “→”按下標志為false left_key = false;// “←”按下標志為false break; case KeyEvent.VK_LEFT:// 如果按下的是“←” up_key = false;// “↑”按下標志為false down_key = false;// “↓”按下標志為false right_key = false;// “→”按下標志為false left_key = true;// “←”按下標志為true break; case KeyEvent.VK_RIGHT:// 如果按下的是“→” up_key = false;// “↑”按下標志為false down_key = false;// “↓”按下標志為false right_key = true;// “→”按下標志為true left_key = false;// “←”按下標志為false break; } } /** * 根據按鍵按下狀態,讓坦克執行相應動作 */ private void paintTankActoin() { if (y_key) {// 如果“Y”鍵是按下狀態 play1.attack();// 玩家1坦克攻擊 } if (w_key) {// 如果“W”鍵是按下狀態 play1.upward();// 玩家1坦克向上移動 } if (d_key) {// 如果“D”鍵是按下狀態 play1.rightward();// 玩家1坦克向右移動 } if (a_key) {// 如果“A”鍵是按下狀態 play1.leftward();// 玩家1坦克左移動 } if (s_key) {// 如果“S”鍵是按下狀態 play1.downward();// 玩家1坦克向下移動 } if (gameType == GameType.TWO_PLAYER) { if (num1_key) {// 如果“M”鍵是按下狀態 play2.attack();// 玩家2坦克攻擊 } if (up_key) {// 如果“←”鍵是按下狀態 play2.upward();// 玩家2坦克向上移動 } if (right_key) {// 如果“→”鍵是按下狀態 play2.rightward();// 玩家2坦克向右移動 } if (left_key) {// 如果“↑”鍵是按下狀態 play2.leftward();// 玩家2坦克左移動 } if (down_key) {// 如果“↓”鍵是按下狀態 play2.downward();// 玩家2坦克后移動 } } } /** * 按鍵抬起時 */ @Override public void keyReleased(KeyEvent e) { switch (e.getKeyCode()) { case KeyEvent.VK_Y:// 如果抬起的是“Y” y_key = false;// “Y”按下標志為false break; case KeyEvent.VK_W:// 如果抬起的是“W” w_key = false;// “W”按下標志為false break; case KeyEvent.VK_A:// 如果抬起的是“A” a_key = false;// “A”按下標志為false break; case KeyEvent.VK_S:// 如果抬起的是“S” s_key = false;// “S”按下標志為false break; case KeyEvent.VK_D:// 如果抬起的是“D” d_key = false;// “D”按下標志為false break; case KeyEvent.VK_HOME:// 如果抬起的是“HOME”,效果同下 case KeyEvent.VK_NUMPAD1:// 如果抬起的是小鍵盤1 num1_key = false;// 小鍵盤1按下標志為false break; case KeyEvent.VK_UP:// 如果抬起的是“↑” up_key = false;// “↑”按下標志為false break; case KeyEvent.VK_DOWN:// 如果抬起的是“↓” down_key = false;// “↓”按下標志為false break; case KeyEvent.VK_LEFT:// 如果抬起的是“←” left_key = false;// “←”按下標志為false break; case KeyEvent.VK_RIGHT:// 如果抬起的是“→” right_key = false;// “→”按下標志為false break; } } /** * 向子彈集合中添加子彈 * * @param b * - 添加的子彈 */ public void addBullet(Bullet b) { bullets.add(b);// 子彈集合中添加子彈 } /** * 獲取所有墻塊集合 * * @return 所有墻塊 */ public List<Wall> getWalls() { return walls; } /** * 獲取基地對象 * * @return 基地 */ public Base getBase() { return base; } /** * 獲取所有坦克集合 * * @return 所有坦克 */ public List<Tank> getTanks() { return allTanks; } /** * 游戲結束跳轉線程 */ private class JumpPageThead extends Thread { int level;// 跳轉的關卡 /** * 跳轉線程構造方法 * * @param level * - 跳轉的關卡 */ public JumpPageThead(int level) { this.level = level; } /** * 線程主方法 */ public void run() { try { Thread.sleep(1000);// 1秒鐘后 frame.setPanel(new LevelPanel(level, frame, gameType));// 主窗體跳轉到指定關卡 } catch (InterruptedException e) { e.printStackTrace(); } } } /** * 鍵入某按鍵事件 */ public void keyTyped(KeyEvent e) { // 不實現此方法,但不可刪除 }}

圖片

java實現坦克大戰小游戲

java實現坦克大戰小游戲

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
免费观看在线综合| 国产欧美大片| 午夜精品久久久久久久久久蜜桃| 国产精品亚洲欧美日韩一区在线 | 夜久久久久久| 妖精视频成人观看www| 久久不射网站| 中文字幕乱码亚洲无线精品一区| 一区二区电影| 中文一区一区三区免费在线观 | 国产综合婷婷| 亚洲欧美网站| 亚洲深深色噜噜狠狠爱网站 | 激情综合自拍| 国产亚洲网站| 日本少妇精品亚洲第一区| 久久精品凹凸全集| 久久久久九九精品影院| 成人亚洲欧美| 亚洲国产不卡| 蜜桃视频一区二区三区在线观看| 日韩国产在线观看一区| 欧美黄色一区| 日韩不卡免费高清视频| 久久香蕉精品| 青青草精品视频| 欧美激情麻豆| 三级小说欧洲区亚洲区| 久久高清免费观看| 日本欧美一区二区| 九九九精品视频| 999国产精品视频| 在线精品国产亚洲| 久久一区精品| 亚洲精品国产偷自在线观看| 18国产精品| av中文资源在线资源免费观看| 999精品色在线播放| 亚洲乱码久久| 高清一区二区| 在线一区免费| 久久精品 人人爱| 久久夜夜操妹子| 亚洲精品裸体| 91欧美国产| 喷白浆一区二区| 老牛国内精品亚洲成av人片| 欧美 日韩 国产一区二区在线视频| 亚洲精品乱码| 最近高清中文在线字幕在线观看1| 在线亚洲成人| 免费亚洲一区| 在线一区视频| 久久精品国产99国产| 一区在线视频观看| 免费在线日韩av| 日韩午夜黄色| 久久69成人| 亚洲综合福利| 日韩精品欧美| 久久不卡日韩美女| 在线综合欧美| 成人三级高清视频在线看| 亚欧成人精品| 久久高清免费| 国产精品啊v在线| 久久亚洲美女| 亚洲人成在线网站| 国产欧美日韩在线一区二区| 国户精品久久久久久久久久久不卡 | 久久av偷拍| 丝袜美腿成人在线| 国产精品久久久久蜜臀| 日本h片久久| 最新国产拍偷乱拍精品| 国产999精品在线观看| 日韩**一区毛片| 亚洲成人精选| 97se综合| 久久99偷拍| 五月国产精品| 欧美午夜精彩| 九九久久国产| 91福利精品在线观看| 亚洲免费高清| 久久九九精品| 成人影视亚洲图片在线| 久久国产生活片100| 蜜桃一区二区三区在线观看| 久久国产欧美| 97精品国产福利一区二区三区| 欧美一级一区| 亚洲精品一级二级三级| 好看的亚洲午夜视频在线| 日韩精品不卡一区二区| 麻豆免费精品视频| 日韩毛片一区| 日韩精品一级中文字幕精品视频免费观看| 久久美女精品| 日韩深夜视频| 国产成人免费| 精品美女视频 | 精品视频91| 免费在线观看一区| 欧美中文高清| 天海翼精品一区二区三区| 激情五月综合| 欧美亚洲国产一区| 久久久久一区| 91精品韩国| 日韩精品免费一区二区三区| 秋霞影院一区二区三区| 亚洲不卡系列| 久久久久.com| 免费视频亚洲| 不卡中文字幕| 欧美精品黄色| 一本色道精品久久一区二区三区| 黄色成人精品网站| 夜夜精品视频| 性欧美精品高清| 亚洲综合日本| 五月天综合网站| 99pao成人国产永久免费视频 | 9色国产精品| 蜜桃传媒麻豆第一区在线观看| 一区二区三区四区日韩| 亚洲精品一级| 国产精品玖玖玖在线资源| 国产精品午夜一区二区三区| 国产精品亲子伦av一区二区三区 | 999久久久精品国产| 欧美综合另类| 欧美日韩国产在线观看网站| 影音先锋久久| 亚洲ww精品| 久久精品72免费观看| 国产极品模特精品一二| 国精品产品一区| 久久国产欧美| 视频一区视频二区在线观看| 丝瓜av网站精品一区二区| 日韩在线观看一区二区三区| 日韩欧美激情电影| 欧美黑人做爰爽爽爽| 国产自产自拍视频在线观看| 色天使综合视频| 亚洲中字黄色| 国产调教精品| 日本一区二区免费高清| 久久精品国产大片免费观看| 丝袜美腿高跟呻吟高潮一区| 久久国产人妖系列| 国产成人久久精品麻豆二区| 91精品啪在线观看国产18| 亚洲一区中文| 国产日韩欧美在线播放不卡| 精品成av人一区二区三区| 日韩欧美午夜| 欧美午夜不卡| 欧美欧美黄在线二区| 高清在线一区| 亚洲一区中文| 国产福利亚洲| 1000部精品久久久久久久久| 亚洲免费一区三区| 日韩不卡一区| 亚洲欧美高清| 麻豆视频一区二区| 欧美日韩国产免费观看| 青青草精品视频| 日韩精品欧美| 日韩av电影一区| 成人av三级| 免费在线视频一区| 麻豆一区二区在线| 国产精品美女| 麻豆精品99| 欧美在线亚洲综合一区| 国产亚洲欧美日韩精品一区二区三区 | 日本亚洲视频| a日韩av网址| 日韩精品福利一区二区三区| 女生影院久久| 97久久精品| 成人羞羞在线观看网站| 欧美另类中文字幕| 99久久亚洲精品蜜臀| 欧美日韩亚洲一区| 9久re热视频在线精品| 国产一区二区三区国产精品| 蜜臀a∨国产成人精品| 中文字幕在线视频久| 日韩精品导航| 国产精品88久久久久久| 久久精品一区二区三区中文字幕| 亚洲一区二区三区免费在线观看| 麻豆精品在线视频| 亚洲aa在线| 性欧美videohd高精|