亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

java實現的2048游戲完整實例

2024-07-13 10:15:53
字體:
來源:轉載
供稿:網友

本文實例講述了java實現的2048游戲。分享給大家供大家參考,具體如下:

先來看看運行效果:

java,2048游戲

具體代碼如下:

package awtDemo;import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.io.*;import java.util.*;@SuppressWarnings("serial")public class Game2048 extends JApplet{  @SuppressWarnings("unused") private static final int UP=0,DOWN=1,LEFT=2,RIGHT=3;  private static final int WID=150,SP=10;  @SuppressWarnings("unused") private int scores=0;  private static JLabel scoreLabel;  private boolean change,CheckMode=false,gameOverFlag=false,successFlag=false;  private int[] label={2,4,8,16,32,64,128};  private Color[] clo={      new Color(200,200,200),new Color(228,228,160),new Color(214,163,92),      new Color(234,124,72),new Color(240,84,77),new Color(255,68,53),new Color(200,200,64)  };  @SuppressWarnings("rawtypes") private Map cmap=new HashMap();  public static RectObject[][] rset=new RectObject[4][4];  public RectObject[][] list=new RectObject[4][4];  private My2048Panel myp;  @SuppressWarnings("rawtypes") private LinkedList saveList=new LinkedList();  private JButton goBackButton;  KeyListener kl=new KeyListener(){    public void keyPressed(KeyEvent e){      saveTheStep();      goBackButton.setVisible(true);      if(gameOverFlag==true){        return;      }      if(!aDirAble()){        gameOver();      }      int key=e.getKeyCode();      switch(key){      case KeyEvent.VK_UP:        change=false;        moveUp(true);        if(change==true){          getARandomRect();          //saveTheStep();        }        break;      case KeyEvent.VK_DOWN:        change=false;        moveDown(true);        if(change==true){          getARandomRect();          //saveTheStep();        }        break;      case KeyEvent.VK_LEFT:        change=false;        moveLeft(true);        if(change==true){          getARandomRect();          //saveTheStep();        }        break;      case KeyEvent.VK_RIGHT:        change=false;        moveRight(true);        if(change==true){          getARandomRect();          //saveTheStep();        }        break;      }      //saveTheStep();    }    public void keyTyped(KeyEvent e){}    public void keyReleased(KeyEvent e){}  };  class RectObject{    private int value;    public RectObject(){      value=0;    }    public RectObject(RectObject obj){      value=obj.value;    }    public boolean equals(Object inobj){      RectObject obj=(RectObject)inobj;      if(obj.value==value){        return true;      }      return false;    }  }  class Point{    int x;    int y;    public Point(int i,int j){      x=i;      y=j;    }  }  class My2048Panel extends JPanel{    private int[] xindex={SP,2*SP+WID,3*SP+2*WID,4*SP+3*WID};    private int[] yindex={SP,2*SP+WID,3*SP+2*WID,4*SP+3*WID};    @SuppressWarnings("deprecation") public void paintComponent(Graphics g){      //background      super.paintComponent(g);      for(int i=0;i<xindex.length;i++){        for(int j=0;j<yindex.length;j++){          g.setColor(Color.WHITE);          g.drawRoundRect(xindex[i], yindex[j], WID, WID, WID/5, WID/5);          g.setColor(new Color(197,183,129));          g.fillRoundRect(xindex[i], yindex[j], WID, WID, WID/5, WID/5);        }      }      //paint rectangle      for(int i=0;i<4;i++){        for(int j=0;j<4;j++){          if(rset[i][j]!=null){            g.setColor(Color.WHITE);            g.drawRoundRect(yindex[j], xindex[i], WID, WID, WID/5, WID/5);            if(rset[i][j].value<128){              g.setColor((Color)cmap.get(rset[i][j].value));            }else{              g.setColor((Color)cmap.get(128));            }            g.fillRoundRect(yindex[j], xindex[i], WID, WID, WID/5, WID/5);            g.setColor(Color.BLACK);            Font font=new Font("TimesRoman",Font.BOLD,50);            g.setFont(font);            FontMetrics fm=Toolkit.getDefaultToolkit().getFontMetrics(font);            int len=fm.stringWidth(""+rset[i][j].value);            int hg=fm.getHeight();            g.drawString(""+rset[i][j].value, yindex[j]+WID/2-len/2, xindex[i]+WID/2+hg/4);            if(rset[i][j].value==2048 && successFlag==false){              successFlag=true;              gameSuccess();            }          }        }      }    }  }  class GameOverPane extends JPanel{    public GameOverPane(int w,int h){      setSize(w,h);      //setOpaque(false);    }    @SuppressWarnings("deprecation") public void paintComponent(Graphics g){      super.paintComponent(g);      Font font=new Font("TimesRoman",Font.BOLD,80);      g.setFont(font);      FontMetrics fm=Toolkit.getDefaultToolkit().getFontMetrics(font);      int width=fm.stringWidth("Game Over");      int height=fm.getHeight();      g.setColor(new Color(255,0,0));      g.drawString("Game Over!", getWidth()/2-width/2, getHeight()/2-height/2);    }  }  class SuccessPane extends JPanel{    public SuccessPane(int w,int h){      setSize(w,h);      //setOpaque(false);    }    public void paintComponent(Graphics g){      super.paintComponent(g);      Font font=new Font("TimesRoman",Font.BOLD,80);      g.setFont(font);      @SuppressWarnings("deprecation")  FontMetrics fm=Toolkit.getDefaultToolkit().getFontMetrics(font);      int width=fm.stringWidth("Success!");      int height=fm.getHeight();      g.setColor(new Color(255,0,0));      g.drawString("Success!", getWidth()/2-width/2, getHeight()/2-height/2);    }  }  class LOGO extends JPanel{    public LOGO(int w ,int h){      setSize(w,h);    }    @SuppressWarnings("unused") public void paintComponent(Graphics g){      super.paintComponent(g);      Font font=new Font("TimesRoman",Font.BOLD,60);      g.setFont(font);      @SuppressWarnings("deprecation")  FontMetrics fm=Toolkit.getDefaultToolkit().getFontMetrics(font);      int width=fm.stringWidth("2048");      int height=fm.getHeight();      g.setColor(new Color(255,0,0));      g.drawString("2048", 20, getHeight()/2+20);    }  }  public class goBackListener implements ActionListener{    @SuppressWarnings("rawtypes") public void actionPerformed(ActionEvent e){      if(saveList.size()==0){        goBackButton.setVisible(false);        return;      }      ArrayList arr=(ArrayList)saveList.getLast();      scoreLabel.setText(""+arr.get(0));      for(int i=0;i<4;i++){        for(int j=0;j<4;j++){          int num=(int)arr.get(4*i+j+1);          if(num!=0){            rset[i][j]=new RectObject();            rset[i][j].value=num;          }else{            rset[i][j]=null;          }        }      }      saveList.removeLast();      repaint();    }  }  public class resetListener implements ActionListener{    public void actionPerformed(ActionEvent e){      refreshBest();      for(int i=0;i<4;i++){        for(int j=0;j<4;j++){          rset[i][j]=null;        }      }      scoreLabel.setText("0");      repaint();      getARandomRect();      getARandomRect();    }  }  //the applet init  public void init(){    Container cp=getContentPane();    cp.setLayout(null);    cp.setFocusable(true);    cp.addKeyListener(kl);    Font font=new Font("TimesNewman",Font.BOLD,30);    JLabel sl=new JLabel();    sl.setLayout(new GridLayout(2,1));    JLabel sllb=new JLabel("Scores");    sllb.setFont(font);    scoreLabel=new JLabel("0");    scoreLabel.setFont(font);    sl.add(sllb);    sl.add(scoreLabel);    int best=0;    try{      File file=new File("BestRecord");      if(file.exists()){        RandomAccessFile f=new RandomAccessFile(file,"rw");        best=f.readInt();        f.close();      }    }catch(FileNotFoundException e){      best=0;      e.printStackTrace();    }catch(IOException e){      best=0;      e.printStackTrace();    }    JLabel bsl=new JLabel();    bsl.setLayout(new GridLayout(2,1));    JLabel jl=new JLabel("Best");    jl.setFont(font);    JLabel jl1=new JLabel(""+best);    jl1.setFont(font);    bsl.add(jl);    bsl.add(jl1);    myp=new My2048Panel();    LOGO logo=new LOGO(0,0);    goBackButton=new JButton("UNDO");    goBackButton.setFont(font);    goBackButton.addActionListener(new goBackListener());    goBackButton.addKeyListener(kl);    JButton jb=new JButton("RESET");    jb.setFont(font);    jb.addActionListener(new resetListener());    jb.addKeyListener(kl);    sl.setBounds(500,20,200,80);    bsl.setBounds(300,20,200,80);    logo.setBounds(0, 0, 600, 100);    myp.setBounds(0,90,700,700);    goBackButton.setBounds(700,250,150,60);    jb.setBounds(700,450,150,60);    cp.add(sl);    cp.add(bsl);    cp.add(logo);    cp.add(myp);    cp.add(goBackButton);    cp.add(jb);    File f=new File("LASTRECORD");    if(f.exists()){      try{        RandomAccessFile file=new RandomAccessFile(f,"rw");        int num=file.readInt();        scoreLabel.setText(""+num);        for(int i=0;i<4;i++){          for(int j=0;j<4;j++){            num=file.readInt();            if(num!=0){              rset[i][j]=new RectObject();              rset[i][j].value=num;            }          }        }        file.close();      }catch(FileNotFoundException e){        e.printStackTrace();      }catch(IOException e){        e.printStackTrace();      }    }else{      getARandomRect();      getARandomRect();    }  }  @SuppressWarnings("unchecked") public Game2048(){    //saveTheStep();    for(int i=0;i<7;i++){      cmap.put(label[i], clo[i]);    }  }  //moveLeft  public void moveLeft(boolean flag){    clearList(list);    for(int i=0;i<4;i++){      int k=0;      for(int j=0;j<4;j++){        if(rset[i][j]!=null){          list[i][k++]=new RectObject(rset[i][j]);        }      }    }    for(int i=0;i<4 && flag;i++){      for(int j=0;j<3;j++){        if(list[i][j]!=null && list[i][j+1]!=null && list[i][j].value==list[i][j+1].value){          list[i][j].value*=2;          if(CheckMode==false){            int sum=Integer.parseInt(scoreLabel.getText());            sum+=list[i][j].value;            scoreLabel.setText(""+sum);          }          list[i][j+1]=null;          j++;        }      }    }    if(isChange()){      if(CheckMode==false){        copySet(rset,list);        repaint();        moveLeft(false);      }      change=true;    }else{      repaint();    }  }  //moveRight  public void moveRight(boolean flag){    clearList(list);    for(int i=0;i<4;i++){      int k=3;      for(int j=3;j>-1;j--){        if(rset[i][j]!=null){          list[i][k--]=new RectObject(rset[i][j]);        }      }    }    for(int i=0;i<4 && flag;i++){      for(int j=3;j>0;j--){        if(list[i][j]!=null && list[i][j-1]!=null && list[i][j].value==list[i][j-1].value){          list[i][j].value*=2;          if(CheckMode==false){            int sum=Integer.parseInt(scoreLabel.getText());            sum+=list[i][j].value;            scoreLabel.setText(""+sum);          }          list[i][j-1]=null;          j--;        }      }    }    if(isChange()){      if(CheckMode==false){        copySet(rset,list);        repaint();        moveRight(false);      }      change=true;    }else{      repaint();    }  }  //moveup  public void moveUp(boolean flag){    clearList(list);    for(int j=0;j<4;j++){      int k=0;      for(int i=0;i<4;i++){        if(rset[i][j]!=null){          list[k++][j]=new RectObject(rset[i][j]);        }      }    }    for(int j=0;j<4 && flag;j++){      for(int i=0;i<3;i++){        if(list[i][j]!=null && list[i+1][j]!=null && list[i][j].value==list[i+1][j].value){          list[i][j].value*=2;          if(CheckMode==false){            int sum=Integer.parseInt(scoreLabel.getText());            sum+=list[i][j].value;            scoreLabel.setText(""+sum);          }          list[i+1][j]=null;          i++;        }      }    }    if(isChange()){      if(CheckMode==false){        copySet(rset,list);        repaint();        moveUp(false);      }      change=true;    }else{      repaint();    }  }  //movedown  public void moveDown(boolean flag){    clearList(list);    for(int j=0;j<4;j++){      int k=3;      for(int i=3;i>-1;i--){        if(rset[i][j]!=null){          list[k--][j]=new RectObject(rset[i][j]);        }      }    }    for(int j=0;j<4 && flag;j++){      for(int i=3;i>0;i--){        if(list[i][j]!=null && list[i-1][j]!=null && list[i][j].value==list[i-1][j].value){          list[i][j].value*=2;          if(CheckMode==false){            int sum=Integer.parseInt(scoreLabel.getText());            sum+=list[i][j].value;            scoreLabel.setText(""+sum);          }          list[i-1][j]=null;          i--;        }      }    }    if(isChange()){      if(CheckMode==false){        copySet(rset,list);        repaint();        moveDown(false);      }      change=true;    }else{      repaint();    }  }  //other functions  private void copySet(RectObject[][] dst, RectObject[][] src){    for(int i=0;i<4;i++){      for(int j=0;j<4;j++){        dst[i][j]=src[i][j];      }    }  }  //detect whether rset is different from list or not  private boolean isChange(){    for(int i=0;i<4;i++){      for(int j=0;j<4;j++){        if(rset[i][j]!=null && list[i][j]!=null && !rset[i][j].equals(list[i][j])){          return true;        }        if(rset[i][j]!=null && list[i][j]==null){          return true;        }        if(rset[i][j]==null && list[i][j]!=null){          return true;        }      }    }    return false;  }  private void clearList(RectObject[][] s){    for(int i=0;i<s.length;i++){      for(int j=0;j<s[i].length;j++){        s[i][j]=null;      }    }  }  //get a random rectangle  @SuppressWarnings({ "unchecked", "rawtypes" }) public void getARandomRect(){    ArrayList list=new ArrayList();    for(int i=0;i<4;i++){      for(int j=0;j<4;j++){        if(rset[i][j]==null){          list.add(new Point(i,j));        }      }    }    if(list.size()==0 && !aDirAble()){      gameOver();      return;    }    Random rand=new Random();    int index=rand.nextInt(list.size());    Point loc=(Point)list.get(index);    index=rand.nextInt(2);    rset[loc.x][loc.y]=new RectObject();    if(index==1){      rset[loc.x][loc.y].value=4;    }else{      rset[loc.x][loc.y].value=2;    }  }  //detect whether there are other steps or not  public boolean aDirAble(){    CheckMode=true;    change=false;    moveLeft(true);    moveRight(true);    moveDown(true);    moveUp(true);    CheckMode=false;    if(change==true){      return true;    }else{      return false;    }  }  public void gameOver(){    gameOverFlag=true;    JPanel jl=new GameOverPane(myp.getWidth(),myp.getHeight());    jl.setBounds(0, 0, 700, 700);    JButton jb1=new JButton("Again");    Font font=new Font("TimesRoman",Font.BOLD,30);    jb1.setOpaque(false);    jb1.setFont(font);    JButton jb2=new JButton("Close");    jb2.setSize(jb1.getSize());    jb2.setOpaque(false);    jb2.setFont(font);    jb1.addActionListener(new ActionListener(){      public void actionPerformed(ActionEvent e){        scoreLabel.setText("0");        myp.remove(jl);        clearList(rset);        myp.validate();        getARandomRect();        getARandomRect();        repaint();        gameOverFlag=false;        refreshBest();      }    });    jb2.addActionListener(new ActionListener(){      public void actionPerformed(ActionEvent e){        refreshBest();        File f=new File("LASTRECORD");        if(f.exists()){          f.delete();        }        System.exit(0);      }    });    jl.add(jb1);    jl.add(jb2);    myp.add(jl);    jl.validate();  }  public void gameSuccess(){    JPanel jl=new SuccessPane(myp.getWidth(),myp.getHeight());    jl.setOpaque(false);    jl.setBounds(0, 0, 700, 700);    JButton jb1=new JButton("Continue");    Font font=new Font("TimesRoman",Font.BOLD,30);    jb1.setOpaque(false);    jb1.setFont(font);    JButton jb2=new JButton("Close");    jb2.setSize(jb1.getSize());    jb2.setOpaque(false);    jb2.setFont(font);    jb1.addActionListener(new ActionListener(){      public void actionPerformed(ActionEvent e){        myp.remove(jl);        myp.validate();        repaint();      }    });    jb2.addActionListener(new ActionListener(){      public void actionPerformed(ActionEvent e){        refreshBest();        System.exit(0);      }    });    jl.add(jb1);    jl.add(jb2);    myp.add(jl);    jl.validate();  }  @SuppressWarnings("unchecked") public void saveTheStep(){    if(saveList.size()<20){      @SuppressWarnings("rawtypes")  ArrayList arr=new ArrayList();      int score=Integer.parseInt(scoreLabel.getText());      arr.add(score);      for(int i=0;i<4;i++){        for(int j=0;j<4;j++){          if(rset[i][j]!=null){            arr.add(rset[i][j].value);          }else{            arr.add(0);          }        }      }      saveList.addLast(arr);    }else{      saveList.removeFirst();      saveTheStep();    }  }  public static String title(Object o){    String t=o.getClass().toString();    if(t.indexOf("class")!=-1){      t=t.substring(6);    }    return t;  }  public static void refreshBest(){    try {      int best=0;      File f=new File("BestRecord");      RandomAccessFile file;      if(f.exists()){        file=new RandomAccessFile(f,"rw");        best=file.readInt();        file.seek(0);      }else{        file=new RandomAccessFile(f,"rw");      }      //System.out.println("The Best score is "+best);      int cur=Integer.parseInt(scoreLabel.getText());      if(cur>best){        file.writeInt(cur);      }      file.close();    } catch (FileNotFoundException e1) {      e1.printStackTrace();    }catch(IOException e2){      e2.printStackTrace();    }  }  @SuppressWarnings("resource") public static void saveRecord(){    try{      RandomAccessFile file=new RandomAccessFile(new File("LASTRECORD"),"rw");      int score=Integer.parseInt(scoreLabel.getText());      file.writeInt(score);      for(int i=0;i<4;i++){        for(int j=0;j<4;j++){          if(rset[i][j]!=null){            file.writeInt(rset[i][j].value);          }else{            file.writeInt(0);          }        }      }    }catch(FileNotFoundException e){      e.printStackTrace();    }catch(IOException e){      e.printStackTrace();    }  }  public static void run(JApplet applet,int width,int height){    JFrame frame=new JFrame(title(applet));    frame.addWindowListener(new WindowAdapter(){      public void windowClosing(WindowEvent e){        refreshBest();        saveRecord();        //System.out.println("The score is "+scoreLabel.getText());      }    });    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    frame.getContentPane().add(applet);    frame.setSize(width,height);    applet.init();    applet.start();    frame.setVisible(true);  }  public static void main(String[] args){    run(new Game2048(), 900, 800);  }}

希望本文所述對大家java程序設計有所幫助。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲欧美日韩第一区| 91精品国产综合久久香蕉最新版| 日韩av三级在线观看| 欧美性xxxx极品高清hd直播| 欧美中文在线免费| 久久影视电视剧免费网站清宫辞电视| 91av视频导航| 久久久亚洲精选| 久久夜色精品亚洲噜噜国产mv| 92看片淫黄大片看国产片| 亚洲欧美日韩爽爽影院| 成人激情免费在线| 国产一区玩具在线观看| 国产精品99蜜臀久久不卡二区| 在线亚洲欧美视频| 中文字幕亚洲欧美日韩高清| 亚洲一区999| 国产精品久久77777| 欧美大尺度激情区在线播放| 国产精品日韩久久久久| 欧美一乱一性一交一视频| 国产精品一区二区久久久| 国产日本欧美在线观看| 欧美日韩不卡合集视频| 国产乱肥老妇国产一区二| 亚洲欧美综合另类中字| 精品欧美一区二区三区| 亚洲国产精品va在线看黑人动漫| 亚洲欧美第一页| 国产美女精品免费电影| 久久久久九九九九| 欧美日韩国产中文精品字幕自在自线| 中文字幕欧美日韩va免费视频| 亚洲精品久久久久久久久久久久久| 国产综合在线视频| 亚洲自拍欧美另类| 91av视频在线| 最近2019好看的中文字幕免费| 亚洲国产精品yw在线观看| 欧美福利视频在线观看| 亚州国产精品久久久| 亚洲精品资源美女情侣酒店| 国产综合福利在线| 久久久精品一区| 亚洲视频日韩精品| 欧美黄色片免费观看| 国产精品电影观看| 亚洲香蕉伊综合在人在线视看| 在线观看日韩专区| 欧洲美女7788成人免费视频| 国内精品在线一区| 91日本在线视频| 欧美日韩精品在线视频| 国产va免费精品高清在线观看| 日韩有码在线播放| 欧美日韩在线一区| 亚洲第一偷拍网| 97超级碰在线看视频免费在线看| 亚洲精品国产精品自产a区红杏吧| 成人妇女免费播放久久久| 亚洲精品美女久久| 欧美电影免费在线观看| 欧美怡春院一区二区三区| 亚洲精美色品网站| 91中文字幕一区| 精品一区二区电影| 欧美日韩亚洲一区二| 国产91ⅴ在线精品免费观看| 亚洲精品大尺度| 国产精品高潮呻吟久久av野狼| 一个色综合导航| 亚洲九九九在线观看| 欧美成人激情视频免费观看| 日韩欧美精品网址| 热re99久久精品国产66热| 欧日韩不卡在线视频| 欧美日韩国产一中文字不卡| 国产精品成av人在线视午夜片| 亚洲精品国产品国语在线| 亚州欧美日韩中文视频| 亚洲成人中文字幕| 亚洲毛片在线观看| 欧美日韩色婷婷| 国产精自产拍久久久久久蜜| 爽爽爽爽爽爽爽成人免费观看| 黑丝美女久久久| 亚洲电影中文字幕| 成人乱色短篇合集| 日韩美女免费视频| 亚洲女人被黑人巨大进入al| 日韩经典中文字幕在线观看| 中文字幕精品久久久久| 成人天堂噜噜噜| 亚洲国产精品久久91精品| 在线视频中文亚洲| 亚洲色图欧美制服丝袜另类第一页| 啊v视频在线一区二区三区| 亚洲综合中文字幕68页| 日韩在线观看高清| 亚洲风情亚aⅴ在线发布| 久久精品精品电影网| 欧美在线亚洲一区| 日本sm极度另类视频| 午夜精品久久久久久99热软件| 欧美精品18videosex性欧美| 欧美电影在线免费观看网站| 色综合老司机第九色激情| 欧美成人合集magnet| 午夜精品久久久久久久久久久久久| 在线视频日韩精品| 久久人人爽亚洲精品天堂| 久久99精品久久久久久青青91| 国产美女搞久久| 三级精品视频久久久久| 日韩美女av在线免费观看| 成人淫片在线看| 欧美专区中文字幕| 欧美成人精品在线视频| 国产在线观看不卡| 欧洲中文字幕国产精品| 久久精品99久久久久久久久| 欧美一级大片在线免费观看| 欧美电影在线免费观看网站| 久久久精品视频成人| 91豆花精品一区| 久久精品国产清自在天天线| 色婷婷av一区二区三区在线观看| 91久久精品国产91久久性色| 亚洲国产精品国自产拍av秋霞| 最近的2019中文字幕免费一页| 97在线视频免费播放| 成人美女av在线直播| 6080yy精品一区二区三区| 国内精品久久久久伊人av| 福利视频导航一区| 日韩精品免费观看| 欧洲中文字幕国产精品| 伊人久久大香线蕉av一区二区| 欧美日韩激情视频8区| 欧美成人免费全部| 欧美成人免费小视频| 久久久国产视频91| 欧美视频精品一区| 成人网欧美在线视频| 欧美专区国产专区| 欧美日韩免费在线| 国产精品一区二区久久| 亚洲精品videossex少妇| 91精品久久久久久久久久入口| 91精品视频在线看| 日韩欧美国产成人| 欧美另类极品videosbest最新版本| 久久久精品久久久| 91老司机精品视频| xvideos亚洲人网站| 亚洲二区在线播放视频| 亚洲第一偷拍网| 国内偷自视频区视频综合| www欧美日韩| 日本精品中文字幕| 91国偷自产一区二区三区的观看方式| 久久韩国免费视频| 久久夜色精品国产欧美乱| 日韩大片免费观看视频播放|