亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? unitsnake.cpp

?? 貪吃蛇貪吃蛇貪吃蛇貪吃蛇貪吃蛇貪吃蛇貪吃蛇貪吃蛇
?? CPP
字號:
#include "UnitSnake.h"
//---------------------------------------------------------------------------
TSnakeBuf::TWall TSnakeBuf::Wall0[]={{-1}};
TSnakeBuf::TWall TSnakeBuf::Wall1[]={{5,10,23,10},{-1}};
TSnakeBuf::TWall TSnakeBuf::Wall2[]={{10,5,10,16},{18,5,18,16},{-1}};
TSnakeBuf::TWall TSnakeBuf::Wall3[]={{10,5,10,16},{18,5,18,16},{ 5,10,23,10},{-1}};
TSnakeBuf::TWall TSnakeBuf::Wall4[]={{ 5,6,23, 6},{5,14,23,14},{-1}};
TSnakeBuf::TWall TSnakeBuf::Wall5[]={{ 5,6,23, 6},{5,14,23,14},{14, 7,14,13},{-1}};
TSnakeBuf::TWall TSnakeBuf::Wall6[]={{10,0,10,16},{18,5,18,20},{-1}};
TSnakeBuf::TWall TSnakeBuf::Wall7[]={{ 0,6,23, 6},{5,14,27,14},{-1}};
TSnakeBuf::TWall TSnakeBuf::Wall8[]={{ 6,5, 6,20},{20,5,20,20},{13, 0,13,16},{-1}};
TSnakeBuf::TWall TSnakeBuf::Wall9[]={{ 0,6,15, 6},{21,0,21, 9},{12,14,27,14},{6,12,6,20},{-1}};
TSnakeBuf::TWall *TSnakeBuf::Walls[]={TSnakeBuf::Wall0,TSnakeBuf::Wall1,TSnakeBuf::Wall2,TSnakeBuf::Wall3,TSnakeBuf::Wall4,TSnakeBuf::Wall5,TSnakeBuf::Wall6,TSnakeBuf::Wall7,TSnakeBuf::Wall8,TSnakeBuf::Wall9};
//---------------------------------------------------------------------------
TSnakeBuf::TBmpPos TSnakeBuf::BmpPos[] =
{
  // Wall  Bean Super Head  Horz  Vert  CrnUL CrnUR CrnDL CrnDR TailU TailD TailL TailR Stage
  {{{4,1},{4,2},{5,2},{5,1},{4,0},{5,0},{0,1},{1,1},{0,2},{1,2},{3,1},{2,2},{2,1},{3,2},{5,2}}},
  {{{0,0},{1,0},{3,0},{2,0},{2,0},{2,0},{2,0},{2,0},{2,0},{2,0},{2,0},{2,0},{2,0},{2,0},{3,0}}},
};
//---------------------------------------------------------------------------
TSnakeBuf::TSnakeBuf()
{
  _Snake = 0;
  _iBeanNo = 0;
  _iStageBeans = 200;
  _iScore = 0;
  _bGameOver = false;
  _bEndStage = false;
  memset(_Units,0,sizeof(_Units));
  memset(_DispBuf,0,sizeof(_DispBuf));
}
//---------------------------------------------------------------------------
TSnakeBuf::~TSnakeBuf()
{
  ClearSnake();
}
//---------------------------------------------------------------------------
void TSnakeBuf::ClearSnake(void)
{
  if(_Snake)
   {
     TSnakeNode *toDel;
     _Snake->Prev->Next=0;
     while(_Snake)
      {
        toDel=_Snake;
        _Snake=_Snake->Next;
        delete toDel;
      }
     _Snake=0;
   }
}
//---------------------------------------------------------------------------
void TSnakeBuf::InitSnake(void)
{
  ClearSnake();
  _Snake = new TSnakeNode;
  TSnakeNode *nd = new TSnakeNode;

  _Snake->x = UnitX/2;
  _Snake->y = UnitY-2;
  _Snake->Next = nd;
  _Snake->Prev = nd;

  nd->x = UnitX/2;
  nd->y = UnitY-1;
  nd->Next = _Snake;
  nd->Prev = _Snake;
}
//---------------------------------------------------------------------------
void TSnakeBuf::StepMove(int d)
{
  if((_Snake)&&(d)&&(!_bGameOver)&&(!_bEndStage))
   {
     TSnakeNode NewPos = *_Snake;
     switch(d)
      {
        case sdUp   : NewPos.y--; break; //up
        case sdDown : NewPos.y++; break; //down
        case sdLeft : NewPos.x--; break; //left
        case sdRight: NewPos.x++; break; //right
        default     : return; //do nothing
      }
     if((NewPos.x<0)||(NewPos.y<0)||(NewPos.x>=UnitX)||(NewPos.y>=UnitY))
      {
        _bGameOver = true;
        return;
      }
     if(GetDispBuf(NewPos.x,NewPos.y)==sbnWall)
      {
        _bGameOver = true;
        return;
      }
     if((GetDispBuf(NewPos.x,NewPos.y)>=sbnHead)&&(GetDispBuf(NewPos.x,NewPos.y)<sbnStage))
      {
        _bGameOver = true;
        return;
      }

     bool bEat = GetUnit(NewPos.x,NewPos.y)==sbnBean || GetUnit(NewPos.x,NewPos.y)==sbnStage;
     SetUnit(NewPos.x,NewPos.y,sbnNone);
     if(bEat)
      {
        TSnakeNode *NewNode = new TSnakeNode;
        NewNode->x = NewPos.x;
        NewNode->y = NewPos.y;
        NewNode->Next = _Snake;
        NewNode->Prev = _Snake->Prev;
        _Snake->Prev->Next = NewNode;
        _Snake->Prev=NewNode;
        _Snake = NewNode;
        _iScore += ssEat;
      }
     else
      {
        _Snake = _Snake->Prev;
        _Snake->x = NewPos.x;
        _Snake->y = NewPos.y;
      }
     DrawSnake();

     if(bEat)
      if(!GenBean())
      {
        _bEndStage = true;
        _iScore += ssStage;
      }
   }
}
//---------------------------------------------------------------------------
int TSnakeBuf::GetDispBuf(int x, int y)
{
  if((x>=0) && (x<UnitX) && (y>=0) && (y<UnitY))
    return _DispBuf[y][x];
  return 0;
}
//---------------------------------------------------------------------------
int TSnakeBuf::GetUnit(int x, int y)
{
  if((x>=0) && (x<UnitX) && (y>=0) && (y<UnitY))
    return _Units[y][x];
  return 0;
}
//---------------------------------------------------------------------------
void TSnakeBuf::SetUnit(int x, int y, int n)
{
  if((x>=0) && (x<UnitX) && (y>=0) && (y<UnitY))
    _Units[y][x] = n;
}
//---------------------------------------------------------------------------
void TSnakeBuf::DrawSnake(void)
{
  memcpy(_DispBuf,_Units,sizeof(_Units));
  if(_Snake)
   {
     TSnakeNode *lpNode = _Snake->Next;
     _DispBuf[_Snake->y][_Snake->x]=sbnHead;

     while((lpNode)&&(lpNode!=_Snake))
      {
        if(lpNode->Next==_Snake)
         {
           if(lpNode->y==lpNode->Prev->y)
             _DispBuf[lpNode->y][lpNode->x] = (lpNode->x<lpNode->Prev->x?sbnTailL:sbnTailR);
           else
             _DispBuf[lpNode->y][lpNode->x] = (lpNode->y<lpNode->Prev->y?sbnTailU:sbnTailD);
         }
        else if(lpNode->y==lpNode->Prev->y)
         {
           if(lpNode->y>lpNode->Next->y)
             _DispBuf[lpNode->y][lpNode->x]=(lpNode->x<lpNode->Prev->x)?sbnCornDL:sbnCornDR;
           else if(lpNode->y<lpNode->Next->y)
             _DispBuf[lpNode->y][lpNode->x]=(lpNode->x<lpNode->Prev->x)?sbnCornUL:sbnCornUR;
           else
             _DispBuf[lpNode->y][lpNode->x]=sbnHorz;
         }
        else
         {
           if(lpNode->x<lpNode->Next->x)
             _DispBuf[lpNode->y][lpNode->x]=(lpNode->y<lpNode->Prev->y)?sbnCornUL:sbnCornDL;
           else if(lpNode->x>lpNode->Next->x)
             _DispBuf[lpNode->y][lpNode->x]=(lpNode->y<lpNode->Prev->y)?sbnCornUR:sbnCornDR;
           else
             _DispBuf[lpNode->y][lpNode->x]=sbnVert;
         }
        lpNode = lpNode->Next;
      }
   }
}
//---------------------------------------------------------------------------
void TSnakeBuf::InitStage(int StgNum)
{
  _iBeanNo = 0;
  _bGameOver = false;
  _bEndStage = false;
  memset(_Units,0,sizeof(_Units));
  memset(_DispBuf,0,sizeof(_DispBuf));
  GenWalls(StgNum);
  InitSnake();
  DrawSnake();
  GenBean();
}
//---------------------------------------------------------------------------
void TSnakeBuf::ClearScore(void)
{
  _iScore = 0;
}
//---------------------------------------------------------------------------
bool TSnakeBuf::GenBean(void)
{
  if(++_iBeanNo<=_iStageBeans)
   {
     int x = random(UnitX);
     int y = random(UnitY);

     while(GetDispBuf(x,y))
      {
        x = random(UnitX);
        y = random(UnitY);
      }

     SetUnit(x,y,_iBeanNo==_iStageBeans?sbnStage:sbnBean);
     return true;
   }
  return false;
}
//---------------------------------------------------------------------------
void TSnakeBuf::GenWalls(int StgNum)
{
  int StNo=StgNum%StageCount;
  TWall *lpWall = Walls[StNo];
  for(int i=0; lpWall[i].x1>=0; i++)
   {
     if(lpWall[i].x1==lpWall[i].x2)
      {
        for(int y=lpWall[i].y1; y<=lpWall[i].y2; y++)
         {
           SetUnit(lpWall[i].x1,y,sbnWall);
         }
      }
     else
      {
        for(int x=lpWall[i].x1; x<=lpWall[i].x2; x++)
         {
           SetUnit(x,lpWall[i].y1,sbnWall);
         }
      }
   }
}
//---------------------------------------------------------------------------
bool TSnakeBuf::fGetRunning(void)
{
  return ((_Snake)&&(!_bGameOver)&&(!_bEndStage));
}
//---------------------------------------------------------------------------
__fastcall TSnakeTimer::TSnakeTimer():TThread(false)
{
  dwTimeToWait = 300;
  hTimer = NULL;
  OnTimer = NULL;
  iSkipUserEvent = 0;
  FreeOnTerminate = true;
}
//---------------------------------------------------------------------------
void __fastcall TSnakeTimer::DestroyTimer(void)
{
  OnTimer = NULL;
  Terminate();
  SetEvent(hTimer);
}
//---------------------------------------------------------------------------
void __fastcall TSnakeTimer::SyOnStart(void)
{
  dwWaitTime = dwTimeToWait;
  iSkipUserEvent = 0;
  hTimer = CreateEvent(NULL, true, false, NULL);
}
//---------------------------------------------------------------------------
void __fastcall TSnakeTimer::SyOnExit(void)
{
  CloseHandle(hTimer);
}
//---------------------------------------------------------------------------
void __fastcall TSnakeTimer::SyOnTimer(void)
{
  if((OnTimer)&&(!iSkipUserEvent))
   {
     try
      {
        OnTimer(this);
      }
     catch(Exception &e)
      {
        //ignore user's error
      }
   }
  if(iSkipUserEvent>0)
    iSkipUserEvent--;
  ResetEvent(hTimer);
}
//---------------------------------------------------------------------------
void __fastcall TSnakeTimer::Execute(void)
{
  Synchronize(SyOnStart);
  while(!Terminated)
   {
     WaitForSingleObject(hTimer,dwWaitTime);
     if(!Terminated)
      {
        Synchronize(SyOnTimer);
      }
   }
  Synchronize(SyOnExit);
}
//---------------------------------------------------------------------------
void __fastcall TSnakeTimer::fSetInterval(DWORD dwIntv)
{
  dwWaitTime = dwTimeToWait = dwIntv;
  iSkipUserEvent = 1;
  TriggerTimer();
}
//---------------------------------------------------------------------------
void __fastcall TSnakeTimer::TriggerTimer(int iWait)
{
  if(hTimer)
   {
     if(iWait>0)
       iSkipUserEvent = iWait+1;
     SetEvent(hTimer);
   }
}
//---------------------------------------------------------------------------

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99在线精品观看| 国产欧美精品一区| 欧美精品一区二区在线观看| 亚洲国产另类精品专区| 91捆绑美女网站| 亚洲老司机在线| 91视视频在线直接观看在线看网页在线看 | 美日韩一区二区三区| 99热99精品| 亚洲国产美女搞黄色| 欧美精品欧美精品系列| 日本少妇一区二区| 欧美一级爆毛片| 国产成人小视频| 亚洲一区欧美一区| 精品捆绑美女sm三区| 成人av在线电影| 亚洲五码中文字幕| 26uuu国产日韩综合| aaa亚洲精品| 蜜桃一区二区三区在线| 中文字幕亚洲欧美在线不卡| 欧美人与禽zozo性伦| 国产成人av福利| 亚洲一区二区三区免费视频| 久久亚洲综合av| 日本久久精品电影| 国产综合色产在线精品 | 亚洲一区在线看| 欧美草草影院在线视频| bt欧美亚洲午夜电影天堂| 日韩av一区二区三区| 中文字幕一区二区三区色视频 | 91国产免费看| 韩国av一区二区三区四区| 亚洲欧美偷拍另类a∨色屁股| 日韩一区二区三区高清免费看看| 成人动漫一区二区| 麻豆成人久久精品二区三区红 | 欧美成人性福生活免费看| 色综合天天视频在线观看| 国产一区二区精品久久91| 午夜精品aaa| 亚洲色图丝袜美腿| 久久品道一品道久久精品| 欧美系列日韩一区| 不卡av免费在线观看| 久久99国产乱子伦精品免费| 亚洲综合丝袜美腿| 亚洲一区二区在线观看视频| 久久久亚洲精华液精华液精华液| 欧美剧在线免费观看网站| gogo大胆日本视频一区| 国产成人免费av在线| 久久精品国产亚洲5555| 亚洲成人av电影| 一区二区三区日韩欧美精品| 国产精品不卡一区| 久久精品人人爽人人爽| 欧美成人精品1314www| 欧美一级淫片007| 欧美日韩不卡在线| 在线视频国内自拍亚洲视频| 94-欧美-setu| 91小视频免费观看| 成人av第一页| 成人av一区二区三区| 国产成人8x视频一区二区| 国产主播一区二区三区| 久久福利资源站| 久久99国产精品久久| 日韩高清国产一区在线| 美女一区二区视频| 麻豆91免费观看| 久久国产麻豆精品| 狠狠色丁香婷婷综合| 精品一区二区三区久久久| 美女脱光内衣内裤视频久久网站| 免费欧美在线视频| 蓝色福利精品导航| 国产在线精品免费| 国产成人免费视频网站高清观看视频| 国产成人精品亚洲777人妖| 成人白浆超碰人人人人| 97se狠狠狠综合亚洲狠狠| 91一区一区三区| 欧美日韩免费电影| 日韩一区二区三区视频| 国产午夜精品一区二区三区嫩草| 国产精品素人视频| 亚洲欧美另类久久久精品| 亚洲一级片在线观看| 国产成人在线电影| av电影一区二区| 欧美裸体一区二区三区| 精品精品国产高清a毛片牛牛 | 色综合网站在线| 欧美色电影在线| 亚洲精品一区二区三区99| 久久精品人人做人人爽人人| 国产精品成人免费在线| 天天综合网天天综合色| 国产精品一区二区三区四区| 欧美日韩精品免费观看视频| 中文字幕久久午夜不卡| 国产午夜亚洲精品午夜鲁丝片| 日韩一区二区免费高清| 91精品国产综合久久蜜臀| 欧美成人欧美edvon| 国产色产综合色产在线视频| 久久天堂av综合合色蜜桃网 | 欧美蜜桃一区二区三区| 欧美一级高清大全免费观看| 一本一道波多野结衣一区二区| 欧美日韩精品一区二区天天拍小说| 欧美一区二区三区男人的天堂| 国产精品区一区二区三区| 亚洲第一二三四区| 成人免费高清在线观看| 在线观看日韩毛片| 精品国产麻豆免费人成网站| 亚洲视频资源在线| 久久国产视频网| 色婷婷综合久久久久中文| 欧美xxxxxxxxx| 亚洲高清不卡在线观看| 成人激情综合网站| 久久久精品国产99久久精品芒果| 一区二区三区日韩在线观看| 国模少妇一区二区三区| 欧美巨大另类极品videosbest| 国产欧美日韩精品在线| 免费日本视频一区| 在线观看亚洲一区| 中文字幕一区二区三区在线不卡| 精品一区二区日韩| 欧美视频第二页| 亚洲区小说区图片区qvod| 国产精品456露脸| 欧美区视频在线观看| 亚洲免费在线观看视频| 国产白丝网站精品污在线入口| 欧美一区二区福利在线| 亚洲精品菠萝久久久久久久| 国产成人av网站| 精品国产欧美一区二区| 偷拍日韩校园综合在线| 在线精品国精品国产尤物884a| 国产精品视频第一区| 狠狠色狠狠色合久久伊人| 日韩欧美亚洲一区二区| 午夜a成v人精品| 欧美性感一区二区三区| 亚洲精品日韩综合观看成人91| 国产91丝袜在线播放0| 精品国产乱码久久久久久1区2区 | 欧美视频日韩视频| 亚洲综合免费观看高清完整版在线 | 免费高清成人在线| 欧美男男青年gay1069videost| 亚洲一区二区三区不卡国产欧美| 99国产欧美久久久精品| 日本一区二区视频在线| 成人精品国产免费网站| 国产亚洲成aⅴ人片在线观看| 精品一区免费av| 久久久精品影视| 国产99精品在线观看| 国产视频一区二区在线观看| 国产精品亚洲人在线观看| 国产日韩欧美a| www.欧美日韩| 亚洲免费av在线| 欧美性三三影院| 天堂av在线一区| 欧美成人在线直播| 国产福利精品导航| 国产精品美女久久久久av爽李琼 | 欧美色国产精品| 亚洲国产成人91porn| 91精品国产日韩91久久久久久| 日韩二区三区在线观看| 精品成人免费观看| 暴力调教一区二区三区| 亚洲卡通动漫在线| 欧美丰满一区二区免费视频 | 一区二区三区在线免费观看| 欧美午夜片在线看| 欧美aaa在线| 国产网站一区二区| 在线免费一区三区| 久久99这里只有精品| 中文字幕一区二区日韩精品绯色| 欧美亚洲国产一区二区三区| 蜜臀av一区二区在线免费观看| 久久夜色精品国产噜噜av| 色综合久久中文字幕| 免费看欧美美女黄的网站| 日本一区二区免费在线观看视频 | 一区二区在线观看视频|