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

隨筆-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 閱讀(1760) 評論(0)  編輯 收藏 引用 所屬分類: 游戲

只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产网站欧美日韩免费精品在线观看| 久久夜色精品| 亚洲桃色在线一区| 久久精品国产亚洲5555| 欧美日韩在线视频观看| 一区在线播放| 久久精品国产欧美激情| 一区二区日韩精品| 欧美成人午夜激情在线| 亚洲欧美视频在线观看视频| 欧美另类高清视频在线| 亚洲精品美女91| 免费在线成人av| 久久精品人人爽| 国产自产2019最新不卡| 久久精品2019中文字幕| 亚洲在线国产日韩欧美| 国产精品成人在线观看| 亚洲欧美精品伊人久久| 亚洲私人影院在线观看| 国产精品久久久久免费a∨| 亚洲免费在线精品一区| 亚洲一级高清| 国产午夜精品一区理论片飘花 | 在线午夜精品自拍| 欧美亚洲不卡| 午夜免费在线观看精品视频| 亚洲综合清纯丝袜自拍| 国产视频一区在线观看一区免费| 欧美亚洲视频| 久久精品成人| 亚洲国产精品一区在线观看不卡| 亚洲国产高清在线观看视频| 欧美不卡激情三级在线观看| 夜夜嗨一区二区| 亚洲欧美日韩国产中文| 国模精品一区二区三区色天香| 久久这里有精品15一区二区三区| 久久精品亚洲精品| 亚洲精品国产拍免费91在线| 亚洲激情成人网| 国产精品久久久久久福利一牛影视| 亚洲欧美色婷婷| 久久精品成人一区二区三区蜜臀| 一区在线影院| 亚洲精品国产日韩| 国产麻豆9l精品三级站| 欧美大片第1页| 午夜视频一区二区| 亚洲二区免费| 亚洲视频在线免费观看| 国产一区二区三区日韩欧美| 亚洲国产精品va在线看黑人| 亚洲高清在线播放| 久久躁狠狠躁夜夜爽| 久久综合一区二区| 一区二区三区久久网| 性久久久久久| 欧美二区视频| 一区在线电影| 亚洲电影在线| 国产精品毛片高清在线完整版| 久久精品国产清高在天天线| 欧美精品电影| 久久在线免费视频| 国产精品久久久久久影院8一贰佰| 女仆av观看一区| 国产日本欧美一区二区三区在线| 欧美激情网友自拍| 国产三级精品三级| 亚洲精选一区二区| 亚洲电影av| 欧美在线免费一级片| 亚洲欧美精品在线| 欧美日韩一级大片网址| 亚洲成人在线网站| 黄色国产精品| 欧美一区二区三区在线观看视频| 亚洲手机在线| 欧美国产日韩二区| 欧美成人嫩草网站| 国产综合久久| 欧美制服丝袜| 午夜亚洲视频| 欧美日韩亚洲另类| 性娇小13――14欧美| 久久精品国产视频| 久久精品综合网| 在线国产欧美| 久久精品国产清高在天天线 | 午夜日韩在线| 欧美激情麻豆| 午夜天堂精品久久久久| 欧美亚洲日本一区| 午夜精品视频| 夜久久久久久| 午夜性色一区二区三区免费视频| 亚洲视频免费在线观看| 久久大逼视频| 午夜精品国产精品大乳美女| 欧美日韩免费看| 欧美激情在线观看| 欧美系列亚洲系列| 亚洲专区欧美专区| 亚洲欧美精品在线| 欧美色偷偷大香| 亚洲免费观看视频| 女生裸体视频一区二区三区| 久久麻豆一区二区| 国产午夜精品久久久| 羞羞答答国产精品www一本| 亚洲一区成人| 欧美日韩国产成人在线91| 亚洲国产欧洲综合997久久| 国产区精品视频| 国产精品一区在线观看| 欧美福利电影网| 在线电影国产精品| 亚洲欧美激情一区| 欧美日本精品| 欧美永久精品| 久久国产精品久久久久久| 国产乱码精品一区二区三区五月婷| 在线亚洲精品| 91久久香蕉国产日韩欧美9色| 欧美激情视频一区二区三区不卡| 久久亚洲综合色一区二区三区| 亚洲一区国产视频| 亚洲福利在线看| 国产精自产拍久久久久久蜜| 亚洲国产高清在线| 亚洲人成在线观看| 99精品国产在热久久下载| 久久精品国产亚洲精品| 在线观看亚洲精品视频| 欧美性大战久久久久久久| 久久精品中文| 国产精品久久久一区二区| 国产日韩综合| 国产精品网曝门| 亚洲与欧洲av电影| 欧美在线国产| 毛片一区二区| 羞羞漫画18久久大片| 亚洲国产精品久久久久| 欧美激情国产精品| 一区二区成人精品| 性欧美xxxx视频在线观看| 美腿丝袜亚洲色图| 在线观看欧美亚洲| 在线观看福利一区| 亚洲免费成人av| 亚洲电影激情视频网站| 9i看片成人免费高清| 久久久一二三| 亚洲免费播放| 亚洲欧美日韩在线| 亚洲人成小说网站色在线| 亚洲在线视频免费观看| 欧美日韩三级一区二区| 一区二区三区成人精品| 国产精品卡一卡二| 欧美黄色影院| 蜜桃av久久久亚洲精品| 欧美va天堂在线| 在线观看成人av| 久久激情五月丁香伊人| 欧美亚洲视频一区二区| 国产精品高清在线观看| 国内偷自视频区视频综合| 亚洲免费视频一区二区| 午夜精品久久久| 国内久久婷婷综合| 欧美国产日韩视频| 最新中文字幕亚洲| 亚洲日本成人女熟在线观看| 蜜臀99久久精品久久久久久软件| 狠狠入ady亚洲精品经典电影| 亚洲国产精品电影在线观看| 国产精品成人在线| 蜜臀va亚洲va欧美va天堂| 国内精品免费午夜毛片| 欧美日韩国产综合一区二区| 在线视频亚洲| 亚洲一区免费网站| 亚洲精品国产品国语在线app| 美女主播精品视频一二三四| 久久国产日韩欧美| 久久av资源网站| 亚洲欧美日产图| 亚洲一区二区三区涩| 亚洲欧美激情诱惑| 亚洲一区二区精品视频| 亚洲作爱视频| 99精品国产热久久91蜜凸| 亚洲国产乱码最新视频 | 国产亚洲一区二区三区| 欧美午夜无遮挡| 国产精品高清在线观看| 国产精品成人av性教育|