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

隨筆-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://www.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久久99久久久二8| 亚洲欧美视频一区| 国产精品日韩欧美| 欧美在线免费视屏| 久久精品72免费观看| 国产亚洲一区二区三区在线观看 | 久久高清国产| 午夜在线电影亚洲一区| 国产欧美日本一区二区三区| 欧美夜福利tv在线| 久久精品视频免费播放| 最新精品在线| 在线亚洲免费| 合欧美一区二区三区| 欧美激情在线播放| 欧美私人啪啪vps| 久久久久成人精品免费播放动漫| 久久精品欧美日韩精品| 亚洲久久在线| 亚洲欧美日韩在线| 亚洲国产精品国自产拍av秋霞| 亚洲国产精品国自产拍av秋霞| 麻豆精品视频在线| 亚洲在线视频一区| 亚洲一区精品在线| 久久久久成人网| 欧美国产日韩一二三区| 午夜精品久久久久久久久| 久久久久网址| 亚洲欧美精品suv| 久久免费视频网站| 亚洲欧洲av一区二区| 久久婷婷久久| 欧美一区二区三区视频在线观看| 久久九九99视频| 亚洲欧美日韩一区二区三区在线观看| 久久成人国产| 亚洲欧美日本国产有色| 久久亚洲一区| 久久精品99久久香蕉国产色戒| 欧美国产亚洲视频| 久久影音先锋| 国产农村妇女毛片精品久久麻豆| 亚洲国产综合在线看不卡| 国产情人节一区| aa级大片欧美三级| 亚洲精选久久| 久久综合九色99| 久久精品亚洲乱码伦伦中文| 欧美日韩中文字幕日韩欧美| 欧美风情在线观看| 黄色在线成人| 欧美一区观看| 性做久久久久久免费观看欧美| 欧美日韩国产va另类| 欧美不卡激情三级在线观看| 国产日韩欧美在线| 亚洲一区二区三区四区五区午夜 | 欧美精品一区在线播放| 蜜臀av国产精品久久久久| 国产精品永久免费视频| 一区二区三区四区五区精品视频| 一区二区国产精品| 欧美经典一区二区三区| 91久久嫩草影院一区二区| 亚洲国产精品一区二区www| 久久久91精品国产| 久久永久免费| 在线日本高清免费不卡| 另类尿喷潮videofree| 久久躁日日躁aaaaxxxx| 精品99一区二区| 久久色在线播放| 欧美激情亚洲精品| 亚洲欧洲另类| 欧美日本亚洲| 亚洲午夜精品一区二区三区他趣 | 日韩五码在线| 欧美精品一区二区三区高清aⅴ| 亚洲黄页视频免费观看| 99精品国产99久久久久久福利| 欧美国产一区在线| 中日韩在线视频| 久久久久久香蕉网| 最新国产精品拍自在线播放| 欧美激情日韩| 亚洲一区二区高清| 久久综合九色欧美综合狠狠| 亚洲国产精品成人精品| 久久久久看片| 国产精品成av人在线视午夜片| 亚洲全黄一级网站| 亚洲专区在线视频| 国产一区视频在线观看免费| 久久偷窥视频| 亚洲深夜福利视频| 麻豆国产精品va在线观看不卡 | 欧美不卡一卡二卡免费版| 亚洲精选久久| 久久久噜噜噜久噜久久 | 亚洲精品在线电影| 国产精品美女久久久久久2018 | 国产精品swag| 久久综合久久综合久久| 中国av一区| 欧美成人精品| 欧美一区二区日韩一区二区| 永久免费毛片在线播放不卡| 欧美另类高清视频在线| 久久精彩视频| 亚洲午夜激情网站| 欧美激情视频在线播放| 午夜精品婷婷| 日韩午夜在线电影| 今天的高清视频免费播放成人| 欧美精品 日韩| 可以免费看不卡的av网站| 亚洲一区二区三区精品视频| 亚洲人成网站精品片在线观看| 久久久国产成人精品| 亚洲一区二三| 99精品视频一区| 91久久精品国产91久久| 国产午夜精品在线| 国产精品乱码久久久久久| 欧美激情麻豆| 欧美成人第一页| 久久亚洲国产成人| 久久不射网站| 欧美一级在线视频| 亚洲欧美激情在线视频| 一区二区三区波多野结衣在线观看| 亚洲国产二区| 欧美黄色精品| 亚洲国产视频a| 亚洲国产精品传媒在线观看| 美女999久久久精品视频| 久久久国产91| 久久亚洲午夜电影| 久久免费精品日本久久中文字幕| 欧美一乱一性一交一视频| 亚洲尤物视频在线| 中文精品视频| 午夜精品亚洲一区二区三区嫩草| 一区二区三区欧美在线观看| 99精品免费| 亚洲一区二区三区中文字幕| 亚洲网址在线| 性欧美暴力猛交69hd| 欧美一区二区视频观看视频| 性色一区二区| 麻豆精品91| 亚洲破处大片| 国产精品99久久久久久有的能看 | 久久久久久久性| 麻豆国产精品777777在线 | 中文亚洲欧美| 午夜精品区一区二区三| 国产欧美日韩亚洲一区二区三区| 欧美成人在线影院| 欧美日韩一区二区三区免费看| 欧美日韩精品免费在线观看视频| 欧美日韩国产高清| 国产精品最新自拍| 国模 一区 二区 三区| 亚洲东热激情| 一区二区三区高清在线| 亚洲欧美日本精品| 麻豆久久婷婷| 亚洲精选一区二区| 午夜宅男欧美| 欧美jizz19性欧美| 国产精品日韩在线播放| 伊人春色精品| 在线一区二区视频| 久久久xxx| 亚洲精品永久免费| 亚洲欧美综合| 欧美国产日本在线| 国产精品一区二区三区久久| 1024欧美极品| 欧美一区二区三区成人| 欧美成人国产一区二区| 一区二区精品在线| 久久婷婷久久| 国产精品自在在线| 亚洲老司机av| 久久亚洲综合色| 一区二区三区黄色| 欧美成人午夜激情视频| 国模叶桐国产精品一区| 99视频精品免费观看| 久久精品中文字幕免费mv| 日韩视频免费在线| 久久婷婷丁香| 国模精品娜娜一二三区| 亚洲免费视频一区二区| 91久久精品久久国产性色也91| 欧美一区二区成人6969|