久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2574|回復: 0
打印 上一主題 下一主題
收起左側

單片機Proteus仿真做小游戲“俄羅斯方塊”源程序

[復制鏈接]
跳轉到指定樓層
樓主


單片機源程序如下:
  1. #include "t6963c.h"
  2. #include "typedef.h"
  3. #include "key.h"

  4. #define X_START 5
  5. #define Y_START 0
  6. #define MIN_SLOW_SPEED  300
  7. #define BX_START  30
  8. #define BY_START  15
  9. #define Nothing   100


  10. //全局數據
  11. code uchar Game_Char[]={0x27,0x41,0x4d,0x45};
  12. code uchar Over_Char[]={0x2f,0x56,0x45,0x52};
  13.                                                             
  14. static uchar xx,yy;         //方塊的位置
  15. static uint  Game_Score=0;
  16. static uchar xdata Platform[14][21];    //游戲平臺數據
  17. static uchar This_shape;                                //當前形狀
  18. static uchar Next_shape=0;
  19. static uint  Game_Speed=MIN_SLOW_SPEED;         //等級速度,正常情況,方塊下降的速度
  20. static uchar Game_Stop=1;
  21. static uchar Game_Level=0;

  22. /////////////////////////////////////////////////////////////////////////////////
  23. /////////////////////////////////////////////////////////////////////////////////
  24. /////////方塊形狀的定義//////////////////////////////////////////////////////////
  25. /////////////////////////////////////////////////////////////////////////////////
  26. struct POINT{
  27.               uchar x;
  28.               uchar y;
  29.              };

  30. struct SHAPE{
  31.                struct POINT point[4];
  32.                            uchar next;        //下一個形狀
  33.                          }


  34. xdata shape[19]={

  35.                    { 1,0,0,1,1,1,2,1,1  },
  36.                                    { 1,0,1,1,2,1,1,2,2  },
  37.                                    { 0,0,1,0,2,0,1,1,3  },
  38.                                    { 1,0,0,1,1,1,1,2,0  },
  39.                                     
  40.                                    { 1,0,2,0,1,1,1,2,5  },
  41.                                    { 0,0,1,0,2,0,2,1,6  },
  42.                                    { 2,0,2,1,2,2,1,2,7  },
  43.                                    { 0,0,0,1,1,1,2,1,4  },

  44.                                    { 1,0,2,0,2,1,2,2,9  },
  45.                                    { 2,0,0,1,1,1,2,1,10 },
  46.                                    { 1,0,1,1,1,2,2,2,11 },
  47.                                    { 0,0,1,0,2,0,0,1,8  },

  48.                                    { 0,0,0,1,1,1,1,2,13 },
  49.                                    { 1,0,2,0,0,1,1,1,12 },

  50.                                    { 2,0,1,1,2,1,1,2,15 },
  51.                                    { 0,0,1,0,1,1,2,1,14 },

  52.                                    { 1,0,1,1,1,2,1,3,17 },
  53.                                    { 0,1,1,1,2,1,3,1,16 },

  54.                                    { 1,0,2,0,1,1,2,1,18 },         
  55.                                             
  56.                                 };   

  57. ////////////////////////////////////////////////////////////////////////////
  58. //**************************************************************************
  59. //= 函數原型:void Init_GamePlatform()
  60. //= 功    能: 初始化游戲平臺
  61. //= 參    數: 無                        
  62. //= 返 回 值: 無
  63. //= 函數性質:公有函數
  64. //= 注    意:
  65. //***************************************************************************
  66. void Show_score(uchar);
  67. void Init_GamePlatform()
  68. {
  69.   uchar i;
  70.   uchar j;
  71.   uchar N_Hanzi;

  72.   Wr_line(1,33,13,64,1 );        //初始化游戲平臺邊界        畫游戲區域
  73.   Wr_line(1,33,14,64,1 );   //畫上橫線
  74.   Wr_line(0,33,15,100,1);
  75.   Wr_line(0,34,15,100,1);  //畫左豎線
  76.   Wr_line(1,33,115,64,1);  
  77.   Wr_line(1,33,116,64,1);  //畫下橫線
  78.   Wr_line(0,95,15,100,1);
  79.   Wr_line(0,96,15,100,1);  //畫右豎線
  80. //--------------------------------------------------------
  81.   for(i=1;i<13;i++)                //游戲平臺數據清零
  82.   {
  83.     for(j=0;j<20;j++)
  84.           {
  85.             Platform[i][j]=0;
  86.           }
  87.    }
  88.    for(i=1;i<13;i++)
  89.    {
  90.       Platform[i][20]=1;   //游戲平臺最下面一行的每一個方塊位置為1,作為下邊界
  91.         }

  92.    for(j=0;j<20;j++)                //游戲平臺左右方塊位置置1,作為左右邊界
  93.    {
  94.       Platform[0][j]=1;
  95.           Platform[13][j]=1;
  96.    }
  97. //---------------------------------------------------------
  98.   N_Hanzi=0;            
  99.   for(j=3;j<=12;j=j+2)           //輸入“馮燕輝制作”漢字
  100.   {
  101.      hanzhi(1,j,N_Hanzi,1);
  102.          N_Hanzi++;   //指向下一個漢字
  103.   }

  104.   hanzhi(13,3,6,1);         //輸入“分”漢字
  105.   hanzhi(13,8,8,1);   //輸入“級”漢字

  106.   Show_score(0);        //顯示初始分數
  107.   Show_num(13,11,Game_Level);         //顯示初始等級水平
  108.   Game_Speed=MIN_SLOW_SPEED/(Game_Level+1);  //根據水平確定速度

  109. //------------------------------------------------------------------
  110.   Game_Score=0;
  111.   xx=X_START ;
  112.   yy=Y_START ;
  113. }
  114. ////////////////////////Init_Game/////////////////////
  115. void Init_Game()
  116. {
  117.   Game_Stop=1;
  118.   Init_GamePlatform();
  119.   hanzhi(7,3,9,1);         //輸入“按”漢字
  120.   Show_num(7,6,7);         //顯示7
  121.   hanzhi(7,8,10,1);         //輸入“開”漢字
  122.   hanzhi(7,10,11,1);         //輸入“始”漢字
  123. }
  124. //**************************************************************************
  125. //= 函數原型:void XiaoFengKuai(uchar x,uchar y,uchar mode)
  126. //= 功    能: 顯示一個小方塊
  127. //= 參    數: 小方塊的橫x,堅坐標y,mode=1:顯示小方塊,mode=0:刪除小方塊                        
  128. //= 返 回 值:
  129. //= 函數性質:私有函數
  130. //= 注    意:
  131. //***************************************************************************
  132. void XiaoFengKuai(uchar x,uchar y,bit mode)
  133. {
  134.    uchar x1=5*x+BX_START;        //將方塊在平臺的位置轉化成LCD的點坐標(地址轉換)
  135.    uchar y1=5*y+BY_START;         
  136.    uchar i;

  137.    if(mode==1)
  138.    {

  139.        for(i=0;i<5;i++)
  140.        {
  141.           Point(x1+i,y1,1); //畫一條橫線
  142.        }


  143.                y1+=4;

  144.         for(i=0;i<5;i++)
  145.         {
  146.            Point(x1+i,y1,1); //畫第二條橫線
  147.          }

  148.         for(i=0;i<5;i++)
  149.         {
  150.            Point(x1,y1-i,1); //畫第1條堅線
  151.          }

  152.          x1+=4;

  153.         for(i=0;i<5;i++)
  154.         {
  155.            Point(x1,y1-i,1); //畫第2條堅線
  156.          }

  157.         y1-=4;
  158.         for(i=0;i<5;i++)
  159.         {
  160.            Point(x1-i,y1+i,1); //畫斜線
  161.         }
  162.    }

  163.   else
  164.   {
  165.              for(i=0;i<5;i++)
  166.         {
  167.           Point(x1+i,y1,0); //畫一條橫線
  168.               }

  169.                y1+=4;
  170.         for(i=0;i<5;i++)
  171.          {
  172.            Point(x1+i,y1,0); //畫第二條橫線
  173.          }

  174.          for(i=0;i<5;i++)
  175.          {
  176.             Point(x1,y1-i,0); //畫第1條堅線
  177.           }

  178.          x1+=4;
  179.         for(i=0;i<5;i++)
  180.           {
  181.              Point(x1,y1-i,0); //畫第2條堅線
  182.           }

  183.         y1-=4;
  184.         for(i=0;i<5;i++)
  185.          {
  186.            Point(x1-i,y1+i,0); //畫斜線
  187.          }
  188.         }
  189. }
  190. //////////////////////////////////////////////////////////////////////////
  191. ////////////////左沖突檢測//////////////////////////////////////////////
  192. bit Left_Anti()
  193. {
  194.   uchar i;
  195.   for(i=0;i<4;i++)
  196.         {
  197.           if(Platform[xx+shape[This_shape].point[i].x-1][yy+shape[This_shape].point[i].y]==1)
  198.             return 1;
  199.         }
  200.   return 0;
  201. }           

  202. ////////////////右沖突檢測///////////////////////////////////////////
  203. bit Right_Anti()
  204. {
  205.   uchar i;
  206.   for(i=0;i<4;i++)
  207.         {
  208.           if(Platform[xx+shape[This_shape].point[i].x+1][yy+shape[This_shape].point[i].y]==1)
  209.             return 1;
  210.         }                           
  211.   return 0;

  212. }

  213. ////////////////////////////////////////下沖突檢測//////////////////////////
  214. bit Bottom_Anti()
  215. {
  216.    uchar i;
  217.    for(i=0;i<4;i++)
  218.         {
  219.           if(Platform[xx+shape[This_shape].point[i].x][yy+shape[This_shape].point[i].y+1]==1)
  220.             return 1;
  221.     }
  222.   return 0;                          
  223. }
  224. //////////////////////////////////改變形狀時產生的沖突檢測////////////////////
  225. bit Change_Shape_Anti()
  226. {
  227.    uchar i;
  228.    for(i=0;i<4;i++)
  229.         {
  230.           if(Platform[xx+shape[shape[This_shape].next].point[i].x][yy+shape[shape[This_shape].next].point[i].y]==1)
  231.             return 1;           //檢測一個形狀的沖突情況
  232.     }
  233.    return 0;
  234. }
  235. //////////////////////////////////產生一個隨機數,返回一個隨機數///////////////
  236. uchar Random()
  237. {
  238.   static uchar m;
  239.   m+=49;
  240.   return (m%19);
  241. }

  242. //////////////計分函數,參數為 消行行數n///////////////////////////////////////

  243. void Show_score(uchar n)
  244. {
  245.   Game_Score=Game_Score+10*n;

  246.   if(Game_Score<10)
  247.   {
  248.      Show_num(13,6,Game_Score%10);                //顯示個位
  249.   }
  250.   else if(Game_Score<100)
  251.   {  
  252.      Show_num(14,6,Game_Score%10);
  253.          Show_num(13,6,Game_Score/10%100);        //顯示個位,十位
  254.   }
  255.   else if(Game_Score<1000)
  256.   {
  257.      Show_num(14,6,Game_Score%10);
  258.          Show_num(13,6,Game_Score/10%10);
  259.          Show_num(12,6,Game_Score/100%10);        //顯示個位 ,十位,百位
  260.   }
  261.   else
  262.   {  
  263.          Show_num(15,6,Game_Score%10);
  264.          Show_num(14,6,Game_Score/10%10);
  265.          Show_num(13,6,Game_Score/100%10);        //顯示個位 ,十位,百位,千位
  266.          Show_num(12,6,Game_Score/1000);
  267.   }

  268.   if(Game_Score%1000==0)
  269.   {
  270.     if(Game_Score>0)
  271.         {
  272.        Game_Level++;
  273.        if(Game_Level==10)
  274.            {
  275.               Game_Stop=1;
  276.               hanzhi(7,5,12,1);         //        輸出“太棒了"
  277.           hanzhi(7,7,13,1);         
  278.                   hanzhi(7,9,14,1);
  279.                   
  280.            }
  281.        Show_num(13,11,Game_Level);         //顯示水平
  282.         
  283.     }
  284.   }
  285. }

  286. //**************************************************************************
  287. //= 函數原型:void Undisplay_line()
  288. //= 功    能: 消除行
  289. //= 參    數: 無                        
  290. //= 返 回 值: 無
  291. //= 函數性質:私有函數
  292. //= 注    意:
  293. //***************************************************************************   
  294. void UnDisplay_line()
  295. {
  296.    uchar Del_Line;      //標識要刪除的行
  297.    uchar Del_Line_Num=0;     //標識刪除的行數
  298.    uchar i,j,k;
  299.    bit HavePoint;                    //標識一行中是否有空白點

  300.    for(i=0;i<4;i++)
  301.    {
  302.       for(j=1;j<13;j++)
  303.           {
  304.              if(Platform[j][yy+i]==0)
  305.                     break;                   //如果這一行中有一個為空,則退出這一行的循環
  306.                  else if(j==12)
  307.                  {
  308.                     Del_Line=yy+i;                 //確定要刪除的行
  309.                         if(Del_Line<20)
  310.                         {
  311.                            Del_Line_Num++;                   //計算共刪除的行數
  312.                         for(k=1;k<13;k++)
  313.                         {
  314.                             XiaoFengKuai(k,Del_Line,0);           //刪除行
  315.                                 Platform[k][Del_Line]=0;         //平臺數據清零
  316.                         }
  317.                         while(1)     //下移
  318.                         {
  319.                            HavePoint=0;
  320.                            for(k=1;k<13;k++)
  321.                            {
  322.                               if(Platform[k][Del_Line-1]==1)
  323.                                   {
  324.                                      HavePoint=1;            //標識這一行有要下移的點
  325.                                      XiaoFengKuai(k,Del_Line-1,0);           //刪除小方塊
  326.                                          Platform[k][Del_Line-1]=0;         //平臺數據清零
  327.                                          XiaoFengKuai(k,Del_Line,1) ;          //將小方塊下移
  328.                                          Platform[k][Del_Line]=1;         //平臺數據置1,表明此位置已被占用
  329.                                    }
  330.                            }
  331.                            if(HavePoint==0) break;  //沒有要下移的行,退出本循環
  332.                            Del_Line--;   //下移上一行
  333.                         }
  334.                         }
  335.                  }
  336.       }               
  337.    }
  338.    if(Del_Line_Num)
  339.          {
  340.             Show_score(Del_Line_Num);          //刷新分數顯示
  341.          }
  342. }                           
  343.                            
  344. //**************************************************************************
  345. //= 函數原型:void Show_shape(uchar x1,uchar y1,uchar Tshape,bit mode)
  346. //= 功    能: 顯示一個方塊形狀或刪除一個方塊形狀
  347. //= 參    數: (x1,y1)為顯示位置,Tshape為顯示的形狀,mode=1為顯示,mode=0不顯示                        
  348. //= 返 回 值:
  349. //= 函數性質:私有函數
  350. //= 注    意:
  351. //***************************************************************************
  352. void Show_shape(uchar x1,uchar y1,uchar Tshape,bit mode)
  353. {
  354.   if(mode==1)
  355.   {

  356.      XiaoFengKuai(x1+shape[Tshape].point[0].x,y1+shape[Tshape].point[0].y,1);         //顯示形狀
  357.          XiaoFengKuai(x1+shape[Tshape].point[1].x,y1+shape[Tshape].point[1].y,1);
  358.          XiaoFengKuai(x1+shape[Tshape].point[2].x,y1+shape[Tshape].point[2].y,1);
  359.          XiaoFengKuai(x1+shape[Tshape].point[3].x,y1+shape[Tshape].point[3].y,1);
  360.   }
  361.   else
  362.   {
  363.      XiaoFengKuai(x1+shape[Tshape].point[0].x,y1+shape[Tshape].point[0].y,0);  //刪除形狀
  364.          XiaoFengKuai(x1+shape[Tshape].point[1].x,y1+shape[Tshape].point[1].y,0);
  365.          XiaoFengKuai(x1+shape[Tshape].point[2].x,y1+shape[Tshape].point[2].y,0);
  366.          XiaoFengKuai(x1+shape[Tshape].point[3].x,y1+shape[Tshape].point[3].y,0);
  367.   }
  368. }

  369. //**************************************************************************
  370. //= 函數原型:void Fangkuai_down()
  371. //= 功    能: 方塊下降處理
  372. //= 參    數:                        
  373. //= 返 回 值:
  374. //= 函數性質:公有函數
  375. //= 注    意:
  376. //***************************************************************************   
  377. static uint DSpeed=MIN_SLOW_SPEED;                   //標識下降速度
  378. static uint Now_Speed=MIN_SLOW_SPEED;         //當前速度
  379. void Fangkuai_down()
  380. {
  381.   uchar i;
  382.   static bit New_shape=1;                 //標識是否要產生新形狀
  383.   if(Game_Stop==1) return;
  384.   if(New_shape==1)
  385.   {
  386.     New_shape=0;
  387.     xx=X_START;
  388.         yy=Y_START;
  389.     This_shape=Next_shape;                            //當前方塊等于預方塊
  390.         Show_shape(15,18,Next_shape,0);            // 產生一下個方塊前,將預方塊刪除
  391.         Next_shape=Random();                        //產生下一個方塊
  392.         Show_shape(xx,yy,This_shape,1);                 //顯示當前方塊
  393.         Show_shape(15,18,Next_shape,1);                 //預顯示下一個方塊
  394.         if(Bottom_Anti())
  395.         {
  396.            Game_Stop=1;
  397.        Show_Image(35,15,94,114,0);           //清屏
  398.            char_wr(6,6,Game_Char,0,4); //顯示Game
  399.            char_wr(6,8,Over_Char,0,4); //顯示over
  400.            return;
  401.         }
  402.   }
  403.   else
  404.   {
  405.       if(DSpeed==0)
  406.             {
  407.                DSpeed=Now_Speed;        //確定方塊下落的速度
  408.                if(Bottom_Anti())
  409.                  {
  410.                      New_shape=1;//產生新的形狀
  411.                     for(i=0;i<4;i++)
  412.                      {
  413.                        Platform[xx+shape[This_shape].point[i].x][yy+shape[This_shape].point[i].y]=1;//寫入平臺
  414.                           
  415.                          }
  416.                                  UnDisplay_line();//消行計分
  417.                                  return;
  418.               }
  419.                else
  420.                  {
  421.                    Show_shape(xx,yy,This_shape,0); //刪除當前形狀
  422.                    yy++;
  423.                Show_shape(xx,yy,This_shape,1); //顯示形狀(形狀下移一個位置)
  424.                    return;
  425.                   }
  426.                }
  427.       else
  428.        {
  429.           DSpeed--;
  430.               
  431.         }
  432.         
  433.     }
  434. }

  435. //**************************************************************************
  436. //= 函數原型:void Fangkuai_Control()
  437. //= 功    能: 方塊游戲控制
  438. //= 參    數:                        
  439. //= 返 回 值:
  440. //= 函數性質:公有函數
  441. //= 注    意:
  442. //***************************************************************************
  443. #define Move_Left    4
  444. #define Move_Right          6
  445. #define Add_Speed    5
  446. #define Change_Shape 8
  447. #define Game_Star    7
  448. #define Game_Pause   9

  449. void Fangkuai_Control()
  450. {
  451.            
  452.          switch(Key)    //消息處理
  453.          {
  454.              case  Move_Left:
  455.                        {
  456.                               Key=Nothing;  //信息已被處理,拋棄它
  457.                       if(!Left_Anti())
  458.                       {
  459.                                 Show_shape(xx,yy,This_shape,0); //刪除當前形狀
  460.                          xx--;
  461.                              Show_shape(xx,yy,This_shape,1); //顯示移動后的形狀
  462.                       }
  463.                            }break;
  464.              case  Move_Right:
  465.                       {
  466.                              Key=Nothing;  //信息已被處理,拋棄它
  467.                      if(!Right_Anti())
  468.                      {
  469.                                Show_shape(xx,yy,This_shape,0); //刪除當前形狀
  470.                         xx++;
  471.                             Show_shape(xx,yy,This_shape,1); //顯示移動后的形狀
  472.                      }
  473.                           }break;
  474.              case  Add_Speed:
  475.                        {
  476.                                Key=Nothing;                  //信息已被處理,拋棄它
  477.                                    if(Game_Stop==1)
  478.                                         {
  479.                                            if(Game_Level==0)
  480.                                            {
  481.                                               Game_Level=9;
  482.                                                   Show_num(13,11,9);         //顯示等級水平
  483.                                                   Game_Speed=MIN_SLOW_SPEED/(Game_Level+1);  //根據水平確定速度
  484.                                                 }
  485.                                                 else
  486.                                                 {
  487.                                                    Game_Level--;
  488.                                                    Show_num(13,11,Game_Level);         //顯示等級水平
  489.                                                    Game_Speed=MIN_SLOW_SPEED/(Game_Level+1);  //根據水平確定速度
  490.                                                 }
  491.                                          }
  492.                                         else
  493.                                         {
  494.                                       Now_Speed=1;                           //調整位置后,加速下降
  495.                                       DSpeed=Now_Speed;
  496.                                         }
  497.                            }break;
  498.              case  Change_Shape:
  499.                         {
  500.                                     Key=Nothing;           //信息已被處理,拋棄它
  501.                                         if(Game_Stop==1)
  502.                                         {
  503.                                            if(Game_Level==9)
  504.                                            {
  505.                                               Game_Level=0;
  506.                                                   Show_num(13,11,0);         //顯示等級水平
  507.                                                   Game_Speed=MIN_SLOW_SPEED/(Game_Level+1);  //根據水平確定速度
  508.                                                 }
  509.                                                 else
  510.                                                 {
  511.                                                    Game_Level++;
  512.                                                    Show_num(13,11,Game_Level);         //顯示等級水平
  513.                                                    Game_Speed=MIN_SLOW_SPEED/(Game_Level+1);  //根據水平確定速度
  514.                                                 }
  515.                                          }
  516.                                         else
  517.                                         {

  518.                                        if(!Change_Shape_Anti())
  519.                                        {
  520.                                           Show_shape(xx,yy,This_shape,0); //刪除當前形狀
  521.                                       This_shape=shape[This_shape].next;
  522.                                           Show_shape(xx,yy,This_shape,1); //顯示變化后的形狀
  523.                                         }
  524.                                         }
  525.                             }break;
  526.                 case  Game_Star:
  527.                       {
  528.                              Key=Nothing;                  //信息已被處理,拋棄它
  529.                                  ClrGraphic();
  530.                                  Show_Image(35,15,94,114,0);
  531.                              Init_GamePlatform();
  532.                                  Game_Stop=0;
  533.                           }break;
  534.                 case  Game_Pause:
  535.                       {
  536.                              Key=Nothing;                  //信息已被處理,拋棄它
  537.                              Game_Stop=!Game_Stop;
  538.                           }
  539.                 default:Now_Speed=Game_Speed;
  540.           }
  541. }
復制代碼

2.jpg (20.1 KB, 下載次數: 170)

2.jpg

俄羅斯方塊.rar

129.36 KB, 下載次數: 11, 下載積分: 黑幣 -5

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久久久久影院 | 亚洲精品自在在线观看 | 国产在线观看一区二区 | 久热国产精品 | 久草99| 日韩在线 | 日韩影院一区 | 色射综合 | av日韩一区 | 国产三级精品三级在线观看四季网 | 亚洲一区二区三区视频在线 | 亚洲高清视频一区 | 日韩一区和二区 | 国产精品欧美一区二区三区不卡 | 日本天天操 | 成人自拍视频 | 国户精品久久久久久久久久久不卡 | 成人黄色av网站 | 精品久久久久久亚洲综合网 | 午夜精品一区二区三区在线观看 | 亚洲欧美一区二区三区国产精品 | 在线观看中文字幕视频 | 国产91丝袜在线播放 | 超碰成人在线观看 | 不卡在线视频 | 一区二区三区视频在线免费观看 | 亚洲日韩欧美一区二区在线 | www日韩欧美 | 五月婷婷导航 | 一区二区三区免费网站 | 久久国产成人 | 国产精品美女www爽爽爽视频 | www,黄色,com | av在线一区二区三区 | 成人动慢| 国产日韩一区二区 | 国产欧美精品一区二区三区 | 日韩在线视频精品 | 日韩在线观看中文字幕 | 国产在线精品一区 | 91视频91|