日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++控制台贪吃蛇小游戏详细教程

發布時間:2023/12/20 c/c++ 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++控制台贪吃蛇小游戏详细教程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

游戲截圖

?
?
開始動畫:?
?
游戲過程:?

游戲架構設計

該游戲的玩法簡單,玩家通過鍵盤方向鍵控制蛇上下左右移動,吃到食物得分并增長,碰到墻或者自己的身體則死亡,游戲結束。?
整個游戲其實就是一個無窮的循環,直到退出游戲時退出循環。我們暫且將這個循環稱為一級循環,這個循環包含游戲開始動畫,游戲難度選擇,游戲過程這三個子模塊,其中游戲過程這個模塊亦是一個循環,我們暫且將其稱為二級循環。它們之間的關系大致如下圖:?
?
現在我們根據上圖進行細化,對各個模塊的實現進行簡單描述。

1.游戲開始動畫

開始動畫的實現主要依靠對點的操作來實現,這里我們先建立一個概念,就是將控制臺界面看成一個原點在左上角的坐標系,一個點(x,y)表示坐標系中的一個格子,如下圖所示:?
?
我們的開始動畫是由一條蛇和一行文字從左到右移動而成,這里我們先單獨討論一下蛇,要達到移動的效果,我采取的策略是將整個過程分為三部分:?
第一部分為蛇從左邊開始出現到整個身體完全出現?
第二部分為蛇身整體從左移動到接觸右邊界的過程?
第三部分為蛇從接觸右邊界到完全消失的過程
?

我們先來看一下第一部分,這一部分的實現首先是建立一個deque雙端隊列,用于存儲點的對象,這些點就是組成蛇身的元素,然后再用一個for循環將容器中的點依次打印出來,每打印一個點停頓一會,這樣就達到了移動的效果。全部打印完后就到了第二部分,這部分蛇的每次前進都是通過計算將要移動到的下一個點的坐標,然后將這個點打印出來,與此同時將蛇尾,亦即queue中的首端點去掉,并擦除屏幕上該點顏色。第三部分就直接依次從蛇尾擦除即可。?
同理,文字snake的移動也基本類似,稍微改動即可,因為無需對首尾進行操作,而是要對所以點進行移動,因此容器選用vector。?
具體請參看startinterface.h以及startinterface.cpp

2.選擇難度

其實這個模塊很簡單,我就簡單介紹一下,先將難度選擇的文字信息打印在屏幕上,然后通過控制鍵盤方向鍵選擇,回車鍵確認,為了突出選中項,需要給選中項打上背景色,然后每一次上下移動時,先將當前的背景色去掉,然后給下一個選中項打上背景色,按下回車后通過改變蛇移動的速度實現改變難度。其中讀取鍵盤輸入是通過getch()函數完成的。?

3.游戲過程

這個模塊就是整個游戲最主要的部分了,首先它先繪制出地圖以及側邊欄,同時初始化蛇和食物,然后通過一個無窮循環監聽鍵盤,以此來控制蛇移動,同時又進行各種判斷,來判斷是否死亡、吃到食物或暫停。需要提一下,這里使用kbhit()函數來監聽鍵盤,它用來判斷在一段固定的時間內是否有鍵盤輸入,要知道,這個函數的返回值有兩個,第一個是是否有輸入的返回值,第二個才是鍵盤輸入的內容,也就是說要經過兩次的讀取緩沖區才能讀到真正的鍵盤輸入。?

游戲代碼實現

從這里開始我們就可以真正動手來實現游戲了,在動手之前,我建議先下載游戲來玩幾局,弄清整個游戲的邏輯,這樣更能有一個清晰的思路。?
接著你可以將以下的代碼或者github上的代碼按下面幾張圖的流程添加進工程里,當然如果你使用其他IDE的話就按照它的方式來弄,然后進行編譯試一下。

首先新建工程?

然后將文件一個一個添加進工程里

最后所有文件添加完就是這樣了

記得要把編譯器改成c++11標準

完成了以上幾步后就可以點編譯按鈕進行編譯,同時運行一下,看看效果。然后閱讀源碼或者修改一下,看看編譯后有什么不同。?
這里代碼.h文件是類的定義,.cpp文件是類的實現。整個程序共有七個類,分別為Tools,Point,StartInterface,Snake,Map,Food。?
因為整個游戲需要對于點的大量操作,所以建立Tools和Point兩個類,Tools工具類主要是用于設置光標的位置以及輸出文字的顏色,Point類設置點的對象,因為其他類都是建立在這兩個類的基礎上的,所以閱讀代碼時要先看這兩個。然后才開始從main.cpp開始看,一行一行,看到出現新的類就轉到該類的聲明與定義文件去看,這樣閱讀起來比較清晰,這里簡要說明一下各個類的功能,Controller類就是控制整個游戲過程的,包括游戲的各個階段,比如更新分數,游戲難度選擇等;Food類實現食物的隨機出現;Map類負責繪制地圖,我由于時間關系(主要是懶)沒有加入地圖,只有邊界,但原理和邊界是一模一樣的,同樣是將點繪制出來,然后每一次都判斷蛇是否撞到地圖即可;Snake類控制蛇的移動和吃到食物等。?
各個類之間的關系大致如下:

以下是實現的代碼

main.cpp

#include "controller.h"int main()//程序入口 {Controller c;//聲明一個Controller類c.Game();//整個游戲循環return 0; }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

controller.h

#ifndef CONTROLLER_H #define CONTROLLER_Hclass Controller { public:Controller() : speed(200), key(1), score(0) {}void Start();void Select();void DrawGame();int PlayGame();void UpdateScore(const int&);void RewriteScore();int Menu();void Game();int GameOver(); private:int speed;int key;int score; }; #endif // CONTROLLER_H
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

controller.cpp

#include <iostream> #include <time.h> #include <conio.h> #include <windows.h> #include "controller.h" #include "tools.h" #include "startinterface.h" #include "map.h" #include "snake.h" #include "food.h"void Controller::Start()//開始界面 {SetWindowSize(41, 32);//設置窗口大小SetColor(2);//設置開始動畫顏色StartInterface *start = new StartInterface();//動態分配一個StartInterface類startstart->Action();//開始動畫delete start;//釋放內存空間/*設置關標位置,并輸出提示語,等待任意鍵輸入結束*/SetCursorPosition(13, 26);std::cout << "Press any key to start... " ;SetCursorPosition(13, 27);system("pause"); }void Controller::Select()//選擇界面 {/*初始化界面選項*/SetColor(3);SetCursorPosition(13, 26);std::cout << " " ;SetCursorPosition(13, 27);std::cout << " " ;SetCursorPosition(6, 21);std::cout << "請選擇游戲難度:" ;SetCursorPosition(6, 22);std::cout << "(上下鍵選擇,回車確認)" ;SetCursorPosition(27, 22);SetBackColor();//第一個選項設置背景色以表示當前選中std::cout << "簡單模式" ;SetCursorPosition(27, 24);SetColor(3);std::cout << "普通模式" ;SetCursorPosition(27, 26);std::cout << "困難模式" ;SetCursorPosition(27, 28);std::cout << "煉獄模式" ;SetCursorPosition(0, 31);score = 0;/*上下方向鍵選擇模塊*/int ch;//記錄鍵入值key = 1;//記錄選中項,初始選擇第一個bool flag = false;//記錄是否鍵入Enter鍵標記,初始置為否while ((ch = getch())){switch (ch)//檢測輸入鍵{case 72://UP上方向鍵if (key > 1)//當此時選中項為第一項時,UP上方向鍵無效{switch (key){case 2:SetCursorPosition(27, 22);//給待選中項設置背景色SetBackColor();std::cout << "簡單模式" ;SetCursorPosition(27, 24);//將已選中項取消我背景色SetColor(3);std::cout << "普通模式" ;--key;break;case 3:SetCursorPosition(27, 24);SetBackColor();std::cout << "普通模式" ;SetCursorPosition(27, 26);SetColor(3);std::cout << "困難模式" ;--key;break;case 4:SetCursorPosition(27, 26);SetBackColor();std::cout << "困難模式" ;SetCursorPosition(27, 28);SetColor(3);std::cout << "煉獄模式" ;--key;break;}}break;case 80://DOWN下方向鍵if (key < 4){switch (key){case 1:SetCursorPosition(27, 24);SetBackColor();std::cout << "普通模式" ;SetCursorPosition(27, 22);SetColor(3);std::cout << "簡單模式" ;++key;break;case 2:SetCursorPosition(27, 26);SetBackColor();std::cout << "困難模式" ;SetCursorPosition(27, 24);SetColor(3);std::cout << "普通模式" ;++key;break;case 3:SetCursorPosition(27, 28);SetBackColor();std::cout << "煉獄模式" ;SetCursorPosition(27, 26);SetColor(3);std::cout << "困難模式" ;++key;break;}}break;case 13://Enter回車鍵flag = true;break;default://無效按鍵break;}if (flag) break;//輸入Enter回車鍵確認,退出檢查輸入循環SetCursorPosition(0, 31);//將光標置于左下角,避免關標閃爍影響游戲體驗}switch (key)//根據所選選項設置蛇的移動速度,speed值越小,速度越快{case 1:speed = 135;break;case 2:speed = 100;break;case 3:speed = 60;break;case 4:speed = 30;break;default:break;} }void Controller::DrawGame()//繪制游戲界面 {system("cls");//清屏/*繪制地圖*/SetColor(3);Map *init_map = new Map();init_map->PrintInitmap();delete init_map;/*繪制側邊欄*/SetColor(3);SetCursorPosition(33, 1);std::cout << "Greedy Snake" ;SetCursorPosition(34, 2);std::cout << "貪吃蛇" ;SetCursorPosition(31, 4);std::cout << "難度:" ;SetCursorPosition(36, 5);switch (key){case 1:std::cout << "簡單模式" ;break;case 2:std::cout << "普通模式" ;break;case 3:std::cout << "困難模式" ;break;case 4:std::cout << "煉獄模式" ;break;default:break;}SetCursorPosition(31, 7);std::cout << "得分:" ;SetCursorPosition(37, 8);std::cout << " 0" ;SetCursorPosition(33, 13);std::cout << " 方向鍵移動" ;SetCursorPosition(33, 15);std::cout << " ESC鍵暫停" ; }int Controller::PlayGame()//游戲二級循環 {/*初始化蛇和食物*/Snake *csnake = new Snake();Food *cfood = new Food();SetColor(6);csnake->InitSnake();srand((unsigned)time(NULL));//設置隨機數種子,如果沒有 食物的出現位置將會固定cfood->DrawFood(*csnake);/*游戲循環*/while (csnake->OverEdge() && csnake->HitItself()) //判斷是否撞墻或撞到自身,即是否還有生命{/*調出選擇菜單*/if (!csnake->ChangeDirection()) //按Esc鍵時{int tmp = Menu();//繪制菜單,并得到返回值switch (tmp){case 1://繼續游戲break;case 2://重新開始delete csnake;delete cfood;return 1;//將1作為PlayGame函數的返回值返回到Game函數中,表示重新開始case 3://退出游戲delete csnake;delete cfood;return 2;//將2作為PlayGame函數的返回值返回到Game函數中,表示退出游戲default:break;}}if (csnake->GetFood(*cfood)) //吃到食物{csnake->Move();//蛇增長UpdateScore(1);//更新分數,1為分數權重RewriteScore();//重新繪制分數cfood->DrawFood(*csnake);//繪制新食物}else{csnake->NormalMove();//蛇正常移動}if (csnake->GetBigFood(*cfood)) //吃到限時食物{csnake->Move();UpdateScore(cfood->GetProgressBar()/5);//分數根據限時食物進度條確定RewriteScore();}if (cfood->GetBigFlag()) //如果此時有限時食物,閃爍它{cfood->FlashBigFood();}Sleep(speed);//制造蛇的移動效果}/*蛇死亡*/delete csnake;//釋放分配的內存空間delete cfood;int tmp = GameOver();//繪制游戲結束界面,并返回所選項switch (tmp){case 1:return 1;//重新開始case 2:return 2;//退出游戲default:return 2;} }void Controller::UpdateScore(const int& tmp)//更新分數 {score += key * 10 * tmp;//所得分數根據游戲難度及傳人的參數tmp確定 }void Controller::RewriteScore()//重繪分數 {/*為保持分數尾部對齊,將最大分數設置為6位,計算當前分數位數,將剩余位數用空格補全,再輸出分數*/SetCursorPosition(37, 8);SetColor(11);int bit = 0;int tmp = score;while (tmp != 0){++bit;tmp /= 10;}for (int i = 0; i < (6 - bit); ++i){std::cout << " " ;}std::cout << score ; }int Controller::Menu()//選擇菜單 {/*繪制菜單*/SetColor(11);SetCursorPosition(32, 19);std::cout << "菜單:" ;Sleep(100);SetCursorPosition(34, 21);SetBackColor();std::cout << "繼續游戲" ;Sleep(100);SetCursorPosition(34, 23);SetColor(11);std::cout << "重新開始" ;Sleep(100);SetCursorPosition(34, 25);std::cout << "退出游戲" ;SetCursorPosition(0, 31);/*選擇部分*/int ch;int tmp_key = 1;bool flag = false;while ((ch = getch())){switch (ch){case 72://UPif (tmp_key > 1){switch (tmp_key){case 2:SetCursorPosition(34, 21);SetBackColor();std::cout << "繼續游戲" ;SetCursorPosition(34, 23);SetColor(11);std::cout << "重新開始" ;--tmp_key;break;case 3:SetCursorPosition(34, 23);SetBackColor();std::cout << "重新開始" ;SetCursorPosition(34, 25);SetColor(11);std::cout << "退出游戲" ;--tmp_key;break;}}break;case 80://DOWNif (tmp_key < 3){switch (tmp_key){case 1:SetCursorPosition(34, 23);SetBackColor();std::cout << "重新開始" ;SetCursorPosition(34, 21);SetColor(11);std::cout << "繼續游戲" ;++tmp_key;break;case 2:SetCursorPosition(34, 25);SetBackColor();std::cout << "退出游戲" ;SetCursorPosition(34, 23);SetColor(11);std::cout << "重新開始" ;++tmp_key;break;}}break;case 13://Enterflag = true;break;default:break;}if (flag){break;}SetCursorPosition(0, 31);}if (tmp_key == 1) //選擇繼續游戲,則將菜單擦除{SetCursorPosition(32, 19);std::cout << " " ;SetCursorPosition(34, 21);std::cout << " ";SetCursorPosition(34, 23);std::cout << " ";SetCursorPosition(34, 25);std::cout << " ";}return tmp_key; }void Controller::Game()//游戲一級循環 {Start();//開始界面while (true)//游戲可視為一個死循環,直到退出游戲時循環結束{Select();//選擇界面DrawGame();//繪制游戲界面int tmp = PlayGame();//開啟游戲循環,當重新開始或退出游戲時,結束循環并返回值給tmpif (tmp == 1) //返回值為1時重新開始游戲{system("cls");continue;}else if (tmp == 2) //返回值為2時退出游戲{break;}else{break;}} }int Controller::GameOver()//游戲結束界面 {/*繪制游戲結束界面*/Sleep(500);SetColor(11);SetCursorPosition(10, 8);std::cout << "━━━━━━━━━━━━━━━━━━━━━━" ;Sleep(30);SetCursorPosition(9, 9);std::cout << " ┃ Game Over !!! ┃" ;Sleep(30);SetCursorPosition(9, 10);std::cout << " ┃ ┃" ;Sleep(30);SetCursorPosition(9, 11);std::cout << " ┃ 很遺憾!你掛了 ┃" ;Sleep(30);SetCursorPosition(9, 12);std::cout << " ┃ ┃" ;Sleep(30);SetCursorPosition(9, 13);std::cout << " ┃ 你的分數為: ┃" ;SetCursorPosition(24, 13);std::cout << score ;Sleep(30);SetCursorPosition(9, 14);std::cout << " ┃ ┃" ;Sleep(30);SetCursorPosition(9, 15);std::cout << " ┃ 是否再來一局? ┃" ;Sleep(30);SetCursorPosition(9, 16);std::cout << " ┃ ┃" ;Sleep(30);SetCursorPosition(9, 17);std::cout << " ┃ ┃" ;Sleep(30);SetCursorPosition(9, 18);std::cout << " ┃ 嗯,好的 不了,還是學習有意思 ┃" ;Sleep(30);SetCursorPosition(9, 19);std::cout << " ┃ ┃" ;Sleep(30);SetCursorPosition(9, 20);std::cout << " ┃ ┃" ;Sleep(30);SetCursorPosition(10, 21);std::cout << "━━━━━━━━━━━━━━━━━━━━━━" ;Sleep(100);SetCursorPosition(12, 18);SetBackColor();std::cout << "嗯,好的" ;SetCursorPosition(0, 31);/*選擇部分*/int ch;int tmp_key = 1;bool flag = false;while ((ch = getch())){switch (ch){case 75://LEFTif (tmp_key > 1){SetCursorPosition(12, 18);SetBackColor();std::cout << "嗯,好的" ;SetCursorPosition(20, 18);SetColor(11);std::cout << "不了,還是學習有意思" ;--tmp_key;}break;case 77://RIGHTif (tmp_key < 2){SetCursorPosition(20, 18);SetBackColor();std::cout << "不了,還是學習有意思" ;SetCursorPosition(12, 18);SetColor(11);std::cout << "嗯,好的" ;++tmp_key;}break;case 13://Enterflag = true;break;default:break;}SetCursorPosition(0, 31);if (flag) {break;}}SetColor(11);switch (tmp_key){case 1:return 1;//重新開始case 2:return 2;//退出游戲default:return 1;} }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196
  • 197
  • 198
  • 199
  • 200
  • 201
  • 202
  • 203
  • 204
  • 205
  • 206
  • 207
  • 208
  • 209
  • 210
  • 211
  • 212
  • 213
  • 214
  • 215
  • 216
  • 217
  • 218
  • 219
  • 220
  • 221
  • 222
  • 223
  • 224
  • 225
  • 226
  • 227
  • 228
  • 229
  • 230
  • 231
  • 232
  • 233
  • 234
  • 235
  • 236
  • 237
  • 238
  • 239
  • 240
  • 241
  • 242
  • 243
  • 244
  • 245
  • 246
  • 247
  • 248
  • 249
  • 250
  • 251
  • 252
  • 253
  • 254
  • 255
  • 256
  • 257
  • 258
  • 259
  • 260
  • 261
  • 262
  • 263
  • 264
  • 265
  • 266
  • 267
  • 268
  • 269
  • 270
  • 271
  • 272
  • 273
  • 274
  • 275
  • 276
  • 277
  • 278
  • 279
  • 280
  • 281
  • 282
  • 283
  • 284
  • 285
  • 286
  • 287
  • 288
  • 289
  • 290
  • 291
  • 292
  • 293
  • 294
  • 295
  • 296
  • 297
  • 298
  • 299
  • 300
  • 301
  • 302
  • 303
  • 304
  • 305
  • 306
  • 307
  • 308
  • 309
  • 310
  • 311
  • 312
  • 313
  • 314
  • 315
  • 316
  • 317
  • 318
  • 319
  • 320
  • 321
  • 322
  • 323
  • 324
  • 325
  • 326
  • 327
  • 328
  • 329
  • 330
  • 331
  • 332
  • 333
  • 334
  • 335
  • 336
  • 337
  • 338
  • 339
  • 340
  • 341
  • 342
  • 343
  • 344
  • 345
  • 346
  • 347
  • 348
  • 349
  • 350
  • 351
  • 352
  • 353
  • 354
  • 355
  • 356
  • 357
  • 358
  • 359
  • 360
  • 361
  • 362
  • 363
  • 364
  • 365
  • 366
  • 367
  • 368
  • 369
  • 370
  • 371
  • 372
  • 373
  • 374
  • 375
  • 376
  • 377
  • 378
  • 379
  • 380
  • 381
  • 382
  • 383
  • 384
  • 385
  • 386
  • 387
  • 388
  • 389
  • 390
  • 391
  • 392
  • 393
  • 394
  • 395
  • 396
  • 397
  • 398
  • 399
  • 400
  • 401
  • 402
  • 403
  • 404
  • 405
  • 406
  • 407
  • 408
  • 409
  • 410
  • 411
  • 412
  • 413
  • 414
  • 415
  • 416
  • 417
  • 418
  • 419
  • 420
  • 421
  • 422
  • 423
  • 424
  • 425
  • 426
  • 427
  • 428
  • 429
  • 430
  • 431
  • 432
  • 433
  • 434
  • 435
  • 436
  • 437
  • 438
  • 439
  • 440
  • 441
  • 442
  • 443
  • 444
  • 445
  • 446
  • 447
  • 448
  • 449
  • 450
  • 451
  • 452
  • 453
  • 454
  • 455
  • 456
  • 457
  • 458
  • 459
  • 460
  • 461
  • 462
  • 463
  • 464
  • 465
  • 466
  • 467
  • 468
  • 469
  • 470
  • 471
  • 472
  • 473
  • 474
  • 475
  • 476
  • 477
  • 478
  • 479
  • 480
  • 481
  • 482
  • 483
  • 484
  • 485
  • 486
  • 487
  • 488
  • 489
  • 490
  • 491
  • 492
  • 493
  • 494
  • 495
  • 496
  • 497
  • 498
  • 499
  • 500
  • 501
  • 502
  • 503
  • 504
  • 505
  • 506
  • 507
  • 508
  • 509
  • 510
  • 511
  • 512
  • 513
  • 514
  • 515
  • 516
  • 517
  • 518
  • 519
  • 520
  • 521
  • 522
  • 523
  • 524
  • 525
  • 526
  • 527
  • 528
  • 529
  • 530
  • 531
  • 532
  • 533
  • 534
  • 535
  • 536
  • 537
  • 538
  • 539
  • 540
  • 541
  • 542
  • 543
  • 544
  • 545
  • 546
  • 547
  • 548
  • 549
  • 550
  • 551
  • 552
  • 553
  • 554
  • 555
  • 556
  • 557
  • 558
  • 559
  • 560
  • 561
  • 562
  • 563
  • 564
  • 565
  • 566
  • 567
  • 568
  • 569
  • 570
  • 571

food.h

#ifndef FOOD_H #define FOOD_H#include "snake.h" class Snake; class Food { public:Food() : cnt(0), flash_flag(false), big_flag(false), x(0), y(0), big_x(0), big_y(0), progress_bar(0) {}void DrawFood(Snake&);void DrawBigFood(Snake&);int GetCnt();void FlashBigFood();bool GetBigFlag();int GetProgressBar(); private:int cnt;bool flash_flag;//閃爍標記bool big_flag;//是否有限時食物標記int x, y;int big_x, big_y;int progress_bar;//限時食物進度條friend class Snake; }; #endif // FOOD_H
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

food.cpp

#include "food.h" #include "tools.h" #include <cstdlib> #include <iostream>void Food::DrawFood(Snake& csnake)//繪制食物 {/*利用rand函數獲得坐標,并將其范圍限制在2-29內,即在地圖內,如果獲得的坐標與蛇身重疊,則重新獲取。同時每5顆食物就出現一顆限時食物*/while (true){int tmp_x = rand() % 30;int tmp_y = rand() % 30;if(tmp_x < 2) tmp_x += 2;if(tmp_y < 2) tmp_y += 2;bool flag = false;for (auto& point : csnake.snake){if ((point.GetX() == tmp_x && point.GetY() == tmp_y) || (tmp_x == big_x && tmp_y == big_y)) {flag = true;break;}}if (flag)continue;x = tmp_x;y = tmp_y;SetCursorPosition(x, y);SetColor(13);std::cout << "★" ;++cnt;cnt %= 5;if (cnt == 0){DrawBigFood(csnake);}break;} }void Food::DrawBigFood(Snake& csnake)//繪制限時食物 {SetCursorPosition(5, 0);SetColor(11);std::cout << "------------------------------------------" ;//進度條progress_bar = 42;while (true){int tmp_x = rand() % 30;int tmp_y = rand() % 30;if(tmp_x < 2) tmp_x += 2;if(tmp_y < 2) tmp_y += 2;bool flag = false;for (auto& point : csnake.snake){if ((point.GetX() == tmp_x && point.GetY() == tmp_y) || (tmp_x == x && tmp_y == y)){flag = true;break;}}if (flag)continue;big_x = tmp_x;big_y = tmp_y;SetCursorPosition(big_x, big_y);SetColor(18);std::cout << "■" ;big_flag = true;flash_flag = true;break;} }int Food::GetCnt() {return cnt; }void Food::FlashBigFood()//閃爍限時食物 {SetCursorPosition(big_x, big_y);SetColor(18);if (flash_flag){std::cout << " " ;flash_flag = false;}else{std::cout << "■" ;flash_flag = true;}SetCursorPosition(26, 0);SetColor(11);for (int i = 42; i >= progress_bar; --i)//進度條縮短std::cout << "\b \b" ;--progress_bar;if (progress_bar == 0) {SetCursorPosition(big_x, big_y);std::cout << " " ;big_flag = false;big_x = 0;big_y = 0;} }bool Food::GetBigFlag() {return big_flag; }int Food::GetProgressBar() {return progress_bar; }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119

map.h

#ifndef MAP_H #define MAP_H#include <vector> #include "point.h" class Map { public:Map()//默認構造函數,將正方形各點壓入initmap{initmap.emplace_back(Point(1, 1));initmap.emplace_back(Point(2, 1));initmap.emplace_back(Point(3, 1));initmap.emplace_back(Point(4, 1));initmap.emplace_back(Point(5, 1));initmap.emplace_back(Point(6, 1));initmap.emplace_back(Point(7, 1));initmap.emplace_back(Point(8, 1));initmap.emplace_back(Point(9, 1));initmap.emplace_back(Point(10, 1));initmap.emplace_back(Point(11, 1));initmap.emplace_back(Point(12, 1));initmap.emplace_back(Point(13, 1));initmap.emplace_back(Point(14, 1));initmap.emplace_back(Point(15, 1));initmap.emplace_back(Point(16, 1));initmap.emplace_back(Point(17, 1));initmap.emplace_back(Point(18, 1));initmap.emplace_back(Point(19, 1));initmap.emplace_back(Point(20, 1));initmap.emplace_back(Point(21, 1));initmap.emplace_back(Point(22, 1));initmap.emplace_back(Point(23, 1));initmap.emplace_back(Point(24, 1));initmap.emplace_back(Point(25, 1));initmap.emplace_back(Point(26, 1));initmap.emplace_back(Point(27, 1));initmap.emplace_back(Point(28, 1));initmap.emplace_back(Point(29, 1));initmap.emplace_back(Point(30, 1));initmap.emplace_back(Point(1, 2));initmap.emplace_back(Point(30, 2));initmap.emplace_back(Point(1, 3));initmap.emplace_back(Point(30, 3));initmap.emplace_back(Point(1, 4));initmap.emplace_back(Point(30, 4));initmap.emplace_back(Point(1, 5));initmap.emplace_back(Point(30, 5));initmap.emplace_back(Point(1, 6));initmap.emplace_back(Point(30, 6));initmap.emplace_back(Point(1, 7));initmap.emplace_back(Point(30, 7));initmap.emplace_back(Point(1, 8));initmap.emplace_back(Point(30, 8));initmap.emplace_back(Point(1, 9));initmap.emplace_back(Point(30, 9));initmap.emplace_back(Point(1, 10));initmap.emplace_back(Point(30, 10));initmap.emplace_back(Point(1, 11));initmap.emplace_back(Point(30, 11));initmap.emplace_back(Point(1, 12));initmap.emplace_back(Point(30, 12));initmap.emplace_back(Point(1, 13));initmap.emplace_back(Point(30, 13));initmap.emplace_back(Point(1, 14));initmap.emplace_back(Point(30, 14));initmap.emplace_back(Point(1, 15));initmap.emplace_back(Point(30, 15));initmap.emplace_back(Point(1, 16));initmap.emplace_back(Point(30, 16));initmap.emplace_back(Point(1, 17));initmap.emplace_back(Point(30, 17));initmap.emplace_back(Point(1, 18));initmap.emplace_back(Point(30, 18));initmap.emplace_back(Point(1, 19));initmap.emplace_back(Point(30, 19));initmap.emplace_back(Point(1, 20));initmap.emplace_back(Point(30, 20));initmap.emplace_back(Point(1, 21));initmap.emplace_back(Point(30, 21));initmap.emplace_back(Point(1, 22));initmap.emplace_back(Point(30, 22));initmap.emplace_back(Point(1, 23));initmap.emplace_back(Point(30, 23));initmap.emplace_back(Point(1, 24));initmap.emplace_back(Point(30, 24));initmap.emplace_back(Point(1, 25));initmap.emplace_back(Point(30, 25));initmap.emplace_back(Point(1, 26));initmap.emplace_back(Point(30, 26));initmap.emplace_back(Point(1, 27));initmap.emplace_back(Point(30, 27));initmap.emplace_back(Point(1, 28));initmap.emplace_back(Point(30, 28));initmap.emplace_back(Point(1, 29));initmap.emplace_back(Point(30, 29));initmap.emplace_back(Point(1, 30));initmap.emplace_back(Point(2, 30));initmap.emplace_back(Point(3, 30));initmap.emplace_back(Point(4, 30));initmap.emplace_back(Point(5, 30));initmap.emplace_back(Point(6, 30));initmap.emplace_back(Point(7, 30));initmap.emplace_back(Point(8, 30));initmap.emplace_back(Point(9, 30));initmap.emplace_back(Point(10, 30));initmap.emplace_back(Point(11, 30));initmap.emplace_back(Point(12, 30));initmap.emplace_back(Point(13, 30));initmap.emplace_back(Point(14, 30));initmap.emplace_back(Point(15, 30));initmap.emplace_back(Point(16, 30));initmap.emplace_back(Point(17, 30));initmap.emplace_back(Point(18, 30));initmap.emplace_back(Point(19, 30));initmap.emplace_back(Point(20, 30));initmap.emplace_back(Point(21, 30));initmap.emplace_back(Point(22, 30));initmap.emplace_back(Point(23, 30));initmap.emplace_back(Point(24, 30));initmap.emplace_back(Point(25, 30));initmap.emplace_back(Point(26, 30));initmap.emplace_back(Point(27, 30));initmap.emplace_back(Point(28, 30));initmap.emplace_back(Point(29, 30));initmap.emplace_back(Point(30, 30));}void PrintInitmap();//繪制初始地圖 private:std::vector<Point> initmap;//保存初始地圖/*Map類可自定義多種地圖,只需將表示地圖的各個點保存在相應的map中,并在Snake類中增加相應判斷撞墻函數即可std::vector<Point> map1;std::vector<Point> map2;*/ }; #endif // MAP_H
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137

map.cpp

#include "map.h" #include <windows.h>void Map::PrintInitmap()//繪制初始地圖 {for (auto& point : initmap){point.Print();Sleep(10);//調用Sleep函數可營造動畫效果} }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

point.h

#ifndef POINT_H #define POINT_Hclass Point { public:Point(){}Point(const int x, const int y) : x(x), y(y) {}void Print();void PrintCircular();void Clear();void ChangePosition(const int x, const int y);bool operator== (const Point& point) { return (point.x == this->x) && (point.y == this->y); }int GetX(){ return this->x; }int GetY(){ return this->y; } private:int x, y; }; #endif // POINT_H
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

point.cpp

#include "point.h" #include "tools.h" #include <iostream>void Point::Print()//輸出方塊 {SetCursorPosition(x, y);std::cout << "■" ; }void Point::PrintCircular()//輸出圓形 {SetCursorPosition(x, y);std::cout << "●" ; }void Point::Clear()//清除輸出 {SetCursorPosition(x, y);std::cout << " " ; }void Point::ChangePosition(const int x, const int y)//改變坐標 {this->x = x;this->y = y; }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

snake.h

#ifndef SNAKE_H #define SNAKE_H#include <deque> #include "point.h" #include "food.h"class Food; class Snake { public:enum Direction {UP, DOWN, LEFT, RIGHT};Snake() {snake.emplace_back(14, 8);snake.emplace_back(15, 8);snake.emplace_back(16, 8);direction = Direction::DOWN;}void InitSnake();void Move();void NormalMove();bool OverEdge();bool HitItself();bool ChangeDirection();bool GetFood(const Food&);bool GetBigFood(Food&); private:std::deque<Point> snake;Direction direction;friend class Food;//將Food類置為友元,以便訪問其私有元素 }; #endif // SNAKE_H
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

snake.cpp

#include "snake.h" #include <conio.h> #include "tools.h" #include <iostream>void Snake::InitSnake()//初始化蛇 {for (auto& point : snake){point.PrintCircular();} }void Snake::Move()//蛇增長 {switch (direction){case Direction::UP:snake.emplace_back(Point(snake.back().GetX(), snake.back().GetY() - 1 ));break;case Direction::DOWN:snake.emplace_back(Point(snake.back().GetX(), snake.back().GetY() + 1 ));break;case Direction::LEFT:snake.emplace_back(Point(snake.back().GetX() - 1, snake.back().GetY() ));break;case Direction::RIGHT:snake.emplace_back(Point(snake.back().GetX() + 1, snake.back().GetY() ));break;default:break;}SetColor(14);snake.back().PrintCircular(); }void Snake::NormalMove()//蛇正常移動,頭增長,尾縮短 {Move();snake.front().Clear();snake.pop_front(); }bool Snake::OverEdge()//超出邊界 {return snake.back().GetX() < 30 &&snake.back().GetY() < 30 &&snake.back().GetX() > 1 &&snake.back().GetY() > 1; }bool Snake::HitItself()//撞到自身 {std::deque<Point>::size_type cnt = 1;Point *head = new Point(snake.back().GetX(), snake.back().GetY());//獲得頭部坐標for (auto& point : snake) //如果整條蛇中與蛇頭不相同的坐標不等于蛇長,則意味著蛇頭碰撞到自身{if ( !(point == *head) )++cnt;elsebreak;}delete head;if(cnt == snake.size())return true;elsereturn false; }bool Snake::ChangeDirection()//改變方向 {char ch;if (kbhit())//kbhit函數返回值為兩個,需注意{ch = getch();switch (ch){case -32:ch = getch();switch (ch){case 72:if (direction != Direction::DOWN)//如果方向與當前運動方向相反,無效direction = Direction::UP;break;case 80:if (direction != Direction::UP)direction = Direction::DOWN;break;case 75:if (direction != Direction::RIGHT)direction = Direction::LEFT;break;case 77:if (direction != Direction::LEFT)direction = Direction::RIGHT;break;default:break;}return true;case 27://ESCreturn false;default:return true;}}return true; }bool Snake::GetFood(const Food& cfood) {if (snake.back().GetX() == cfood.x && snake.back().GetY() == cfood.y)return true;elsereturn false; }bool Snake::GetBigFood(Food& cfood) {if (snake.back().GetX() == cfood.big_x && snake.back().GetY() == cfood.big_y){cfood.big_flag = false;cfood.big_x = 0;cfood.big_y = 0;SetCursorPosition(1, 0);std::cout << " " ;return true;}elsereturn false; }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135

startinterface.h

#ifndef STRATINTERFACE_H #define STARTINTERFACE_H#include <deque> #include <vector> #include "point.h" class StartInterface { public:StartInterface() : speed(35) {startsnake.emplace_back(Point(0,14));//é?startsnake.emplace_back(Point(1,14));startsnake.emplace_back(Point(2,15));startsnake.emplace_back(Point(3,16));startsnake.emplace_back(Point(4,17));startsnake.emplace_back(Point(5,18));startsnake.emplace_back(Point(6,17));startsnake.emplace_back(Point(7,16));startsnake.emplace_back(Point(8,15));startsnake.emplace_back(Point(9,14));textsnake.emplace_back(Point(-26, 14));//Stextsnake.emplace_back(Point(-25, 14));textsnake.emplace_back(Point(-27, 15));textsnake.emplace_back(Point(-26, 16));textsnake.emplace_back(Point(-25, 17));textsnake.emplace_back(Point(-27, 18));textsnake.emplace_back(Point(-26, 18));textsnake.emplace_back(Point(-23, 14));//Ntextsnake.emplace_back(Point(-23, 15));textsnake.emplace_back(Point(-23, 16));textsnake.emplace_back(Point(-23, 17));textsnake.emplace_back(Point(-23, 18));textsnake.emplace_back(Point(-22, 15));textsnake.emplace_back(Point(-21, 16));textsnake.emplace_back(Point(-20, 17));textsnake.emplace_back(Point(-19, 14));textsnake.emplace_back(Point(-19, 15));textsnake.emplace_back(Point(-19, 16));textsnake.emplace_back(Point(-19, 17));textsnake.emplace_back(Point(-19, 18));textsnake.emplace_back(Point(-17, 18));//Atextsnake.emplace_back(Point(-16, 17));textsnake.emplace_back(Point(-15, 16));textsnake.emplace_back(Point(-14, 15));textsnake.emplace_back(Point(-14, 16));textsnake.emplace_back(Point(-13, 14));textsnake.emplace_back(Point(-13, 16));textsnake.emplace_back(Point(-12, 15));textsnake.emplace_back(Point(-12, 16));textsnake.emplace_back(Point(-11, 16));textsnake.emplace_back(Point(-10, 17));textsnake.emplace_back(Point(-9, 18));textsnake.emplace_back(Point(-7, 14));//Ktextsnake.emplace_back(Point(-7, 15));textsnake.emplace_back(Point(-7, 16));textsnake.emplace_back(Point(-7, 17));textsnake.emplace_back(Point(-7, 18));textsnake.emplace_back(Point(-6, 16));textsnake.emplace_back(Point(-5, 15));textsnake.emplace_back(Point(-5, 17));textsnake.emplace_back(Point(-4, 14));textsnake.emplace_back(Point(-4, 18));textsnake.emplace_back(Point(-2, 14));//Etextsnake.emplace_back(Point(-2, 15));textsnake.emplace_back(Point(-2, 16));textsnake.emplace_back(Point(-2, 17));textsnake.emplace_back(Point(-2, 18));textsnake.emplace_back(Point(-1, 14));textsnake.emplace_back(Point(-1, 16));textsnake.emplace_back(Point(-1, 18));textsnake.emplace_back(Point(0, 14));textsnake.emplace_back(Point(0, 16));textsnake.emplace_back(Point(0, 18));}void PrintFirst();void PrintSecond();void PrintThird();void PrintText();void ClearText();void Action(); private:std::deque<Point> startsnake;//開始動畫中的蛇std::vector<Point> textsnake;//開始動畫中的文字int speed;//動畫的速度 }; #endif // STRATINTERFACE_H
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92

startinterface.cpp

#include "startinterface.h" #include <windows.h>void StartInterface::PrintFirst()//蛇從左邊出現到完全出現的過程 {for (auto& point : startsnake){point.Print();Sleep(speed);} }void StartInterface::PrintSecond()//蛇從左向右移動的過程 {for (int i = 10; i != 40; ++i) //蛇頭需要從10移動到40{/*計算蛇頭的下一個位置,并將其壓入startsnake中,繪制出來,將蛇尾去掉*/int j = ( ((i-2)%8) < 4 )?( 15 + (i-2)%8 ) : ( 21 - (i-2)%8 );startsnake.emplace_back( Point(i, j) );startsnake.back().Print();startsnake.front().Clear();startsnake.pop_front();Sleep(speed);} }void StartInterface::PrintThird()//蛇從接觸右邊到消失的過程 {while ( !startsnake.empty() || textsnake.back().GetX() < 33 ) //當蛇還沒消失或文字沒移動到指定位置{if ( !startsnake.empty() ) //如果蛇還沒消失,繼續移動{startsnake.front().Clear();startsnake.pop_front();}ClearText();//清除已有文字PrintText();//繪制更新位置后的文字Sleep(speed);} }void StartInterface::PrintText() {for (auto& point : textsnake){if (point.GetX() >= 0)point.Print();} }void StartInterface::ClearText() {for (auto& point : textsnake) //清除的同時將文字整體向右移動一格{if (point.GetX() >= 0)point.Clear();point.ChangePosition(point.GetX() + 1, point.GetY());} }void StartInterface::Action() {PrintFirst();PrintSecond();PrintThird(); }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67

tools.h

#ifndef TOOLS_H #define TOOLS_Hvoid SetWindowSize(int cols, int lines); void SetCursorPosition(const int x, const int y); void SetColor(int colorID); void SetBackColor();#endif // TOOLS_H
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

tools.cpp

#include "tools.h" #include <windows.h> #include <stdio.h>void SetWindowSize(int cols, int lines)//設置窗口大小 {system("title 貪吃蛇");//設置窗口標題char cmd[30];sprintf(cmd, "mode con cols=%d lines=%d", cols * 2, lines);//一個圖形■占兩個字符,故寬度乘以2system(cmd);//system(mode con cols=88 lines=88)設置窗口寬度和高度 }void SetCursorPosition(const int x, const int y)//設置光標位置 { COORD position;position.X = x * 2;position.Y = y;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), position); }void SetColor(int colorID)//設置文本顏色 {SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), colorID); }void SetBackColor()//設置文本背景色 {SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_BLUE | BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED ); }

總結

以上是生活随笔為你收集整理的C++控制台贪吃蛇小游戏详细教程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

国产精品久久一 | 四虎在线免费 | 国产精品黑丝在线观看 | 六月丁香色婷婷 | 福利一区视频 | 在线成人免费电影 | 国产精品成人一区二区三区吃奶 | 91av官网| 一级淫片在线观看 | 国产日产精品一区二区三区四区的观看方式 | 欧美日韩国产在线一区 | 久久爱992xxoo | 丁香激情婷婷 | 五月婷婷综合激情网 | 久久婷婷网 | 亚洲少妇影院 | 一区三区视频在线观看 | 天堂av免费观看 | 国产最新在线视频 | 欧美色综合天天久久综合精品 | av丝袜制服| 99资源网 | 四虎影视www | 亚洲成人在线免费 | 91精品国产一区 | 日日干美女| 精品一区91 | 久久久 精品 | 美国av片在线观看 | 麻豆传媒在线视频 | 亚洲欧美婷婷六月色综合 | 日本黄色大片免费看 | 激情综合色综合久久综合 | 99精品视频网 | 欧洲精品二区 | 国产日韩欧美在线观看视频 | 欧美另类交在线观看 | 国产高清视频免费观看 | 精品亚洲男同gayvideo网站 | 欧美一区二区在线免费看 | 日日夜夜人人精品 | 99爱精品在线 | 亚洲成人资源在线观看 | 国产精品福利av | 一区二区视频电影在线观看 | 视频在线观看国产 | 美女黄频 | 亚洲一区免费在线 | 日韩免费av在线 | 欧美日韩在线免费观看 | 特级西西444www大精品视频免费看 | 成人一区在线观看 | 91伊人| 欧美性大战久久久久 | 久久一视频 | 国产精品露脸在线 | 麻豆视频入口 | 国产在线一线 | 人人射人人澡 | 成人黄色小说网 | 国产91精品在线播放 | 日韩毛片在线免费观看 | 成人av在线电影 | 久久人操 | 色网站视频 | 99精品国产高清在线观看 | 玖玖国产精品视频 | 婷婷久久久 | 精品视频在线免费 | 欧美日韩超碰 | 精品一区二区在线免费观看 | 欧美一二三视频 | 免费在线观看中文字幕 | 麻豆免费视频观看 | 亚洲狠狠婷婷 | www.69xx | 波多野结依在线观看 | 超碰在线公开免费 | av免费在线网站 | 色夜视频 | 不卡av电影在线 | 国产91精品看黄网站在线观看动漫 | 亚洲第一中文字幕 | 玖玖视频网 | 国产精品v欧美精品 | 精品久久精品久久 | 香蕉视频色 | 免费在线91 | 美女视频黄免费的 | 欧美激情综合色综合啪啪五月 | 18+视频网站链接 | 欧美一区二区三区在线 | 久久桃花网 | 久久在视频 | 欧美日韩精品电影 | 亚洲成年人在线播放 | 成人性生活大片 | 免费日韩 精品中文字幕视频在线 | 亚洲jizzjizz日本少妇 | www.久艹 | 免费人做人爱www的视 | 天天草天天色 | 国产精品毛片网 | 狠狠色噜噜狠狠 | 成人av在线资源 | 伊人亚洲综合 | 亚洲高清视频在线 | 91精品国产高清自在线观看 | 久久国产精品久久久久 | 国产午夜精品免费一区二区三区视频 | 在线观看视频一区二区三区 | 成人久久精品视频 | 免费一级片在线 | 日韩av中文在线观看 | 欧美在线aaa| 久久99最新地址 | 亚洲麻豆精品 | 天天操·夜夜操 | 四虎www| 亚洲黄色精品 | 婷婷 中文字幕 | 992tv人人草| 久久人人爽人人人人片 | 亚洲精品小视频 | 久久免费成人 | 在线观看视频日韩 | 99精品在线免费视频 | 久久免费公开视频 | 国产在线久草 | 国产999久久久 | 亚洲欧美日韩精品久久奇米一区 | 99久久精品国产欧美主题曲 | 韩国av免费看 | 99精品免费在线观看 | 91漂亮少妇露脸在线播放 | 高清av中文字幕 | 亚洲精品美女久久久久 | 成年人黄色av | 免费看黄的视频 | 成人av电影免费观看 | 在线观看免费成人 | 欧美日本中文字幕 | 天天搞天天干天天色 | 九九热只有这里有精品 | 成 人 黄 色 视频 免费观看 | 国产精品一区二区三区视频免费 | 亚洲国产午夜精品 | 激情久久小说 | 成人黄大片视频在线观看 | 日韩av成人在线 | 天天草天天 | 99在线精品视频观看 | 五月婷在线 | 超碰在线公开 | 国产手机视频在线播放 | 国产亚洲精品久久久久久电影 | 色干综合 | 国产麻豆精品一区 | 色吧久久 | 欧美日韩视频在线观看免费 | 99视频精品在线 | 欧美激情精品久久久久久免费 | 日韩mv欧美mv国产精品 | 日韩精品中文字幕在线 | 9热精品| 久久综合久久综合九色 | 久久伊人精品天天 | 精品视频99 | 日本高清中文字幕有码在线 | 免费观看成人网 | 精品一区三区 | 正在播放久久 | 99久久精品国产网站 | 麻花豆传媒mv在线观看网站 | 国色综合| 成人av一区二区在线观看 | www.久艹| 日韩高清二区 | 免费在线观看一级片 | 中文字幕中文字幕在线中文字幕三区 | 毛片.com| 热久久视久久精品18亚洲精品 | 久久久999精品视频 国产美女免费观看 | 中文字幕在线观看完整版电影 | 手机在线视频福利 | 久久久综合电影 | 丁香六月激情婷婷 | av电影在线观看完整版一区二区 | 懂色av一区二区在线播放 | 久久久精品国产一区二区 | 日韩在线三级 | 91福利免费 | 午夜性生活 | 日本韩国在线不卡 | 波多野结衣精品在线 | 亚洲天天摸日日摸天天欢 | 成片免费 | 狠狠五月婷婷 | 在线看的毛片 | 国产色网 | 在线免费观看的av | 日本激情视频中文字幕 | 91成人精品一区在线播放 | 国产在线免费av | 国产精品久久久久久久毛片 | 色综合久久久久综合 | 日韩视频中文 | 久久不射电影院 | 亚洲国产高清在线 | 日韩午夜高清 | 国产一二三四在线视频 | 色噜噜在线观看 | 国产高清av免费在线观看 | 久草网站在线观看 | 婷婷久久五月天 | 一级久久久 | 成人a毛片| 精品影院一区二区久久久 | av中文国产 | 综合在线亚洲 | 丁香花在线观看视频在线 | 久久爱资源网 | 国产精品久久久久婷婷二区次 | 国产免费大片 | 国产精品免费视频观看 | 蜜臀av免费一区二区三区 | 亚洲综合激情小说 | 成人午夜电影在线观看 | 亚洲精品 在线视频 | 亚洲黄色软件 | 一区二区三区在线观看中文字幕 | 最新中文字幕在线播放 | 久久综合天天 | 伊人狠狠操 | 天天色图| 欧美极品一区二区三区 | 亚洲天天做 | 午夜精品剧场 | www久久精品 | 久久 精品一区 | 欧美性黑人 | 日韩综合精品 | av手机在线播放 | 日韩国产欧美视频 | 国产小视频在线免费观看 | 成人在线观看影院 | 国产伦理精品一区二区 | 最近免费中文视频 | 日韩成人免费电影 | 日本久久久精品视频 | 一区免费观看 | 中文字幕国内精品 | 久久久精品国产一区二区电影四季 | 99久久精品国产系列 | 亚洲va在线va天堂va偷拍 | 91激情小视频 | 亚洲草视频 | 2019中文字幕第一页 | 久久综合色天天久久综合图片 | 久久精国产 | 九九九在线 | 久爱综合 | 国产精品ⅴa有声小说 | 国产精品视屏 | 丁香 婷婷 激情 | 98超碰人人 | 中文字幕乱码视频 | 三日本三级少妇三级99 | 懂色av一区二区在线播放 | www天天干 | 超碰在线97观看 | 成人中心免费视频 | 色综合天天综合网国产成人网 | 国产流白浆高潮在线观看 | 国产视频一 | 婷婷色站 | 国产成人三级在线观看 | 欧美日韩精品免费观看视频 | 欧美日韩免费观看一区二区三区 | 国产一区二区在线免费视频 | 亚洲开心激情 | 激情五月六月婷婷 | 欧美一区二区在线 | 久久久久免费电影 | 久久久这里有精品 | 探花系列在线 | 国产精品video爽爽爽爽 | 国产三级国产精品国产专区50 | 99久久精品免费看国产麻豆 | 亚洲日本国产 | 高清视频一区二区三区 | 99热最新网址 | 国产xxxx | 日韩一级片观看 | 日韩欧美精选 | 肉色欧美久久久久久久免费看 | 亚洲国产精品99久久久久久久久 | 欧美日韩三级在线观看 | 黄色资源在线 | 婷婷久久一区 | 免费看片日韩 | 最近免费在线观看 | www.玖玖玖 | 国产98色在线 | 日韩 | 18av在线视频| 懂色av懂色av粉嫩av分享吧 | 国产亚洲精品综合一区91 | 碰超人人 | 中文字幕丰满人伦在线 | 狠狠躁日日躁狂躁夜夜躁av | 手机在线永久免费观看av片 | 五月婷婷在线观看视频 | 免费看污污视频的网站 | 国产原创在线 | 久久久久久久国产精品影院 | 嫩草av影院 | 日韩一区二区三区不卡 | 亚洲综合黄色 | 91精品国产自产老师啪 | 夜夜操天天干 | 天天做天天干 | 69精品视频在线观看 | 色a综合 | 综合久久网站 | 精品久久久久久久久久久久 | 国产精品免费观看视频 | 综合色在线观看 | 天天躁日日躁狠狠躁av中文 | 中文字幕免费观看全部电影 | 中文在线www | 九九视频免费观看视频精品 | 亚洲视频 视频在线 | 8x成人免费视频 | 亚洲欧洲精品久久 | 一本一道波多野毛片中文在线 | 99精品国产福利在线观看免费 | 色是在线视频 | 国产97在线视频 | 97视频在线免费观看 | 91成人在线视频观看 | www.天天操.com| 波多野结衣一区三区 | 欧美成人tv | 久久视频精品在线观看 | 中文字幕亚洲不卡 | 亚洲精品国产成人av在线 | 最新av观看| 亚洲精品色 | 国产三级香港三韩国三级 | 久久久精品 | 欧美日韩另类视频 | 日本久久不卡视频 | 一区精品在线 | 91手机在线看片 | 在线日韩中文 | 波多野结衣亚洲一区二区 | 国产一二区在线观看 | 精品国产观看 | 91亚洲国产成人久久精品网站 | www一起操| 国产裸体无遮挡 | 久久人人爽视频 | 国产成人免费在线观看 | 久久久久 免费视频 | 色婷婷电影 | 久久理论电影 | 久久男人影院 | 天天射天天操天天干 | 国产黄a三级三级 | 正在播放国产一区二区 | 色婷婷 亚洲 | 国产 日韩 欧美 在线 | 91九色蝌蚪在线 | 色在线高清 | 九色精品免费永久在线 | 狠狠色丁香婷婷 | 在线观看视频黄色 | 午夜91视频| 蜜臀久久99精品久久久久久网站 | 亚洲成人免费在线观看 | www毛片com| 一二三四精品 | 91精品国产99久久久久久红楼 | 丝袜+亚洲+另类+欧美+变态 | 成人黄色片免费看 | 久久字幕精品一区 | 亚洲视频一区二区三区在线观看 | 成人观看视频 | av电影一区二区 | 久久免费看毛片 | 国产中文字幕一区二区 | 免费观看黄色12片一级视频 | 国产精品久久久久久一区二区三区 | 亚洲综合五月天 | 日韩黄色网络 | 欧美精彩视频在线观看 | av大片免费在线观看 | 婷婷丁香激情综合 | 91成人精品国产刺激国语对白 | 嫩草av影院 | 欧美日韩成人 | 六月激情 | 五月激情丁香 | 午夜性生活 | 国内精品在线观看视频 | 免费手机黄色网址 | 色婷婷国产精品一区在线观看 | 欧美另类成人 | 日韩欧美视频 | 国产精品一区二区av | 天天操天天是 | 国产91免费观看 | 精品久久影院 | 国产成人333kkk | 在线观看aa | 最近免费中文视频 | 欧美在线视频二区 | 激情网在线观看 | 黄色毛片在线观看 | 亚洲欧美在线视频免费 | 又污又黄网站 | 国产一区二区精品91 | 欧美日韩中文另类 | 国产精品第72页 | 日韩精品久久久久久中文字幕8 | 久久综合久久久久88 | 久久综合久久鬼 | 久久成人精品电影 | 99久久精品免费视频 | 亚洲精品在线一区二区三区 | 国产成人亚洲精品自产在线 | 在线观看免费观看在线91 | 国产亚洲成av人片在线观看桃 | 亚洲国产精品一区二区久久hs | 五月婷婷天堂 | 男女拍拍免费视频 | 91在线免费公开视频 | 99国产视频在线 | 欧美a视频在线观看 | 岛国大片免费视频 | 探花视频免费在线观看 | 国产精品一区二区久久 | 国产福利免费看 | 精品久久影院 | 在线高清 | 日日操天天操夜夜操 | 色五月成人 | 久久久国产一区二区三区 | 色综合天天狠狠 | 韩国一区在线 | 69国产精品视频 | 久久久久麻豆 | 国产一区二区不卡视频 | 久久久久激情电影 | 色伊人网| 婷婷婷国产在线视频 | 国产精品自产拍在线观看 | 天天操夜夜干 | 99久久精品国产一区 | 亚洲手机av | 免费视频a| 亚洲电影图片小说 | 999视频在线播放 | 在线亚洲激情 | 91精品国产综合久久婷婷香蕉 | 欧美一级特黄aaaaaa大片在线观看 | 日本久久久久久久久久 | 一区二区精品 | www视频在线播放 | 在线视频成人 | 一区 二区 精品 | av资源中文字幕 | 国产精品嫩草影院99网站 | 久久精品站 | 国产精品久久久999 国产91九色视频 | 久久久久久久电影 | 91av电影| 免费看的视频 | 四虎国产精品永久在线国在线 | 日韩在线二区 | www久久久久| 色天天 | 免费日韩 精品中文字幕视频在线 | 亚洲成a人片在线观看中文 中文字幕在线视频第一页 狠狠色丁香婷婷综合 | 精品黄色在线 | 久久成人在线视频 | 久久少妇av | 91在线国内视频 | 高清一区二区三区av | 国产综合久久 | 亚洲精品国偷自产在线91正片 | 91av视频| 一区二区三区在线免费播放 | 成年人视频在线观看免费 | av电影免费在线看 | 91成人看片 | 涩涩网站在线观看 | 国产黄免费 | 久久久久久久久福利 | 国产高清区 | 国产精品久久久免费看 | 久久精品欧美一 | 日本黄色免费大片 | 午夜色大片在线观看 | av超碰在线观看 | 国产最新网站 | 日本午夜在线观看 | 欧美性大战久久久久 | 中文字幕在线观看视频一区二区三区 | 激情文学丁香 | 九色在线视频 | 久久免费视频5 | 日本天天操 | 国产精品久久久久影院 | 国产成人久久精品亚洲 | 一二三精品视频 | 欧美精品乱码久久久久 | 天天伊人网 | 亚洲 中文 在线 精品 | 波多野结衣精品视频 | 97国产情侣爱久久免费观看 | 日批视频| 免费视频 你懂的 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 国产成人久久精品77777 | 91成人精品一区在线播放69 | 久久精品专区 | 婷婷色在线播放 | 天堂av官网 | 天天操天天草 | 日韩高清免费观看 | 国产99在线播放 | 精品在线视频一区二区三区 | 国产精品免费观看久久 | 久草新在线 | 久久电影国产免费久久电影 | 亚洲精品国偷自产在线99热 | 国产精品精品久久久 | 99视频在线观看视频 | 国产一级大片在线观看 | 久久不射电影网 | 免费看av片网站 | 日日干天天操 | 91系列在线观看 | 福利二区视频 | 国产 视频 高清 免费 | 国产精品国内免费一区二区三区 | 一区二区三区免费播放 | 中文字幕在线字幕中文 | 亚洲蜜桃av| 人人澡人人模 | 97超级碰碰碰碰久久久久 | 国产伦理精品一区二区 | 久久艹99 | 成人免费看视频 | av资源中文字幕 | 国产精品一区二区久久久 | 国产资源在线播放 | 欧美婷婷色 | 日日躁夜夜躁xxxxaaaa | 国产精品美女网站 | 婷婷久月| 久草在线91 | 国产小视频你懂的 | 国产粉嫩在线观看 | 国产成人精品一区在线 | 成年人在线 | 一区免费在线 | 一二三精品视频 | 国产精品wwwwww | 97视频网站 | 国产精品国产三级国产aⅴ入口 | 日本中文字幕在线看 | 久久都是精品 | 久久国产精品99精国产 | 久久久在线视频 | 免费一级日韩欧美性大片 | 久草在线资源免费 | 亚洲少妇久久 | 国产一区二区三区午夜 | 中文字幕在线看片 | 国产美女精品久久久 | av电影免费 | 在线看一区 | 香蕉视频18 | 91免费版在线观看 | 久久久亚洲影院 | 亚洲情感电影大片 | 日韩视频精品在线 | 日韩中文字幕在线看 | 不卡中文字幕在线 | 黄色成年 | 一区二区伦理电影 | 日本爱爱片 | www.久久成人| 日韩黄色软件 | 国产精品视频不卡 | 亚洲免费av一区二区 | 国产1区2 | 丝袜美腿在线 | 久草免费在线观看视频 | 99性视频| 中文在线字幕免费观看 | 久久99国产精品自在自在app | 区一区二在线 | 激情亚洲综合在线 | 亚洲精品成人免费 | www免费| 国产精品99久久久久久小说 | 国内精品久久久久久久久 | 亚洲精品国产成人av在线 | 最新中文字幕在线播放 | 2019av在线视频 | 久久久天天操 | 欧美日韩视频 | 麻豆久久久 | 久要激情网 | 伊人狠狠色 | 成人黄色电影在线 | 久一久久 | 久久综合狠狠综合久久狠狠色综合 | 中日韩欧美精彩视频 | 91天天操 | 久久麻豆精品 | 黄色软件网站在线观看 | 婷婷国产v亚洲v欧美久久 | 人人插人人费 | 精品亚洲欧美一区 | 国产五十路毛片 | 黄a在线看 | 日韩三级中文字幕 | 亚洲综合色视频在线观看 | 成人a在线观看 | 久保带人 | 91精品老司机久久一区啪 | 欧美亚洲国产日韩 | 亚洲精品美女久久久 | 久久免费视频网站 | 国产九色91| 亚洲国产无 | 伊人久久电影网 | av短片在线 | 国产高清一级 | 日韩伦理片hd | 日韩精品中文字幕久久臀 | 成人激情开心网 | 日韩av三区 | 日本女人在线观看 | 成人免费在线观看入口 | 热re99久久精品国产99热 | 高清在线一区二区 | 日韩天天干| 西西4444www大胆艺术 | 欧美在线视频第一页 | 精品国产成人 | 国产精品视频最多的网站 | 精品免费久久 | 黄色av电影在线 | 国产精品久久久久一区二区国产 | 中文字幕免费在线看 | 久久不卡免费视频 | 蜜臀av性久久久久蜜臀av | 亚洲激情小视频 | 91传媒在线看 | 狠狠干网 | 国产又黄又爽又猛视频日本 | a级国产乱理论片在线观看 伊人宗合网 | 日韩欧美电影在线 | 在线免费黄色av | 色在线免费观看 | 黄色网址在线播放 | 欧洲精品视频一区二区 | 久免费视频 | 成人av一级片 | 亚洲一区二区精品3399 | 国产亚洲欧美一区 | 极品美女被弄高潮视频网站 | 中文字幕在线看 | 亚洲成人av在线播放 | 午夜视频在线观看一区二区 | 国产这里只有精品 | 激情一区二区三区欧美 | 成人av在线直播 | 国产精品第10页 | 久久综合成人 | 在线播放国产精品 | 5月丁香婷婷综合 | 国产亚洲日本 | 激情五月色播五月 | 婷婷综合网 | 精品在线观看国产 | 日韩在线观看网站 | 天天干 天天摸 天天操 | 久久毛片网站 | 国产精品久久99精品毛片三a | 美女久久| 久久国产精品一区二区三区 | 婷婷久草| 日韩电影在线观看一区二区 | 日韩电影在线看 | www.久热| 日韩精品久久久免费观看夜色 | 免费观看黄 | 在线亚洲欧美日韩 | 欧美黄网站 | 成人羞羞视频在线观看免费 | 天天射天天艹 | 黄色毛片在线 | 99一区二区三区 | 国产精品一区二区三区在线播放 | 在线国产日韩 | 少妇资源站 | www.亚洲精品在线 | 国产精品电影一区 | 亚洲精品国偷自产在线91正片 | 欧美激情第一页xxx 午夜性福利 | 国产精品伦一区二区三区视频 | 超碰国产在线播放 | 国产 色| 精品久久毛片 | 中文字幕在线观看国产 | 日韩免费电影 | 国产视频每日更新 | 国产 欧美 日产久久 | 欧美九九九 | 在线欧美日韩 | 五月婷婷欧美 | 久久久久亚洲精品男人的天堂 | 亚洲理论在线 | 国产高清免费av | 夜夜高潮夜夜爽国产伦精品 | www.91成人| 久久www免费视频 | 国产专区在线视频 | 亚洲日本精品视频 | 日本在线观看黄色 | 日韩国产精品毛片 | 中文字幕频道 | 日韩在线中文字幕视频 | 天天天操天天天干 | 国产成人精品国内自产拍免费看 | 久草视频在线免费播放 | 91视频电影 | 麻豆一二三精选视频 | 91.dizhi永久地址最新 | 国产永久免费高清在线观看视频 | 日本在线视频网址 | 色综合久久综合网 | 狠狠狠色丁香婷婷综合久久五月 | 伊人天天狠天天添日日拍 | 国产精品久久久久久久久久 | 日韩中文在线视频 | 国产免费专区 | 亚洲国内精品 | 夜夜骑日日 | 亚洲成a人片77777潘金莲 | 91自拍视频在线观看 | 最近中文字幕大全中文字幕免费 | 免费观看午夜视频 | 亚洲综合射 | www免费看片com | 999在线视频 | 日韩精品久久久久久中文字幕8 | 五月婷婷视频 | a久久久久久 | 国产精品涩涩屋www在线观看 | 黄色福利网 | 一区三区视频在线观看 | 五月天激情综合 | av在线不卡观看 | 黄色成人在线观看 | 日韩中文在线观看 | 成人性生交大片免费看中文网站 | 日韩69av| 美女精品国产 | 日韩视频免费观看高清完整版在线 | 色99色| 中文字幕资源网 | av免费电影网站 | 中文字幕日本在线观看 | 国产综合在线观看视频 | 久久久www成人免费毛片麻豆 | 亚洲免费视频观看 | 最近免费中文字幕mv在线视频3 | 高清视频一区二区三区 | www.久热 | 久久9精品 | 欧美另类交人妖 | 国产精品久久久久国产a级 激情综合中文娱乐网 | 亚洲激情网站免费观看 | 日韩有码第一页 | 亚洲高清av在线 | 国产对白av | 日韩精品一区二区三区电影 | 成人av电影网址 | 日韩中文在线视频 | 日韩黄色免费 | 香蕉视频18| 欧美综合在线视频 | 九九视频在线 | www.一区二区三区 | 久久久免费毛片 | 久久久久一区二区三区四区 | 可以免费看av | 超级碰碰免费视频 | 免费成人av网站 | 久久久久久久久久久国产精品 | 日日夜夜操操操操 | 一级一片免费视频 | 中文字幕 国产视频 | 在线国产精品视频 | 久久a v视频 | 国产精品99久久久久久宅男 | 亚洲乱码精品久久久久 | 久久99精品一区二区三区三区 | 久久久九色精品国产一区二区三区 | 成人毛片在线视频 | 精品国产大片 | 在线天堂中文www视软件 | 欧美日韩网站 | 精品视频不卡 | 亚洲永久精品一区 | 欧美色插 | 97精品国自产拍在线观看 | 亚洲电影网站 | 亚洲综合色视频在线观看 | 欧美黑吊大战白妞欧美 | 99 精品 在线| 国产一级特黄电影 | av播放在线 | a视频在线播放 | 久久久久国产精品免费网站 | 欧美另类高清 videos | 亚洲精品在线观看的 | 久99久视频 | 日日摸日日爽 | 精品在线不卡 | 日日色综合| 亚洲成人黄色在线观看 | 亚洲精品免费观看视频 | 国产精品久久久久久久久费观看 | 免费观看av网站 | 久久免费99精品久久久久久 | 狠狠躁夜夜躁人人爽超碰91 | 天天操·夜夜操 | 99日精品 | 欧美久久电影 | 国产69熟 | 青青久视频| 亚洲亚洲精品在线观看 | 日韩成人精品 | 久久91久久久久麻豆精品 | 亚洲成aⅴ人在线观看 | 久久综合久久久 | 国产精品18久久久久久久久久久久 | 欧美另类高潮 | 免费看v片网站 | 免费在线黄色av | 精品在线视频一区 | 国产自在线 | 日韩成人邪恶影片 | 久久久久日本精品一区二区三区 | 一本到视频在线观看 | 中文字幕亚洲五码 | 久久精品4 | 色综合人人 | 精品国产99 | 成人a在线观看高清电影 | 黄色成人av | 五月婷亚洲 | 99热99re6国产在线播放 | 黄色小说网站在线 | 日韩精品欧美一区 | 在线观看第一页 | 中文字幕在线影视资源 | 国产一区二区三区高清播放 | 中文字幕在线播放日韩 | 久久免费看a级毛毛片 | 高清国产午夜精品久久久久久 | 伊人久久婷婷 | 亚洲视频 在线观看 | 欧美日韩视频在线观看免费 | 欧美日韩性视频在线 | 亚洲欧美成aⅴ人在线观看 四虎在线观看 | 999久久国精品免费观看网站 | 国产高清福利在线 | av 一区二区三区四区 | 激情网站免费观看 | 久草爱视频 | 99视频偷窥在线精品国自产拍 | 中文字幕一区二区三区精华液 | 欧美a免费| 五月婷婷在线视频观看 | 美女网站色| 免费又黄又爽的视频 | 免费看v片网站 | 91av在线精品| 国产色视频网站2 | 日日干av | 中文字幕日韩伦理 | 国产小视频免费观看 | 国产精品黄 | 国内久久久久 | 福利一区二区在线 | www178ccom视频在线 | 91九色国产视频 | 成人国产网站 | 久久久久久福利 | 91av视频在线观看免费 | 美女av在线免费 | 成人午夜电影免费在线观看 | 国产福利av| 久草在线欧美 | 国产色小视频 | 首页av在线| 在线观看日韩 | 国产剧情在线一区 | 天天爽夜夜爽人人爽一区二区 | 国产一区二三区好的 | 91久久偷偷做嫩草影院 | 91久久久久久久 | 国产日本在线 | 97福利视频 | 日韩99热| 日韩免费av网址 | 久久免费av电影 | 天天天综合网 | 香蕉视频久久久 | av动图| 欧美成人手机版 | 一区二区理论片 | 中文字幕一区在线 | 精品国产伦一区二区三区观看说明 | 国内精品美女在线观看 | 日韩精品在线一区 | 五月天六月婷 | 国产无吗一区二区三区在线欢 | 中文在线字幕观看电影 | 亚洲电影成人 | 草草草影院| 色在线网| 国产精品福利无圣光在线一区 | 久久短视频 | 色吧久久 | 久久理论影院 | 欧美日韩高清一区二区 国产亚洲免费看 | 亚洲黄色免费观看 | 久久亚洲私人国产精品va | 国产精品第一视频 | 国产一级不卡视频 | 亚洲久草网| 亚洲国产视频a | 狠狠操综合 | 一区二区激情 | 国产中文字幕亚洲 | 中文字幕久久亚洲 | 日韩午夜视频在线观看 | 久久手机免费观看 | 成人av网站在线 | 色婷婷啪啪免费在线电影观看 | 人人澡人人草 | 99精品视频观看 | 午夜精品久久久久久久99婷婷 | 中文字幕888 | 国产麻豆精品一区二区 | 国产精品va在线观看入 | 99视屏 | 最新中文字幕在线播放 | 日日夜夜精品免费 | 国产小视频你懂的 | 日韩av在线免费播放 | 日韩精品一区二区三区丰满 | 午夜视频在线观看一区二区三区 | 久色婷婷 | 久久大视频 | 91av视频在线观看 | 欧美在线视频精品 | 国产亚洲精品福利 | 亚洲人成在线电影 | 在线影院中文字幕 | 午夜av一区二区三区 | 不卡视频在线看 | 三级av中文字幕 | 亚洲精品福利在线观看 | 黄色av一级 | 中文字幕激情 | 99精品视频在线播放免费 | 婷婷六月天丁香 | 久草网免费 | www.亚洲精品视频 | 午夜国产在线观看 | 国产最新精品视频 | а中文在线天堂 | av片子在线观看 | 日韩三区在线观看 | 天天操比 | 亚洲不卡在线 | 久久综合久久伊人 |