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

首頁 > 編程 > C++ > 正文

C語言實現俄羅斯方塊源代碼

2020-05-23 13:27:28
字體:
來源:轉載
供稿:網友

本文實例為大家分享了C語言實現俄羅斯方塊的具體代碼,供大家參考,具體內容如下

GitHub:【C語言】實現俄羅斯方塊源代碼

Head.h

#ifndef _HEAD_H_#define _HEAD_H_#include<graphics.h>#include<stdio.h>#include<conio.h>#include<stdlib.h>#include<time.h>#include<string.h>#define _CRT_SECURE_NO_WARNINGS 1//界面的相關的參數#define WALL_SQUARE_WIDTH 10 //圍墻方塊的寬度#define xWALL_SQUARE_NUM 30 //x軸方向的方塊的數目#define yWALL_SQUARE_WIDTH 46 //y軸方向的方塊的數目#define GAME_WALL_WIDTH (WALL_SQUARE_WIDTH*xWALL_SQUARE_NUM) //游戲區域的寬度 300 #define GAME_WALL_HTGH (WALL_SQUARE_WIDTH*yWALL_SQUARE_WIDTH) //游戲區域的高度 460#define WINDOW_WIDTH 480 // 游戲總窗口寬度 480 #define WINDOW_HIGH 460 // 游戲總窗口高度 460//定義俄羅斯方塊的相關參數#define ROCK_SQUARE_WIDTH (2*WALL_SQUARE_WIDTH) //俄羅斯方塊的大小是圍墻的兩倍 20#define xROCK_SQUARE_NUM ((GAME_WALL_WIDTH -20)/ROCK_SQUARE_WIDTH) // 游戲區x軸放的方塊數目:14 #define yROCK_SQUARE_NUM ((GAME_WALL_HTGH -20)/ROCK_SQUARE_WIDTH) // 游戲區y軸放的方塊數目:22//定義移動方塊的相關操作#define DIRECT_UP 3 #define DIRECT_DOWN 2  #define DIRECT_LEFT -1 #define DIRECT_RIGHT 1 /*數據結構-線性表(結構體數組)*/typedef struct ROCK{ //用來表示方塊的形狀(每一個字節是8位,用每4位表示方塊中的一行)  unsigned short rockShapeBits; int   nextRockIndex; //下一個方塊,在數組中的下標 } RockType;//方塊在圖形窗口中的位置(即定位4*4大塊的左上角坐標) typedef struct LOCATE{ int left; int top;} RockLocation_t;//全局變量-游戲板的狀態描述(即表示當前界面哪些位置有方塊) //0表示沒有,1表示有(多加了兩行和兩列,形成一個圍墻,便于判斷方塊是否能夠移動) int game_board[yROCK_SQUARE_NUM + 2][xROCK_SQUARE_NUM + 2] = { 0 };int game_socres = 0; //全局分數// 把俄羅斯方塊的19種類放到數組中int rockTypeNum = 19;RockType RockArray[19] = { (0, 0) };//預覽區的方塊的位置RockLocation_t preRockLocation = {GAME_WALL_WIDTH+70,70};//每次生成初始化方塊的位置RockLocation_t initRockLocation = { (WALL_SQUARE_WIDTH + 100), WALL_SQUARE_WIDTH };//分數顯示的位置//各個文件中的函數// 畫出界面以及畫出方塊Draw.h中void DrawGameWindow();void DisplayRock(int rockIdx, RockLocation_t* LocatePtr, bool displayed);//初始化Init源文件void InitGame();//game.hvoid PlayGame();bool IsGameOver();#endif

Draw.h

 

#include"Head.h"//畫出游戲界面void DrawGameWindow(){ //先畫出圍墻 setcolor(BLUE); setlinestyle(PS_SOLID,NULL,0); setfillcolor(BLUE); //畫出上下圍墻 for (int x = WALL_SQUARE_WIDTH; x <= GAME_WALL_WIDTH; x += WALL_SQUARE_WIDTH) {  fillrectangle(x - WALL_SQUARE_WIDTH, 0, x, WALL_SQUARE_WIDTH); //上  fillrectangle(x - WALL_SQUARE_WIDTH, GAME_WALL_HTGH - WALL_SQUARE_WIDTH, x, GAME_WALL_HTGH);//下 } //畫出左右圍墻 for (int y = WALL_SQUARE_WIDTH; y <= GAME_WALL_HTGH; y += WALL_SQUARE_WIDTH) {  fillrectangle(0, y, WALL_SQUARE_WIDTH, y + WALL_SQUARE_WIDTH);//左  fillrectangle(GAME_WALL_WIDTH - WALL_SQUARE_WIDTH, y, GAME_WALL_WIDTH, y + WALL_SQUARE_WIDTH);//右 } //畫出右邊統計分數及相關東西 //畫出分割線 setcolor(WHITE); setlinestyle(PS_DASH,2); line(GAME_WALL_WIDTH + 20, 0, GAME_WALL_WIDTH + 20, GAME_WALL_HTGH); //設置字體 LOGFONT font; gettextstyle(&font); settextstyle(18, 0, _T("宋體")); font.lfQuality = ANTIALIASED_QUALITY;//設置輸出效果為抗鋸齒  //1顯示預覽形狀 outtextxy(GAME_WALL_WIDTH + 80, 30, _T("預覽")); outtextxy(GAME_WALL_WIDTH + 80, 170, _T("分數")); outtextxy(GAME_WALL_WIDTH + 65, 250, _T("操作說明")); outtextxy(GAME_WALL_WIDTH + 40, 290, _T("w a s d控制方向")); outtextxy(GAME_WALL_WIDTH + 40, 335, _T("空格 暫停")); //顯示分數 setcolor(RED); outtextxy(GAME_WALL_WIDTH + 90, 200, '0');}//在游戲區顯示編號為rockIdx的方塊void DisplayRock(int rockIdx, RockLocation_t* LocatePtr, bool displayed){ int color;//方塊的填充顏色 int lineColor = WHITE;//線的顏色 int boardFalg = 0; int xRock = 0; int yRock = 0; unsigned short rockCode = RockArray[rockIdx].rockShapeBits; //如果displayed為true的話,將方塊塊顏色設置為white,game_board對應的位置設置為1; //如果displayed為false的話,將方塊塊顏色設置為black,game_board對應的位置設置為0; displayed ? (color = RED, boardFalg = 1) : (color = BLACK,lineColor = BLACK, boardFalg = 0); setcolor(lineColor); setfillcolor(color); setlinestyle(PS_SOLID);//設置為實線, xRock = LocatePtr->left; yRock = LocatePtr->top; int count = 0;//每4個換行,記錄坐標偏移量 unsigned short mask = 1; for (int i = 1; i <= 16; ++i) {  mask = 1 << (16 - i);  if ((rockCode & mask) != 0) //如果不為0的話,就畫出小方塊  {     fillrectangle(xRock , yRock, xRock + ROCK_SQUARE_WIDTH, yRock + ROCK_SQUARE_WIDTH);  }  if (i % 4 == 0) //換行  {   yRock = yRock + ROCK_SQUARE_WIDTH;    xRock = xRock = LocatePtr->left;  }  else  {   xRock += ROCK_SQUARE_WIDTH;  } }}

Init.h

 

#include"Head.h"static void ShapeStrToBit(unsigned char *rockShapeStr, unsigned short& rockShapeBit);static void ReadRcok();void InitGame(){ //把全局游戲游戲版初始化,邊界初始化為1 for (int i = 0; i < xROCK_SQUARE_NUM + 2; i++) {  game_board[0][i] = 1; //上邊界  game_board[yROCK_SQUARE_NUM + 1][i] = 1; //下邊界 } for (int i = 0; i < yROCK_SQUARE_NUM + 2; i++) {  game_board[i][0] = 1 ; //左邊界  game_board[i][xROCK_SQUARE_NUM + 1] = 1; //右邊界 } //讀取俄羅斯方塊  ReadRcok();}//從文件中讀取方塊的形狀存儲到rockArray中void ReadRcok(){ FILE* fp = fopen("RockShape.ini","r"); if (NULL == fp) {  printf("打開文件失敗/n");  return; } unsigned char readBuf[1024]; //fp讀取到字符串readbuf中 unsigned short rockShapeBit = 0;//存放方塊形狀,占16比特位 unsigned char rockShapeStr[16];//存放方塊字符串 int ShapeStrIdx = 0; int rockNum = 0;//統計方塊的個數以及存放方塊數組RockArray的下標 int rocknext = 0;//方塊數組中下一個形狀 int rockShapeStart = 0;//同一類型的形狀 while (true) {  size_t readSize = fread(readBuf, 1, 1024, fp);  if (readSize == 0)   break;  //處理readbuf  for (size_t idx = 0; idx < readSize; ++idx)  {   //將字符存放到rockShapeStr中   while (ShapeStrIdx < 16 && idx < readSize)   {    if (readBuf[idx] == '@' || readBuf[idx] == '#')    {     rockShapeStr[ShapeStrIdx] = (unsigned char)readBuf[idx];     ++ShapeStrIdx;    }    ++idx; //可能idx == readSize了     if (readBuf[idx] == '*')//修改上一次方塊的next值    {     idx += 5;     RockArray[--rockNum].nextRockIndex = rockShapeStart;     rockNum++;     rockShapeStart = rockNum;     rocknext = rockShapeStart ;    }   }   //可能沒有填滿   if (ShapeStrIdx < 16)   {    break;   }   else //填滿shapestr   {    ShapeStrIdx = 0;//置0    //將rockShapeStr 轉為rockShapeBit    ShapeStrToBit(rockShapeStr, rockShapeBit);    rocknext++;    RockArray[rockNum].rockShapeBits = rockShapeBit;    RockArray[rockNum].nextRockIndex = rocknext;    rockNum++;   }  } } fclose(fp);}//將從文件中讀取的字符串(長度默認為16)轉換成 unsigned shortvoid ShapeStrToBit(unsigned char *rockShapeStr, unsigned short& rockShapeBit){ rockShapeBit = 0; for (size_t idx = 0; idx < 16; ++idx) {  if (rockShapeStr[idx] == '@') //1  {   rockShapeBit |= (1 << (16 - idx - 1));  }  // #為0 不需要處理 }}

game.h

 

#include"Head.h"#define _CRT_SECURE_NO_WARNINGS 1bool MoveAble(int rockIndex, RockLocation_t* currentLocatePtr, int f_direction);void SetGameBoardFlag(int rockIdx, RockLocation_t* curRockLocation);void UserHitKeyBoard(char userHit, int* RockIndex, RockLocation_t* curRockLocation);void FullLine();void UpdateSocres(int scores);void DelCurLine(int rowIdx);bool IsGameOver();void PlayGame(){ char userHit = 0;//用戶敲擊鍵盤 int curRockIndex = 0;//當前方塊的rockArray下標 int nextRockIndex = 0;//下次 RockLocation_t curRockLocation; curRockLocation.left = initRockLocation.left; curRockLocation.top = initRockLocation.top; DWORD oldtime = 0; srand((unsigned int)time(NULL)); curRockIndex = rand() % rockTypeNum; nextRockIndex = rand() % rockTypeNum; //畫出預覽區初始化方塊 //在初始位置和預覽區顯示方塊形狀 DisplayRock(curRockIndex, &initRockLocation, 1); DisplayRock(nextRockIndex, &preRockLocation, 1); bool moveAbled = false; while (true) {  //判斷當前方塊是否落地(判斷能否再下移):如果落地,判斷是否滿行,再判斷是否結束游戲, 改變game_board ,畫出下次初始化的方塊,以及生成新的預覽方塊  //  moveAbled = MoveAble(curRockIndex, &curRockLocation, DIRECT_DOWN);  if (!moveAbled) //判斷是否落地,不能下移表示落地  {   //修改game_board的值   SetGameBoardFlag(curRockIndex, &curRockLocation);   FullLine();    if (IsGameOver())   {    MessageBox(NULL, _T("游戲結束"), _T("GAME OVER"), MB_OK);    exit(0);   }     //為下次生成模塊開始準備   DisplayRock(nextRockIndex, &preRockLocation, false);//擦除舊的方塊   curRockIndex = nextRockIndex;   nextRockIndex = rand() % rockTypeNum; //生成新的預覽方塊   DisplayRock(curRockIndex, &initRockLocation, 1);   DisplayRock(nextRockIndex, &preRockLocation, 1);   FlushBatchDraw();   //修改curRockLocation的值   curRockLocation.left = initRockLocation.left;   curRockLocation.top = initRockLocation.top;   }  if (kbhit()) //如果敲擊鍵盤了 就處理按鍵  {   userHit = getch();   UserHitKeyBoard(userHit, &curRockIndex, &curRockLocation);  }  //沒有 就自動下移一個單位 :不能用else,因為可能按鍵不是上下左右  DWORD newtime = GetTickCount();  if (newtime - oldtime >= (unsigned int)(300) && moveAbled == TRUE)  {   oldtime = newtime;   DisplayRock(curRockIndex, &curRockLocation, false);   curRockLocation.top += ROCK_SQUARE_WIDTH; //下落一格   }  //AutomaticDownMove(curRockIndex, &curRockLocation);  //畫出新方塊  DisplayRock(curRockIndex, &curRockLocation, 1);  FlushBatchDraw();  Sleep(20); }}//響應鍵盤命令時間void UserHitKeyBoard(char userHit, int* RockIndex, RockLocation_t* curRockLocation){ switch (userHit) { case 'W': case 'w'://↑  if (MoveAble(RockArray[*RockIndex].nextRockIndex, curRockLocation, DIRECT_UP))  {   DisplayRock(*RockIndex, curRockLocation, false);   *RockIndex = RockArray[*RockIndex].nextRockIndex;  }  break; case 'S': case 's'://↓  if (MoveAble(*RockIndex, curRockLocation, DIRECT_DOWN))  {   DisplayRock(*RockIndex, curRockLocation, false);   curRockLocation->top += 2 * (ROCK_SQUARE_WIDTH);   if (!MoveAble(*RockIndex, curRockLocation, DIRECT_DOWN))   {    curRockLocation->top -= ROCK_SQUARE_WIDTH;   }  }  break; case 'A': case 'a': //←  if (MoveAble(*RockIndex, curRockLocation, DIRECT_LEFT))  {   DisplayRock(*RockIndex, curRockLocation, false);   curRockLocation->left -= ROCK_SQUARE_WIDTH;  }  break; case 'D': case 'd': //→  if (MoveAble(*RockIndex, curRockLocation, DIRECT_RIGHT))  {   DisplayRock(*RockIndex, curRockLocation, FALSE);   curRockLocation->left += ROCK_SQUARE_WIDTH;  }  break; case ' ': //暫停  while (1)  {   userHit = getch();   if (userHit == ' ')    break;  }  break; default:  break; }}//判斷是否滿行,滿行消除,然后計算得分void FullLine(){ bool linefull = true; int idx = yROCK_SQUARE_NUM;//從最后一行往上查找 22 int count = 0; while (count != xROCK_SQUARE_NUM ) //遇到空行 14 {  linefull = true;  count = 0;  for (int i = 1; i <= xROCK_SQUARE_NUM; ++i)  {   if (game_board[idx][i] == 0)   {    linefull = false;    count++;   }  }  if (linefull) //滿行,消除當前行,更新分數  {   DelCurLine(idx);   game_socres += 3;   UpdateSocres(game_socres);   idx++;//因為下面要減1  }  idx--; }}void UpdateSocres(int scores){ setcolor(RED); TCHAR s[10]; _stprintf(s, _T("%d"), scores); outtextxy(GAME_WALL_WIDTH + 90, 200, s);}//消除當前行void DelCurLine(int rowIdx){ //擦除當前行 setcolor(BLACK); setfillcolor(BLACK); for (int i = 1; i < xROCK_SQUARE_NUM; ++i) {  fillrectangle(WALL_SQUARE_WIDTH + (i - 1)*ROCK_SQUARE_WIDTH, (rowIdx - 1)*ROCK_SQUARE_WIDTH + WALL_SQUARE_WIDTH,     WALL_SQUARE_WIDTH + i*ROCK_SQUARE_WIDTH, rowIdx*ROCK_SQUARE_WIDTH + WALL_SQUARE_WIDTH); } //把上面的向下移 int cnt = 0; while (cnt != xROCK_SQUARE_NUM) //直到遇到是空行的為止  {  cnt = 0;  for (int i = 1; i <= xROCK_SQUARE_NUM; i++)  {   game_board[rowIdx][i] = game_board[rowIdx - 1][i];   //擦除上面的一行    setcolor(BLACK);   setfillcolor(BLACK);   fillrectangle(WALL_SQUARE_WIDTH + ROCK_SQUARE_WIDTH*i - ROCK_SQUARE_WIDTH ,    WALL_SQUARE_WIDTH + ROCK_SQUARE_WIDTH*(rowIdx - 1) - ROCK_SQUARE_WIDTH ,    WALL_SQUARE_WIDTH + ROCK_SQUARE_WIDTH*i,    WALL_SQUARE_WIDTH + ROCK_SQUARE_WIDTH*(rowIdx - 1));   //顯示下面的一行    if (game_board[rowIdx][i] == 1)   {    setcolor(WHITE);    setfillcolor(RED);    fillrectangle(WALL_SQUARE_WIDTH + ROCK_SQUARE_WIDTH*i - ROCK_SQUARE_WIDTH ,     WALL_SQUARE_WIDTH + ROCK_SQUARE_WIDTH*rowIdx - ROCK_SQUARE_WIDTH ,     WALL_SQUARE_WIDTH + ROCK_SQUARE_WIDTH*i,     WALL_SQUARE_WIDTH + ROCK_SQUARE_WIDTH*rowIdx);   }   if (game_board[rowIdx][i] == 0)    cnt++;   //統計一行是不是 都是空格   }//for   rowIdx--; }}//是否可以移動方塊bool MoveAble(int rockIndex, RockLocation_t* currentLocatePtr, int f_direction){ int mask; int rockX; int rockY; rockX = currentLocatePtr->left; rockY = currentLocatePtr->top; mask = (unsigned short)1 << 15; for (int i = 1; i <= 16; i++) {  //與掩碼相與為1的 即為方塊上的點   if ((RockArray[rockIndex].rockShapeBits & mask) != 0)  {   //判斷能否移動(即掃描即將移動的位置 是否與設置的圍墻有重疊)    //若是向上(即翻滾變形)    if (f_direction == DIRECT_UP)   {    //因為此情況下傳入的是下一個方塊的形狀,故我們直接判斷此方塊的位置是否已經被占     //判斷下一個方塊    if (game_board[(rockY - WALL_SQUARE_WIDTH) / ROCK_SQUARE_WIDTH + 1]     [(rockX - WALL_SQUARE_WIDTH) / ROCK_SQUARE_WIDTH + 1] == 1)     return false;   }   //如果是向下方向移動    else if (f_direction == DIRECT_DOWN)   {    if (game_board[(rockY - WALL_SQUARE_WIDTH) / ROCK_SQUARE_WIDTH + 2]     [(rockX - WALL_SQUARE_WIDTH) / ROCK_SQUARE_WIDTH + 1] == 1)     return false;   }   else //如果是左右方向移動    { //f_direction的DIRECT_LEFT為-1,DIRECT_RIGHT為1,故直接加f_direction即可判斷。     if (game_board[(rockY - WALL_SQUARE_WIDTH) / ROCK_SQUARE_WIDTH + 1]     [(rockX - WALL_SQUARE_WIDTH) / ROCK_SQUARE_WIDTH + 1 + f_direction] == 1)     return false;   }  }  //每4次 換行 轉到下一行繼續   i % 4 == 0 ? (rockY += ROCK_SQUARE_WIDTH, rockX = currentLocatePtr->left)   : rockX += ROCK_SQUARE_WIDTH;  mask >>= 1; } return true;}//給游戲game_board設置標記表示已經占了void SetGameBoardFlag(int rockIdx, RockLocation_t* curRockLocation){ int mask; int rockX; int rockY; rockX = curRockLocation->left; rockY = curRockLocation->top; mask = (unsigned int)1 << 15; for (int i = 1; i <= 16; i++) {  //與掩碼相與為1的 即為方塊上的點   if ((RockArray[rockIdx].rockShapeBits & mask) != 0)  {   game_board[(rockY - WALL_SQUARE_WIDTH) / ROCK_SQUARE_WIDTH + 1]    [(rockX - WALL_SQUARE_WIDTH) / ROCK_SQUARE_WIDTH + 1] = 1;  }  //每4次 換行 轉到下一行繼續畫   i % 4 == 0 ? (rockY += ROCK_SQUARE_WIDTH, rockX = curRockLocation->left)   : rockX += ROCK_SQUARE_WIDTH;  mask >>= 1; }}//判斷游戲是否結束bool IsGameOver(){ bool topLineHaveRock = false;//頂行是否有方塊 bool bottomLineHaveRock = false; for (int i = 1; i < xROCK_SQUARE_NUM; ++i) {  if (game_board[1][i] == 1)   topLineHaveRock = true;  if (game_board[yROCK_SQUARE_NUM][i] == 1)   bottomLineHaveRock = true; } if (bottomLineHaveRock && topLineHaveRock)  return true; else   return false;}

main.cpp

#include"Head.h"#include"Draw.h"#include"Init.h"#include"game.h"int main(){ initgraph(WINDOW_WIDTH,WINDOW_HIGH); DrawGameWindow(); //使用 API 函數修改窗口名稱  HWND hWnd = GetHWnd(); SetWindowText(hWnd, _T("俄羅斯方塊")); InitGame(); PlayGame(); getchar(); closegraph(); system("pause"); return 0;}

配置文件:RockShape.ini

@###@###@@######@@@#@###########@@###@###@########@#@@@#########****#@###@##@@######@###@@@#########@@##@###@#######@@@###@#########****#@##@@@#########@###@@##@#######@@@##@###########@##@@###@######****#@##@@##@#######@@###@@#########****@###@@###@#######@@#@@##########****@###@###@###@###@@@@############****@@##@@##########****

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品一区二区久久国产| 国产精品日韩一区| 成人高清视频观看www| 色系列之999| 国产一区二区三区毛片| 欧美精品在线免费播放| 91亚洲国产成人久久精品网站| 日韩精品视频免费在线观看| 第一福利永久视频精品| 欧洲美女免费图片一区| 福利二区91精品bt7086| 夜夜躁日日躁狠狠久久88av| 欧美大学生性色视频| 91国产中文字幕| 亚洲高清一区二| 91精品国产综合久久久久久久久| 国产成人a亚洲精品| www.色综合| 奇米一区二区三区四区久久| 日韩国产精品亚洲а∨天堂免| 日韩视频免费大全中文字幕| 欧美日韩精品在线| 欧美成人精品一区二区三区| 国产成人91久久精品| 精品国产999| 欧美激情一二区| 亚洲一级黄色片| 日韩中文字幕网站| 精品国产网站地址| 欧美成人午夜影院| 懂色av中文一区二区三区天美| 国产精自产拍久久久久久| 久久精品中文字幕一区| 成人黄色激情网| 亚洲欧美国产高清va在线播| 在线观看精品国产视频| 91国偷自产一区二区三区的观看方式| 国产日韩在线看片| 国产一区私人高清影院| 日韩免费av一区二区| 亚洲中国色老太| 九色精品免费永久在线| 日本久久精品视频| 日本一区二三区好的精华液| 97福利一区二区| 欧美亚洲国产成人精品| 久久的精品视频| 日韩一二三在线视频播| 日韩中文在线不卡| 青青草99啪国产免费| 91国产精品视频在线| 亚洲人成在线播放| 亚洲乱码一区二区| 国产日产亚洲精品| 亚洲国产成人在线播放| 中文欧美日本在线资源| 欧美极品第一页| 色小说视频一区| 在线播放国产精品| 国产精品香蕉在线观看| y97精品国产97久久久久久| 日韩美女视频在线观看| 91精品国产九九九久久久亚洲| 97人人模人人爽人人喊中文字| 久久777国产线看观看精品| 亚洲欧美在线一区二区| 日韩一区av在线| 国产日本欧美一区二区三区在线| 亚洲性日韩精品一区二区| 日韩电影免费在线观看中文字幕| 91av视频在线观看| 色噜噜狠狠狠综合曰曰曰| 成人福利在线视频| 欧美激情欧美激情在线五月| 国产成人亚洲综合91精品| 国产97色在线| 一本大道亚洲视频| 国产精品99蜜臀久久不卡二区| 亚洲精品免费一区二区三区| 欧美区在线播放| 久久男人的天堂| 国产视频精品一区二区三区| 欧美日韩第一视频| 国产精品爽爽爽爽爽爽在线观看| 久操成人在线视频| 91在线视频免费| 国产精品久久久久77777| 亚洲美女av在线| 成人深夜直播免费观看| 国产精品久久久久aaaa九色| 日韩一区av在线| 国产成人91久久精品| 亚洲精品福利在线观看| 久久久久99精品久久久久| 欧美激情高清视频| 国产亚洲精品久久久久久| 国产欧美日韩中文字幕在线| 亚洲福利视频网站| 久久亚洲精品成人| 日韩免费在线观看视频| 国产成人免费av电影| 久久久亚洲精选| 亚洲香蕉成人av网站在线观看| 国产精品国产自产拍高清av水多| 在线播放精品一区二区三区| 成人国内精品久久久久一区| 久久99精品国产99久久6尤物| 国产97在线播放| 精品国产一区二区三区久久| 亚洲黄一区二区| 欧美精品在线网站| 91精品啪aⅴ在线观看国产| 亚洲欧美成人在线| 日韩美女免费线视频| 亚洲国产精品推荐| 国产日韩综合一区二区性色av| 久久成人18免费网站| 国产精品wwww| 蜜臀久久99精品久久久无需会员| 午夜精品一区二区三区在线播放| 久久久免费高清电视剧观看| 91经典在线视频| 久久久精品中文字幕| 国产成人91久久精品| 国产高清在线不卡| 91久久国产综合久久91精品网站| 成人444kkkk在线观看| 成人激情av在线| 日本久久亚洲电影| 91久久综合亚洲鲁鲁五月天| 欧美在线日韩在线| 在线国产精品视频| 国产精品爽黄69天堂a| 国产91精品黑色丝袜高跟鞋| 国产一区香蕉久久| 日韩日本欧美亚洲| 日韩中文字幕在线免费观看| 黑人巨大精品欧美一区二区免费| 国产一区二区三区在线观看视频| 成人美女免费网站视频| 日韩在线视频观看| 国产精品www| 中文字幕久久亚洲| 国产欧美日韩精品在线观看| 欧美日韩国产成人| 欧美黑人一区二区三区| 亚洲人成网站777色婷婷| 狠狠色噜噜狠狠狠狠97| 国产视频久久久| 日韩美女在线观看一区| 亚洲福利视频网站| 久久久亚洲精品视频| 国产精品嫩草视频| 久久久久久久香蕉网| 中文字幕日本精品| 亚洲理论在线a中文字幕| 全色精品综合影院| 亚洲欧美激情精品一区二区| 欧美成人久久久| 欧美综合国产精品久久丁香| 欧美日韩久久久久| 国产精品www网站| 欧美黄色片免费观看| 久久视频免费在线播放|