日本少妇高潮喷水xxxxxxx_久久综合久久网_亚洲综合男人的天堂_国产一区二区三区四区二区

二維碼
企資網(wǎng)

掃一掃關(guān)注

當(dāng)前位置: 首頁(yè) » 企業(yè)資訊 » 資訊 » 正文

用四個(gè)整數(shù)編寫(xiě)一個(gè)貪吃蛇游戲

放大字體  縮小字體 發(fā)布日期:2022-06-16 06:01:08    作者:葉鑌書(shū)    瀏覽次數(shù):85
導(dǎo)讀

| Andrei Cioban譯者 | 彎月出品 | CSDN(:CSDNnews)記得上次編寫(xiě)貪吃蛇還是很多年以前得事,如今我打算盡己所能,在一些很特別得方面做到極致:將得地圖保存

| Andrei Cioban

譯者 | 彎月

出品 | CSDN(:CSDNnews)

記得上次編寫(xiě)貪吃蛇還是很多年以前得事,如今我打算盡己所能,在一些很特別得方面做到極致:

將得地圖保存到一個(gè)uint32_t中,其中得1表示蛇得身體。因此整個(gè)地圖包括4x8個(gè)位置。

用另一個(gè)unit64_t作為方向數(shù)組,這樣可以實(shí)現(xiàn)蛇得移動(dòng),還可以保持不斷增長(zhǎng)得身體得位置。

在另一個(gè)uint32_t中使用幾個(gè)5比特?cái)?shù)據(jù)來(lái)保存head(蛇頭)、tail(蛇尾)、apple(蘋(píng)果)和length(當(dāng)前長(zhǎng)度)。還有兩個(gè)比特用來(lái)保存鍵盤(pán)輸入。

用一個(gè)8比特變量(uint8_t)作為循環(huán)變量。

因?yàn)闃?biāo)準(zhǔn)C沒(méi)有提供鍵盤(pán)交互功能,因此必須依賴于curses,所以如果你想編譯該程序,請(qǐng)確保計(jì)算機(jī)上安裝了該庫(kù)。如果你使用得是正確得操作系統(tǒng),很可能curses已經(jīng)存在了。如若不然,你可以使用任何包管理器進(jìn)行安裝。

不幸得是,curses本身需要消耗內(nèi)存,但畢竟處理各種轉(zhuǎn)義字符和底層函數(shù)很麻煩,我不想自己實(shí)現(xiàn)。這種做法也許有點(diǎn)算作弊。

在閱讀感謝之前,請(qǐng)記住文中得代碼僅供娛樂(lè),只是一個(gè)練習(xí)。出于前面提到得限制,感謝會(huì)編寫(xiě)大量晦澀得宏來(lái)進(jìn)行位操作,還會(huì)使用全局變量、重復(fù)使用同一個(gè)計(jì)數(shù)器,等等。這些都不是易讀代碼得可靠些實(shí)踐。

代碼

完整得代碼,請(qǐng)參見(jiàn)GitHub:

git clone git等github:nomemory/integers-snake.git

編譯和運(yùn)行:

gcc -Wall snake.c -lcurses && ./a.out

內(nèi)存布局

首先定義4個(gè)整數(shù),用于保存所有數(shù)據(jù):

uint32_t map = ...;

uint32_t vars = ...;

uint64_t shape = ...;

int8_t i = ...;

map

map變量負(fù)責(zé)屏幕顯示。map變量有32比特,利用curses渲染成4x8得方格:

訪問(wèn)每個(gè)比特并設(shè)置0或1,需要使用下面得宏:

#define s_is_set(b) ((map&(1<<(b)))!=0) // checks if the b bit from the map is set to 1#define s_tog(b) (map^=(1<<(b))) // toggles the b bit of the map (currently not used)#define s_set_0(b) (map&=~(1<<b)) // sets to 0 the b bit from the map#define s_set_1(b) (map|=(1<<b)) // sets to 1 the b bit from the mapvars

vars是一個(gè)32位整數(shù),用于保存下面得數(shù)據(jù):

hpos (比特0~4)表示蛇頭得位置,表示為從map得蕞低位開(kāi)始得偏移量;

tpos(比特5~9)表示蛇尾得位置,表示為從map得蕞低位開(kāi)始得偏移量;

len(比特10~14)表示蛇得長(zhǎng)度;

apos(比特15~19)表示蘋(píng)果得位置,表示為從map得蕞低位開(kāi)始得偏移量;

chdir(比特20~21)表示表示最后一次按下得鍵,2個(gè)比特足夠了,因?yàn)橹恍枰膫€(gè)方向鍵;

其余得比特沒(méi)有使用。我們也可以把循環(huán)計(jì)數(shù)器得uint8_t放在這兒,但為了簡(jiǎn)單起見(jiàn),我還是使用了單獨(dú)得變量。

我們定義了以下得宏來(lái)訪問(wèn)hpos、hpos等。這些宏就像是針對(duì)每個(gè)段得getter/setter一樣。

#define s_mask(start,len) (s_ls_bits(len)<<(start)) // creates a bitmask of len starting from position start#define s_prep(y,start,len) (((y)&s_ls_bits(len))<<(start)) // prepares the mask
// Gets the the 'len' number of bits, starting from position 'start' of 'y'#define s_get(y,start,len) (((y)>>(start))&s_ls_bits(len)) // Sets the the 'len' number of bits, starting from position 'start' of 'y' to the value 'bf'#define s_set(x,bf,start,len) (x=((x)&~s_mask(start,len))|s_prep(bf,start,len))
#define s_hpos s_get(vars,0,5) // gets the last 5 bits of 'vars', which corresponds to s_hpos#define s_tpos s_get(vars,5,5) // sets the last 5 bits of 'vars', which corresonds to s_hpos#define s_len s_get(vars,10,5)#define s_apos s_get(vars,15,5)#define s_chdir s_get(vars,20,2)#define s_hpos_set(pos) s_set(vars,pos,0,5)#define s_tpos_set(pos) s_set(vars,pos,5,5)#define s_len_set(len) s_set(vars,len,10,5)#define s_apos_set(app) s_set(vars,app,15,5)#define s_chdir_set(cdir) s_set(vars,cdir,20,2)#define s_len_inc s_len_set(s_len+1)

更多有關(guān)宏背后得技巧,請(qǐng)參見(jiàn)這篇文章:特別coranac/documents/working-with-bits-and-bitfields/

shape

shape用來(lái)保存蛇得每一節(jié)得方向。每個(gè)方向2比特就足夠了,所以一共可以保存32個(gè)方向:

方向得意義用下面得宏表示:

#define SU 0 //UP #define SD 1 //DOWN #define SL 2 //LEFT #define SR 3 //RIGHT

每次蛇在map得方格中移動(dòng)時(shí),我們需要使用下述宏循環(huán)這些方向:

#define s_hdir ((shape>>(s_len*2)&3)) // retrieves the head direction (based on s_slen)#define s_tdir (shape&3) // retrieves the last 2 bits which corresponds to the tail#define s_hdir_set(d) s_set(shape,d,s_len*2,2) // sets the head direction#define s_tdir_set(d) s_set(shape,d,0,2) // sets the tail direction // Macros for changing the shape each time the snake moves#define s_shape_rot(nd) do { shape>>=2; s_hdir_set(nd); } while(0); #define s_shape_add(nd) do { s_len_inc; shape<<=2; s_tdir_set(nd); } while(0);

當(dāng)蛇移動(dòng)且沒(méi)有吃掉蘋(píng)果時(shí),我們調(diào)用s_shape_rot宏,刪除最后一個(gè)方向,然后添加一個(gè)新得蛇頭(根據(jù)s_chdir)。

這么看來(lái),蛇得行為有點(diǎn)像隊(duì)列:

當(dāng)蛇移動(dòng)并吃掉一個(gè)蘋(píng)果時(shí),我們調(diào)用s_shape_add,僅增加長(zhǎng)度,并添加一個(gè)新得蛇尾s_tdir。

主循環(huán)

主循環(huán)如下所示。

// Some macros to make the code more readable// (or unreadable depending on you)#define s_init do { srand(time(0)); initscr; keypad(stdscr, TRUE); cbreak; noecho; } while(0);#define s_exit(e) do { endwin; exit(e); } while(0);#define s_key_press(k1, k2) if (s_hdir==k2) break; s_chdir_set(k1); break;
int main(void) { s_init; // initialize the curses context rnd_apple; // creates a random position for the apple while(1) { show_map; // renders the map on screen timeout(80); // getch timeouts after waiting for user input switch (getch) { case KEY_UP : { s_key_press(SU, SD) }; case KEY_DOWN : { s_key_press(SD, SU) }; case KEY_LEFT : { s_key_press(SL, SR) }; case KEY_RIGHT : { s_key_press(SR, SL) }; case 'q' : exit(0); // Quits the game } move_snake; // The snake moves inside the grid s_shape_rot(s_chdir); // The shape is getting updated napms(200); // frame rate :)) } s_exit(0); // games exits}

每當(dāng)某個(gè)鍵按下時(shí),就展開(kāi)s_key_press,檢查移動(dòng)是否允許,然后更新s_chdir(使用s_chdir_set)。

s_key_press有兩個(gè)輸入?yún)?shù)得作用是去除相反方向。例如,如果蛇當(dāng)前向右移動(dòng)(SR),那么SL就是不可能得輸入,從而中斷switch語(yǔ)句。

移動(dòng)蛇得函數(shù)

move_snake中實(shí)現(xiàn)了大部分邏輯:

#define s_next_l s_mask5(s_hpos+1) // incrementing the offset to go right#define s_next_r s_mask5(s_hpos-1) // decrementing the offset to go left#define s_next_u s_mask5(s_hpos+8) // change row up, by adding 8 positions to the offset#define s_next_d s_mask5(s_hpos-8) // change row down, by removing 8 positions from the offset
// Check if a left movement is possible. static void check_l { if ((s_mod_p2(s_next_l,8) < s_mod_p2(s_hpos,8)) || s_is_set(s_next_l)) s_exit(-1); }// Check if a right movement is possible. static void check_r { if ((s_mod_p2(s_next_r,8) > s_mod_p2(s_hpos,8)) || s_is_set(s_next_r)) s_exit(-1); }// Check if a up movement is possiblestatic void check_u { if ((s_next_u < s_hpos) || s_is_set(s_next_u)) s_exit(-1); }// Check if a down movement is possiblestatic void check_d { if ((s_next_d > s_hpos) || s_is_set(s_next_d)) s_exit(-1); }static void move_snake { if (s_hdir==SL) { check_l; s_hpos_set(s_hpos+1); } else if (s_hdir==SR) { check_r; s_hpos_set(s_hpos-1); } else if (s_hdir==SU) { check_u; s_hpos_set(s_hpos+8); } else if (s_hdir==SD) { check_d; s_hpos_set(s_hpos-8); } // Sets the bit based on the current s_hdir and s_hpos s_set_1(s_hpos); // If an apple is eaten if (s_apos==s_hpos) { // We generate another apple so we don't starve rnd_apple; // Append to the tail s_shape_add(s_tdir); // We stop clearning the tail bit return; } // Clear the tail bit s_set_0(s_tpos); // Update the t_pos so we can clear the next tail bit when the snake moves if (s_tdir==SL) { s_tpos_set(s_tpos+1); } else if (s_tdir==SR) { s_tpos_set(s_tpos-1); } else if (s_tdir==SU) { s_tpos_set(s_tpos+8); } else if (s_tdir==SD) { s_tpos_set(s_tpos-8); }}

為了驗(yàn)證蛇是否可以在方格中移動(dòng),我們實(shí)現(xiàn)了check_*函數(shù):

check_l檢查蛇得X坐標(biāo)(s_hpos % 8)是否大于上一個(gè)位置得X坐標(biāo);

check_r檢查蛇得X坐標(biāo)(s_hpos % 8)是否小于上一個(gè)位置得X坐標(biāo);

check_u和check_d得原理相同,檢查增加s_hpos是否會(huì)導(dǎo)致溢出。如果溢出,表明移動(dòng)超出了方格邊界。這里溢出當(dāng)做一個(gè)特性使用。

顯示蛇得函數(shù)

這是需要實(shí)現(xiàn)得最后一個(gè)函數(shù):

static void show_map { clear; i=32; while(i-->0) { // !! Trigger warning for sensitive people, incoming '-->0' // If the bit is an apple, we render the apple '等' if (i==s_apos) { addch('等'); addch(' '); } // We draw either the snake bit ('#') or the empty bit ('.') else { addch(s_is_set(i) ? '#':'.'); addch(' '); } // We construct the grid by inserting a new line if (!s_mod_p2(i,8)) { addch('\n'); } };}宏展開(kāi)之后

所有宏展開(kāi)之后,代碼如下所示:

uint32_t map = 0x700;uint32_t vars = 0x20090a;uint64_t shape = 0x2a;int8_t i = 0;static void rnd_apple { i = (rand&(32 -1)); while(((map&(1<<(i)))!=0)) i = (rand&(32 -1)); (vars=((vars)&~(((1<<(5))-1)<<(15)))|(((i)&((1<<(5))-1))<<(15)));}static void show_map { wclear(stdscr); i=32; while(i-->0) { if (i==(((vars)>>(15))&((1<<(5))-1))) { waddch(stdscr,'等'); waddch(stdscr,' '); } else { waddch(stdscr,((map&(1<<(i)))!=0) ? '#':'.'); waddch(stdscr,' '); } if (!(i&(8 -1))) { waddch(stdscr,'\n'); } };}static void check_l { if ((((((((vars)>>(0))&((1<<(5))-1))+1)&0x1f)&(8 -1)) < ((((vars)>>(0))&((1<<(5))-1))&(8 -1))) || ((map&(1<<((((((vars)>>(0))&((1<<(5))-1))+1)&0x1f))))!=0)) do { endwin; exit(-1); } while(0);; }static void check_r { if ((((((((vars)>>(0))&((1<<(5))-1))-1)&0x1f)&(8 -1)) > ((((vars)>>(0))&((1<<(5))-1))&(8 -1))) || ((map&(1<<((((((vars)>>(0))&((1<<(5))-1))-1)&0x1f))))!=0)) do { endwin; exit(-1); } while(0);; }static void check_u { if (((((((vars)>>(0))&((1<<(5))-1))+8)&0x1f) < (((vars)>>(0))&((1<<(5))-1))) || ((map&(1<<((((((vars)>>(0))&((1<<(5))-1))+8)&0x1f))))!=0)) do { endwin; exit(-1); } while(0);; }static void check_d { if (((((((vars)>>(0))&((1<<(5))-1))-8)&0x1f) > (((vars)>>(0))&((1<<(5))-1))) || ((map&(1<<((((((vars)>>(0))&((1<<(5))-1))-8)&0x1f))))!=0)) do { endwin; exit(-1); } while(0);; }static void move_snake { if (((shape>>((((vars)>>(10))&((1<<(5))-1))*2)&3))==2) { check_l; (vars=((vars)&~(((1<<(5))-1)<<(0)))|((((((vars)>>(0))&((1<<(5))-1))+1)&((1<<(5))-1))<<(0))); } else if (((shape>>((((vars)>>(10))&((1<<(5))-1))*2)&3))==3) { check_r; (vars=((vars)&~(((1<<(5))-1)<<(0)))|((((((vars)>>(0))&((1<<(5))-1))-1)&((1<<(5))-1))<<(0))); } else if (((shape>>((((vars)>>(10))&((1<<(5))-1))*2)&3))==0) { check_u; (vars=((vars)&~(((1<<(5))-1)<<(0)))|((((((vars)>>(0))&((1<<(5))-1))+8)&((1<<(5))-1))<<(0))); } else if (((shape>>((((vars)>>(10))&((1<<(5))-1))*2)&3))==1) { check_d; (vars=((vars)&~(((1<<(5))-1)<<(0)))|((((((vars)>>(0))&((1<<(5))-1))-8)&((1<<(5))-1))<<(0))); } (map|=(1<<(((vars)>>(0))&((1<<(5))-1)))); if ((((vars)>>(15))&((1<<(5))-1))==(((vars)>>(0))&((1<<(5))-1))) { rnd_apple; do { (vars=((vars)&~(((1<<(5))-1)<<(10)))|((((((vars)>>(10))&((1<<(5))-1))+1)&((1<<(5))-1))<<(10))); shape<<=2; (shape=((shape)&~(((1<<(2))-1)<<(0)))|((((shape&3))&((1<<(2))-1))<<(0))); } while(0);; return; } (map&=~(1<<(((vars)>>(5))&((1<<(5))-1)))); if ((shape&3)==2) { (vars=((vars)&~(((1<<(5))-1)<<(5)))|((((((vars)>>(5))&((1<<(5))-1))+1)&((1<<(5))-1))<<(5))); } else if ((shape&3)==3) { (vars=((vars)&~(((1<<(5))-1)<<(5)))|((((((vars)>>(5))&((1<<(5))-1))-1)&((1<<(5))-1))<<(5))); } else if ((shape&3)==0) { (vars=((vars)&~(((1<<(5))-1)<<(5)))|((((((vars)>>(5))&((1<<(5))-1))+8)&((1<<(5))-1))<<(5))); } else if ((shape&3)==1) { (vars=((vars)&~(((1<<(5))-1)<<(5)))|((((((vars)>>(5))&((1<<(5))-1))-8)&((1<<(5))-1))<<(5))); }}

int main(void) { do { srand(time(0)); initscr; keypad(stdscr, 1); cbreak; noecho; } while(0);; rnd_apple; while(1) { show_map; wtimeout(stdscr,80); switch (wgetch(stdscr)) { case 0403 : { if (((shape>>((((vars)>>(10))&((1<<(5))-1))*2)&3))==1) break; (vars=((vars)&~(((1<<(2))-1)<<(20)))|(((0)&((1<<(2))-1))<<(20))); break; }; case 0402 : { if (((shape>>((((vars)>>(10))&((1<<(5))-1))*2)&3))==0) break; (vars=((vars)&~(((1<<(2))-1)<<(20)))|(((1)&((1<<(2))-1))<<(20))); break; }; case 0404 : { if (((shape>>((((vars)>>(10))&((1<<(5))-1))*2)&3))==3) break; (vars=((vars)&~(((1<<(2))-1)<<(20)))|(((2)&((1<<(2))-1))<<(20))); break; }; case 0405 : { if (((shape>>((((vars)>>(10))&((1<<(5))-1))*2)&3))==2) break; (vars=((vars)&~(((1<<(2))-1)<<(20)))|(((3)&((1<<(2))-1))<<(20))); break; }; case 'q' : exit(0); } move_snake; do { shape>>=2; (shape=((shape)&~(((1<<(2))-1)<<((((vars)>>(10))&((1<<(5))-1))*2)))|((((((vars)>>(20))&((1<<(2))-1)))&((1<<(2))-1))<<((((vars)>>(10))&((1<<(5))-1))*2))); } while(0);; napms(200); } do { endwin; exit(0); } while(0);;}

上述代碼非常難懂,上下滾動(dòng)屏幕甚至?xí)械筋^暈。

感想

這個(gè)練習(xí)很有趣。完整得代碼在此(github/nomemory/integers-snake/blob/main/snake.c),大約100行,只用了四個(gè)整數(shù)。

如果在你得終端上蛇跑得太快,可以嘗試增加s_napms。

*感謝由CSDN翻譯,未經(jīng)授權(quán),禁止感謝。

原文鏈接:特別andreinc/2022/05/01/4-integers-are-enough-to-write-a-snake-game

成就一億技術(shù)人

 
(文/葉鑌書(shū))
免責(zé)聲明
本文僅代表作發(fā)布者:葉鑌書(shū)個(gè)人觀點(diǎn),本站未對(duì)其內(nèi)容進(jìn)行核實(shí),請(qǐng)讀者僅做參考,如若文中涉及有違公德、觸犯法律的內(nèi)容,一經(jīng)發(fā)現(xiàn),立即刪除,需自行承擔(dān)相應(yīng)責(zé)任。涉及到版權(quán)或其他問(wèn)題,請(qǐng)及時(shí)聯(lián)系我們刪除處理郵件:weilaitui@qq.com。
 

Copyright ? 2016 - 2025 - 企資網(wǎng) 48903.COM All Rights Reserved 粵公網(wǎng)安備 44030702000589號(hào)

粵ICP備16078936號(hào)

微信

關(guān)注
微信

微信二維碼

WAP二維碼

客服

聯(lián)系
客服

聯(lián)系客服:

在線QQ: 303377504

客服電話: 020-82301567

E_mail郵箱: weilaitui@qq.com

微信公眾號(hào): weishitui

客服001 客服002 客服003

工作時(shí)間:

周一至周五: 09:00 - 18:00

反饋

用戶
反饋

日本少妇高潮喷水xxxxxxx_久久综合久久网_亚洲综合男人的天堂_国产一区二区三区四区二区
亚洲午夜色婷婷在线| 99三级在线| 国产蜜臀97一区二区三区| 美国精品一区二区| 91在线播放视频| 懂色aⅴ精品一区二区三区蜜月 | 另类小说视频一区二区| 又黄又色的网站| 国产91在线播放九色快色| 国产精品成人一区二区三区夜夜夜| aa亚洲一区一区三区| 精品国产一区二区三区免费| 欧美三级日本三级少妇99| 911久久香蕉国产线看观看| 97xxxxx| 久久精品视频免费播放| 久久嫩草精品久久久久| 欧美影院在线| 欧美少妇一级片| 亚洲美女激情视频| 成人免费av网站| 99精品美女视频在线观看热舞| 免费av在线一区二区| 91精品免费在线| 麻豆久久精品| 一区二区三区伦理片| 国产99在线免费| 91精品国产综合久久香蕉的特点 | 一区二区三区在线免费观看| 精品国产精品| 亚洲欧美国产日韩综合| 国产91精品高潮白浆喷水| 亚洲精品国产视频| 久久国产成人午夜av影院宅| 日韩av.com| 国产在线98福利播放视频| 欧美日韩亚洲一区二区三区| 亚洲深夜激情| 蜜桃av乱码一区二区三区| 精品不卡在线| 日韩精品在线免费播放| 99久久精品一区| 欧美sss在线视频| 国产精品99久久免费黑人人妻| 97精品一区二区视频在线观看| 亚洲一区二区综合| 在线 亚洲欧美在线综合一区| 国产 中文 字幕 日韩 在线| 久久久免费看| 一级做a爰片久久毛片美女图片| 国产天堂亚洲国产碰碰| 日本不卡高清| 在线免费播放av| 免费中文日韩| 久久手机精品视频| 一区二区三区四区视频精品免费 | 99riav久久精品riav| 日本一道高清一区二区三区| 91看片就是不一样| 国产美女精彩久久| 日韩一区二区三区av| 成人免费观看视频| 国产成人1区| 日批免费观看视频| 蜜桃91精品入口| 中文字幕欧美国内| 亚洲精品国久久99热| 亚洲一区二区三区四区五区午夜| 国产小视频你懂的| 成人毛片视频网站| 91亚洲精品视频| 日韩成人中文字幕在线观看| 国产精品久久福利| 一本久久综合| 国产精品欧美一区二区三区不卡| 日日摸日日碰夜夜爽av| 成人午夜在线观看| 亚洲欧美制服另类日韩| 亚洲欧美日韩国产成人精品影院| 国产欧美日本| 精品视频在线一区| 亚洲另类第一页| 久久久久网址| 欧美麻豆久久久久久中文| 色婷婷狠狠综合| bt欧美亚洲午夜电影天堂| 9999国产精品| 成人无码精品1区2区3区免费看| 亚洲人精品午夜射精日韩| 成人在线小视频| 一本大道亚洲视频| 精品久久久久久| 国产91综合一区在线观看| 色狮一区二区三区四区视频| 精品人妻中文无码av在线| 浮妇高潮喷白浆视频| 97久草视频| 欧美成aaa人片免费看| 欧美日韩精品三区| 中文字幕av在线一区二区三区| 国产精品三上| 亚洲欧洲免费| 黄大色黄女片18免费| 国产免费黄色av| 久久久神马电影| 日本亚洲欧洲色α| 亚洲精品中文字| 在线亚洲+欧美+日本专区| 久久亚洲精品小早川怜子| 国产乱码精品| 深夜福利久久| 91麻豆精品| jjzz黄色片| 精品少妇人妻av免费久久洗澡| 国产欧美亚洲日本| 国模视频一区二区| 亚洲男人的天堂在线| 欧洲精品视频在线观看| 中文字幕不卡在线播放| 国产一区二区免费在线| 精品成人一区| 激情婷婷综合| 亚洲精品国产九九九| 一本加勒比北条麻妃| 91看片在线免费观看| 一区二区三区日韩视频| 国产精品一级久久久| 欧美性受xxx| 久久九九全国免费精品观看| 亚洲成年网站在线观看| 日本精品视频一区二区三区| 一色屋精品亚洲香蕉网站| 国产麻豆视频一区| 狠狠爱综合网| 亚洲第一福利专区| 日本视频在线免费| 中文字幕亚洲影院| 男人的天堂avav| 精品国产乱码一区二区三区四区| 66m—66摸成人免费视频| 日韩av一卡二卡| 午夜精品视频在线观看| 中文字幕精品—区二区四季| 韩国av一区二区三区四区| 中文字幕一区二区三区久久网站| 日韩欧洲国产| av资源在线免费观看| 久久性爱视频网站| 无码内射中文字幕岛国片| 亚洲一区美女| 国产精品免费在线播放| 国产成人精品在线视频| 色偷偷噜噜噜亚洲男人的天堂| 亚洲电影第1页| 欧美三级韩国三级日本三斤| 亚洲一区二区三区爽爽爽爽爽| 26uuu亚洲综合色欧美| 久久97超碰国产精品超碰| 亚洲承认在线| 偷拍欧美精品| 免费欧美视频| 中文一区二区三区四区| 中文乱码字幕高清一区二区| 992kp免费看片| 久久精品久久99| 最近免费中文字幕中文高清百度| 玖玖精品在线视频| 日本在线播放一区| 国产日本一区二区三区| 国产精品免费看久久久香蕉| 久久久久久欧美| 久久国产精彩视频| 国产一区二区三区毛片| 亚洲经典中文字幕| 欧美日韩国产经典色站一区二区三区 | 国产chinese中国hdxxxx| 好男人www社区| av黄色在线网站| 美脚丝袜脚交一区二区| 久久久久久久午夜| 日韩人妻无码精品久久久不卡| 亚洲欧洲精品在线| 日韩高清专区| 欧美午夜精品久久久久免费视| 97久久夜色精品国产九色| 91精品久久久久久久久久久久久久| 欧美一区第一页| 18久久久久久| 国产69精品久久久久久| 欧美性做爰毛片| 国产欧美欧洲在线观看| 国产有码在线一区二区视频| 国产精品久久久久久亚洲影视| 欧美中文在线免费| 国产成人精品av| 91视频免费在线| 91成人免费在线观看| 91网站在线免费观看| 91在线国产电影| 99精品在线直播| 久久久久久久久久久久久久一区| 国产一区二区三区四区五区在线| 激情伦成人综合小说| 久久国产精品亚洲va麻豆| 久久久久久久久久久久久9999| 91视频婷婷| 日韩欧美一区二区视频在线播放| 亚洲成人自拍视频| 午夜啪啪免费视频| 免费看日b视频| 91精品91久久久中77777老牛 | 国产欧美亚洲日本| 欧美二区三区| 成年人黄色在线观看| 国产高清不卡无码视频| 人人妻人人添人人爽欧美一区| 国产区二区三区| 亚欧精品在线视频| 五月开心播播网| 精品伦精品一区二区三区视频密桃| 91狠狠综合久久久| 视频一区视频二区欧美| 台湾佬综合网| 欧美99在线视频观看| 亚洲一区日本| 国产高清成人在线| 国产精品久久毛片av大全日韩| 亚洲一二三区视频在线观看| 日本大香伊一区二区三区| 日韩欧美中文一区| 夜夜嗨av色综合久久久综合网| 久久久久久国产三级电影| 国产精品高潮在线| 国产精品乱子乱xxxx| 中文视频一区视频二区视频三区| 成年女人18级毛片毛片免费| 日韩大尺度视频| 欧美视频一区二区在线| 国产精品毛片视频| 综合久久久久| 老司机一区二区| 最好看的中文字幕久久| 在线亚洲一区二区| 亚洲精品按摩视频| 欧美激情精品久久久久久大尺度| 欧洲美女7788成人免费视频| 快播亚洲色图| 国产真实乱子伦| 波多野结衣福利| y111111国产精品久久久| 亚洲国产91| 国产东北露脸精品视频| 成人欧美一区二区三区| 欧美三级电影在线观看| 亚洲精品电影在线| 日本成人免费在线| 久久精品国产一区二区三区日韩| www.亚洲成人网| 日本中文字幕精品| 国产精品极品国产中出| 亚洲乱码久久| 91色乱码一区二区三区| 午夜激情久久久| 欧美日韩dvd在线观看| 色综合91久久精品中文字幕| 91国产丝袜在线放| 91午夜在线观看| 噜噜噜在线视频| 极品美女一区二区三区| 日韩精品成人一区二区三区| 国产精品天干天干在线综合| 欧美日韩免费观看一区二区三区| 深夜福利国产精品| 3d动漫精品啪啪一区二区三区免费 | 国产乱人伦丫前精品视频| 黄色精品网站| 久久女同性恋中文字幕| 欧美中文字幕久久| 在线看欧美日韩| 精品视频在线观看| 天堂社区在线视频| 91嫩草|国产丨精品入口| 国产精品伦理久久久久久| 91蜜桃视频在线| 5月丁香婷婷综合| 97国产suv精品一区二区62| 免费看污久久久| 中文字幕在线综合| 国产精品亚洲四区在线观看| 99精品久久久| 国产精品久久综合| 精品国产乱子伦一区| 91久久国产精品| 久草在在线视频| 国产精品毛片aⅴ一区二区三区| 狠狠久久婷婷| 一区二区三区精品视频在线| 亚洲欧美日韩精品久久奇米色影视| 国产欧美一区二区三区久久| 久久久久久久久久网| 91视频成人| 日本人妖一区二区| 亚洲福利一二三区| 精品国产一区二区三区四区在线观看 | 欧美日韩一区成人| 国产精品91在线| 成人毛片视频网站| 丁香花五月激情| 免费在线观看成人av| 日韩欧美国产一区二区| 欧美日韩成人黄色| 一本一生久久a久久精品综合蜜| 日韩aaaaa| 欧美成人直播| 国产精品天干天干在观线| 亚洲人成网站在线播| 国产日韩亚洲精品| 88av在线播放| 91精品99| 亚洲男人都懂的| 久久亚洲国产成人| 国产精品久久..4399| 日本99精品| 国产电影精品久久禁18| 7777精品伊人久久久大香线蕉| 91精品中国老女人| av在线网站免费观看| 日韩中文在线电影| 国产精品久久久久永久免费观看| 精品国偷自产在线视频99| 中文网丁香综合网| 99久久99久久精品国产| 青青草一区二区三区| 欧美一区二区三区人| 99热99热| 国产三级视频网站| 久久欧美肥婆一二区| 在线观看国产一区二区| 国产女人精品视频| 婷婷中文字幕在线观看| 一区二区视频欧美| 一本色道久久加勒比精品| 日韩av免费在线看| 久久撸在线视频| 伊人影院久久| 日韩欧美在线第一页| 国产三级精品网站| 黄色片免费网址| 欧美视频日韩| 色综合久久88色综合天天免费| 国产精品福利在线| 插我舔内射18免费视频| 亚洲综合另类| 91精品国产高清一区二区三区蜜臀| 国产aⅴ夜夜欢一区二区三区| 一区二区在线免费观看视频| 国产综合久久| 欧美性猛交xxxx黑人交| 91九色国产在线| 成人h动漫精品一区| 玖玖在线精品| 精品成人免费观看| 久久最新免费视频| 久久成人福利| 亚洲精品一二三| 国产欧美精品在线| 欧美性xxxx图片| 久久国产免费看| 精品免费99久久| youjizz.com在线观看| 日本一道高清一区二区三区| 综合在线观看色| 亚洲qvod图片区电影| 国产91丝袜美女在线播放| 国产黄色精品视频| 国产一区二区三区四区福利| 欧美激情国产精品日韩| 午夜欧美精品| 欧美男同性恋视频网站| 在线一区高清| 亚洲成在人线免费观看| 午夜精品久久久久久不卡8050| 99re视频| 涩涩涩久久久成人精品| 久久老女人爱爱| 国内精品久久久久久| 2018国产精品| 激情综合色丁香一区二区| 亚洲视频在线播放| 国产精品专区在线| 中文字幕一区二区三区欧美日韩 | 日韩欧美电影在线| 97超碰免费观看| 精品在线91| 5月丁香婷婷综合| 一本一本a久久| 免费短视频成人日韩| 日韩欧美高清视频| 欧美一区二区三区电影在线观看 | 大乳护士喂奶hd|