青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆-91  評論-137  文章-0  trackbacks-0
首先我們需要食物,蛇的節點,一條蛇三個結構
  1 class Food
  2 {
  3 public:
  4     Food(){}
  5     Food(COORD _cd) : cd(_cd){}
  6 
  7     COORD cd;
  8 };
  9 
 10 class SnakeNode
 11 {
 12 public:
 13     SnakeNode() : Prev(0),Next(0)
 14     {
 15         cd.X = cd.Y = 0;
 16     }
 17 
 18     SnakeNode(COORD _cd) : cd(_cd),Prev(0),Next(0){}
 19     SnakeNode(int x,int y) : Prev(0),Next(0)
 20     {
 21         cd.X = x;
 22         cd.Y = y;
 23     }
 24 
 25     COORD cd;
 26     SnakeNode* Prev;
 27     SnakeNode* Next;
 28 };
 29 
 30 class Snake
 31 {
 32 public:
 33     Snake()
 34     {
 35         Initialize();
 36     }
 37 
 38     ~Snake()
 39     {
 40         Destroy();
 41     }
 42 
 43     void Initialize()
 44     {
 45         Score = 0;
 46         Length = 3;
 47         Type = dtLeft;
 48         Speed = 1000;
 49         Score = 0;
 50         SnakeNode* pNode1 = new SnakeNode(GAME_WIDTH / 2,GAME_HEIGHT / 2);
 51         SnakeNode* pNode2 = new SnakeNode(pNode1->cd.X + 1,pNode1->cd.Y);
 52         SnakeNode* pNode3 = new SnakeNode(pNode1->cd.X + 2,pNode1->cd.Y);
 53         pNode1->Next = pNode2;
 54         pNode2->Next = pNode3;
 55         pNode3->Prev = pNode2;
 56         pNode2->Prev = pNode1;
 57         Head = pNode1;
 58         Tail = pNode3;
 59     }
 60 
 61     void Destroy()
 62     {
 63         SnakeNode* pNode = Head->Next;
 64         while(pNode)
 65         {
 66             SnakeNode* Next = pNode->Next;
 67             delete pNode;
 68             pNode = Next;
 69         }
 70         if(Head)
 71         {
 72             delete Head;
 73             Head = Tail = 0;
 74         }
 75     }
 76 
 77     int Insert(int x,int y)
 78     {
 79         SnakeNode* pNode = new SnakeNode(x,y);
 80         pNode->Next = Head;
 81         Head->Prev = pNode;
 82         Head = pNode;
 83         return ++Length;
 84     }
 85 
 86     COORD Pop()
 87     {
 88         COORD cd = Tail->cd;
 89         Tail = Tail->Prev;
 90         delete Tail->Next;
 91         Tail->Next = 0;
 92         return cd;
 93     }
 94 
 95     int Length;                // 長度,無用
 96     DIRECTIONTYPE Type;        // 方向
 97     SnakeNode* Head;        // 蛇頭節點
 98     SnakeNode* Tail;        // 蛇尾節點
 99     int Speed;                // 速度
100     Food food;                // 食物位置
101     int Score;                // 分數
102 };
然后我們需要一個函數表示蛇向蛇頭方向移動了一格
 1     static void SnakeMove(Snake& sn)
 2     {
 3         COORD cdNew;
 4         switch(sn.Type)
 5         {
 6         case dtTop:
 7             cdNew = sn.Head->cd;
 8             cdNew.Y--;
 9             break;
10         case dtRight:
11             cdNew = sn.Head->cd;
12             cdNew.X++;
13             break;
14         case dtBottom:
15             cdNew = sn.Head->cd;
16             cdNew.Y++;
17             break;
18         case dtLeft:
19             cdNew = sn.Head->cd;
20             cdNew.X--;
21             break;
22         }
23         if(cdNew.X < 0 || cdNew.X >= GAME_WIDTH || cdNew.Y < 0 || cdNew.Y >= GAME_HEIGHT) throw "GameOver";
24         sn.Insert(cdNew.X,cdNew.Y);
25         if(cdNew.X != sn.food.cd.X || cdNew.Y != sn.food.cd.Y)
26         {
27             COORD cd = sn.Pop();
28             Check(sn);
29             DrawBack(cd);
30         }
31         else
32         {
33             sn.food = GetFood();
34             sn.Score++;
35             sn.Speed = 1000 - ((int)(sn.Score / 10)) * 100;
36             Check(sn);
37         }
38     }
我們需要一個延時函數和等待用戶按鍵的函數
 1     static void Delay(Snake& sn)
 2     {
 3         DWORD dwStart = GetTickCount();
 4         while(GetTickCount() - dwStart <= sn.Speed)
 5         {
 6             int Key = GetKey();
 7             if(Key != -1)
 8             {
 9                 switch(Key)
10                 {
11                 case VK_UP:
12                     sn.Type = dtTop;
13                     break;
14                 case VK_RIGHT:
15                     sn.Type = dtRight;
16                     break;
17                 case VK_DOWN:
18                     sn.Type = dtBottom;
19                     break;
20                 case VK_LEFT:
21                     sn.Type = dtLeft;
22                     break;
23                 }
24                 Sleep(sn.Speed - GetTickCount() + dwStart);
25                 return;
26             }
27             Sleep(1);
28         }
29     }
30 
31     static int GetKey()
32     {
33         int KeyList[] = {VK_UP,VK_RIGHT,VK_DOWN,VK_LEFT,VK_ESCAPE,0x52};
34         for(int i=0;i<6;i++)
35         {
36             if(GetAsyncKeyState(KeyList[i]))
37                 return KeyList[i];
38         }
39         return -1;
40     }
當然我們也需要一個生成食物的函數(當然食物不能生成在蛇身上)
 1     static Food GetFood()
 2     {
 3         COORD cd;
 4         BOOL bIn = TRUE;
 5         while(bIn)
 6         {
 7             bIn = FALSE;
 8             int n = rand() % (GAME_WIDTH * GAME_HEIGHT);
 9             cd.X = n % GAME_WIDTH;
10             cd.Y = n / GAME_WIDTH;
11             for(SnakeNode* pNode=g_Snake.Head;pNode!=g_Snake.Tail;pNode=pNode->Next)
12             {
13                 if(cd.X == pNode->cd.X && cd.Y == pNode->cd.Y)
14                 {
15                     bIn = TRUE;
16                     break;
17                 }
18             }
19         }
20         Food Result(cd);
21         return Result;
22     }
最后是整體框架
 1     static void Loop()
 2     {
 3         try
 4         {
 5             while(TRUE)
 6             {
 7                 DrawSnake(g_Snake);
 8                 DrawFood(g_Snake);
 9                 DrawInformation(g_Snake);
10                 Delay(g_Snake);
11                 SnakeMove(g_Snake);
12             }
13         }
14         catch(LPTSTR str)
15         {
16             system("cls");
17             SetCursor(0,0);
18             printf(str);
19             printf("\n1.Press R For Restart\n2.Press ESC For Exit");
20             while(TRUE)
21             {
22                 int Key = GetKey();
23                 switch(Key)
24                 {
25                 case VK_ESCAPE:
26                     return;
27                 case 0x52// Press R
28                     g_Snake.Destroy();
29                     Initlize();
30                     Loop();
31                     return;
32                 }
33                 Sleep(100);
34             }
35         }
36     }
運行結果


蛇做的有點抽象...

部分代碼取自http://m.shnenglu.com/menjitianya/archive/2011/05/26/147205.html

所有代碼打包下載
posted on 2011-05-28 13:02 lwch 閱讀(1755) 評論(0)  編輯 收藏 引用 所屬分類: 游戲
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲视频福利| 欧美三级电影一区| 亚洲精品免费网站| 蜜臀久久99精品久久久久久9| 性色一区二区三区| 久久精品人人做人人综合 | 国产九色精品成人porny| 国产精品久久久久影院亚瑟 | 午夜在线一区二区| 亚洲欧美第一页| 久久国产精品久久国产精品| 久久久久青草大香线综合精品| 久久夜色精品国产| 欧美日韩国产一区精品一区| 国产精品久久久久9999吃药| 国内精品国语自产拍在线观看| 亚洲高清久久网| 亚洲男人的天堂在线| 久久女同精品一区二区| 亚洲电影av| 午夜精品在线观看| 久久女同精品一区二区| 欧美国产日韩二区| 亚洲一级片在线看| 美日韩精品视频| 欧美色图首页| 亚洲国产99| 久久精品国产欧美亚洲人人爽| 欧美成人精品福利| 午夜精品理论片| 欧美黄色视屏| 一区二区在线免费观看| 亚洲欧美日韩另类精品一区二区三区| 久久久亚洲一区| 99在线精品视频| 你懂的国产精品| 国产一区二区三区四区在线观看| 中文精品在线| 亚洲国产日韩一级| 久久免费国产| 好吊妞**欧美| 久久国产精品久久久久久| 91久久精品www人人做人人爽| 久久gogo国模啪啪人体图| 国产精品高潮呻吟| 99视频日韩| 亚洲国产99| 久久影音先锋| 在线观看亚洲精品视频| 久久精品夜色噜噜亚洲aⅴ| 99re热这里只有精品视频| 免费影视亚洲| 在线观看久久av| 久久人人九九| 欧美在线一二三区| 国产一区二区日韩精品| 欧美一级久久久| 亚洲综合视频网| 国产精品成人v| 亚洲图片欧美一区| 亚洲狠狠婷婷| 欧美日韩久久精品| 亚洲线精品一区二区三区八戒| 亚洲激情一区| 欧美日韩成人综合在线一区二区 | 欧美成年人网| 亚洲激情另类| 亚洲精品网站在线播放gif| 欧美精品福利| 亚洲视频在线观看网站| 一区二区三区日韩欧美| 国产精品白丝av嫩草影院| 亚洲永久精品国产| 亚洲欧美精品伊人久久| 国产视频久久| 欧美成人精品不卡视频在线观看| 女人香蕉久久**毛片精品| 日韩视频久久| 亚洲一区二区三区精品视频| 久久久一区二区| 亚洲国产免费看| 亚洲精品免费一二三区| 国产精品久久久999| 欧美一级视频免费在线观看| 久久久久国内| 亚洲作爱视频| 性欧美大战久久久久久久免费观看| 国产主播一区二区三区| 亚洲第一区在线观看| 国产精品av免费在线观看| 久久久水蜜桃| 欧美色另类天堂2015| 久久精品国产一区二区三区免费看 | 亚洲欧美日本另类| 欧美在现视频| 亚洲乱码精品一二三四区日韩在线 | 亚洲美女视频| 亚洲主播在线观看| 亚洲国产一区二区三区在线播 | 亚洲图中文字幕| 欧美一区二区视频免费观看 | 久久久综合免费视频| 欧美激情综合五月色丁香小说| 午夜在线精品偷拍| 欧美暴力喷水在线| 久久久久综合| 国产精品国产成人国产三级| 免费影视亚洲| 国产日韩欧美电影在线观看| 亚洲精选一区| 在线欧美三区| 性感少妇一区| 午夜精品免费| 欧美日韩在线视频首页| 欧美激情黄色片| 激情欧美日韩| 欧美尤物一区| 午夜在线视频观看日韩17c| 欧美精品激情blacked18| 久久综合久色欧美综合狠狠| 国产精品www994| 亚洲国产精品99久久久久久久久| 国产日韩一区二区三区在线| 在线亚洲自拍| 亚洲午夜性刺激影院| 欧美精品久久久久久| 欧美高清视频在线| 一区二区三区在线视频播放| 欧美一区综合| 久久av一区二区| 国产日韩专区在线| 欧美亚洲一级| 久久国产直播| 国产拍揄自揄精品视频麻豆| 欧美一区二区久久久| 国产精品videosex极品| 一区二区av| 亚洲综合色视频| 国产精品久久亚洲7777| 亚洲欧美成人网| 这里只有视频精品| 欧美视频久久| 亚洲一区二区三区涩| 性一交一乱一区二区洋洋av| 国产美女精品免费电影| 午夜精品福利电影| 久久久最新网址| 在线观看国产欧美| 免费在线观看精品| 亚洲精品国产拍免费91在线| 亚洲视频国产视频| 国产精品丝袜xxxxxxx| 欧美亚洲三区| 欧美国产先锋| 亚洲网址在线| 国产偷久久久精品专区| 久久五月激情| 亚洲三级毛片| 欧美一区二区三区四区在线观看地址| 国产日韩专区| 免费91麻豆精品国产自产在线观看| 91久久久久久久久| 欧美在线三级| 亚洲免费观看高清完整版在线观看熊 | 久久精品国产99精品国产亚洲性色 | 亚洲免费网站| 免费观看在线综合色| 一本色道久久| 国产一区二区三区日韩| 欧美极品在线视频| 欧美一区二区三区免费大片| 欧美激情在线观看| 欧美一区二区视频在线观看| 亚洲激情av在线| 国产欧美精品va在线观看| 免费黄网站欧美| 亚洲欧美日韩国产成人| 亚洲第一精品久久忘忧草社区| 亚洲一区高清| 亚洲欧洲精品一区二区三区| 国产精品系列在线| 欧美日产一区二区三区在线观看| 性久久久久久久| 一本久道久久综合狠狠爱| 久久综合色婷婷| 欧美一区二区三区在线看| 亚洲精品字幕| 在线观看亚洲视频啊啊啊啊| 国产精品日韩欧美一区| 欧美精品麻豆| 美女诱惑一区| 久久精品国产69国产精品亚洲| 99精品欧美一区| 亚洲第一区在线观看| 久久久亚洲影院你懂的| 午夜精品免费在线| 亚洲无线一线二线三线区别av| 亚洲电影免费观看高清完整版在线| 国产精品一区久久久久| 欧美午夜不卡在线观看免费 |