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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? grid.cpp

?? Direct3D游戲編程入門(mén)教程源代碼.rar
?? CPP
字號(hào):
#include <vector>
#include <list>
#include <algorithm>
#include <iostream>

/** This class can be extended to contain graphics information
    and physics as well.   Right now it contains the minimum
    necessary to do group collision tests */
class SpriteRect
{
public:
  SpriteRect(int x_, int y_, int w_, int h_)
    : x(x_), y(y_), w(w_), h(h_), midx(x_+w_/2), midy(y_+h_/2) {}
  // Position
  int x,y;
  // Size
  int w,h;
  // Middle point
  int midx,midy;
};

typedef std::vector<SpriteRect>           SpriteVector;
typedef std::vector<SpriteRect>::iterator SpriteIterator;
typedef std::list<SpriteRect*>            SpriteList;
typedef std::list<SpriteRect*>::iterator  SpriteListIterator;

void FullCollisionTest(const SpriteRect& s1, const SpriteRect& s2)
{
  // Here we'll plug in the full collision test.
  std::cout << "Testing for collision between: " <<
    s1.x << ',' << s1.y << ',' << s1.w << ',' << s1.h << "   and   " <<
    s2.x << ',' << s2.y << ',' << s2.w << ',' << s2.h << std::endl;
}

/** Represents a single cell in the grid.
    The cell will hold a list of sprites that it currently contains */
class GridCell
{
public:
  /** */
  void Add(SpriteRect* sprite)
  {
    m_List.push_back(sprite);
  }

  void Remove(SpriteRect* sprite)
  {
    SpriteListIterator i=FindIterator(sprite);
    if (i==m_List.end()) return;
    m_List.erase(i);
  }

  bool Exists(SpriteRect* sprite)
  {
    return (!(FindIterator(sprite) == m_List.end()));
  }

  bool IsPopulated() const
  {
    return (!m_List.empty());
  }

  bool MultipleSprites() const
  {
    return (m_List.size() > 1);
  }

  void Check(GridCell& c)
  {
    for(SpriteListIterator i=m_List.begin();i!=m_List.end();i++)
    {
      for(SpriteListIterator j=c.m_List.begin();j!=c.m_List.end();j++)
        FullCollisionTest(**i,**j);
    }
  }

  void CheckSelf()
  {
    for(SpriteListIterator i=m_List.begin();i!=m_List.end();i++)
    {
      for(SpriteListIterator j=i;++j!=m_List.end();)
        FullCollisionTest(**i,**j);
    }
  }

private:
  SpriteListIterator FindIterator(SpriteRect* sprite)
  {
    return std::find(m_List.begin(),m_List.end(),sprite);
  }

  SpriteList m_List;
};



class Grid
{
public:
  Grid(int max_sprite_size_x, int max_sprite_size_y, 
       int world_left, int world_top, int world_right, int world_bottom)
   : m_Left(world_left),
     m_Top(world_top),
     m_Right(world_right),
     m_Bottom(world_bottom),
     m_CellWidth(max_sprite_size_x),
     m_CellHeight(max_sprite_size_y),
     m_CellsNumberX((world_right-world_left)/max_sprite_size_x),
     m_CellsNumberY((world_bottom-world_top)/max_sprite_size_y),
     m_Grid(new GridCell[m_CellsNumberX*m_CellsNumberY])
  {}

  void Add(SpriteRect* sprite)
  {
    int x=CalculateCellXPosition(sprite->midx);
    int y=CalculateCellYPosition(sprite->midy);
    GetCell(x,y).Add(sprite);
  }

  void Remove(SpriteRect* sprite)
  {
    int x=CalculateCellXPosition(sprite->midx);
    int y=CalculateCellYPosition(sprite->midy);
    GetCell(x,y).Remove(sprite);
  }

  void Move(SpriteRect* sprite, int newx_pos, int newy_pos)
  {
    // Calculate old cell position
    int old_x=CalculateCellXPosition(sprite->midx);
    int old_y=CalculateCellYPosition(sprite->midy);
    // Calculate new sprite's middle position
    int new_midx=newx_pos+sprite->w/2;
    int new_midy=newy_pos+sprite->h/2;
    // Calculate new cell position (after move)
    int new_x=CalculateCellXPosition(new_midx);
    int new_y=CalculateCellYPosition(new_midy);
    // Check if the sprite moved to a different cell
    if (old_x!=new_x || old_y!=new_y)
    {
      GetCell(old_x,old_y).Remove(sprite);
      GetCell(new_x,new_y).Add(sprite);
    }
    sprite->x=newx_pos;
    sprite->y=newy_pos;
    sprite->midx=new_midx;
    sprite->midy=new_midy;
  }

  // Go over all the grid and check for collisions
  void CheckForCollisions()
  {
    for(int y=0;y<m_CellsNumberY;y++)
    {
      for(int x=0;x<m_CellsNumberX;x++)
      {
        GridCell& cur=GetCell(x,y);
        // Check if there is any sprite in this cell.
        if (!cur.IsPopulated()) continue;
        // If there is more than one, check all sprites in this cell
        if (cur.MultipleSprites()) cur.CheckSelf();
        // Right and bottom edge of grid have no appropriate neighbors
        if (x<m_CellsNumberX-1 && y<m_CellsNumberY-1)
        {
          // Check all four neighbors.  Three if y=0
          if (y>0)
            if (GetCell(x+1,y-1).IsPopulated()) cur.Check(GetCell(x+1,y-1));
          if (GetCell(x+1,y  ).IsPopulated()) cur.Check(GetCell(x+1,y  ));
          if (GetCell(x+1,y+1).IsPopulated()) cur.Check(GetCell(x+1,y+1));
          if (GetCell(x  ,y+1).IsPopulated()) cur.Check(GetCell(x  ,y+1));
        }
      }
    }
  }

private:
  // Retrieve a cell according to its position in the grid
  GridCell& GetCell(int x, int y) { return m_Grid[y*m_CellsNumberX+x]; }

  int CalculateCellXPosition(int pixel_position)
  {
    int x=(pixel_position - m_Left)/m_CellWidth;
    // Check for bounds.  Grid should be designed so that sprites
    // never move out of its area.
    if (x<0 || x>=m_CellsNumberX) throw;
    return x;
  }

  int CalculateCellYPosition(int pixel_position)
  {
    int y=(pixel_position - m_Top)/m_CellHeight;
    // Check for bounds.  Grid should be designed so that sprites
    // never move out of its area.
    if (y<0 || y>=m_CellsNumberY) throw;
    return y;
  }

  int       m_Left;
  int       m_Top;
  int       m_Right;
  int       m_Bottom;
  int       m_CellWidth;
  int       m_CellHeight;
  int       m_CellsNumberX;
  int       m_CellsNumberY;
  GridCell* m_Grid;
};


// Test example
int main(int argc, char* argv[])
{
  SpriteVector objects;
  objects.push_back(SpriteRect(20,6,3,2));
  objects.push_back(SpriteRect(7,9,3,2));
  objects.push_back(SpriteRect(19,1,3,2));
  objects.push_back(SpriteRect(2,4,3,2));
  objects.push_back(SpriteRect(18,7,3,2));
  objects.push_back(SpriteRect(12,2,3,2));
  Grid g(3,2,0,0,25,15);
  for(int i=0;i<objects.size();i++)
    g.Add(&objects[i]);
  for(int j=0;j<11;j++)
  {
    std::cout << "---------------------------------------\n";
    g.CheckForCollisions();
    SpriteRect& s=objects[2];
    g.Move(&s,s.x,s.y+1);
  }
  return 0;
}



?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品国产在热久久| 欧美影院午夜播放| 国产精品综合二区| a在线欧美一区| 色国产精品一区在线观看| 91精品麻豆日日躁夜夜躁| 欧美va在线播放| 亚洲精品欧美激情| 国产中文一区二区三区| 国产麻豆成人精品| 欧美喷水一区二区| 亚洲精品一二三四区| 欧美在线免费播放| 亚洲色图清纯唯美| 国产真实乱偷精品视频免| 国产清纯白嫩初高生在线观看91 | 99在线精品视频| 依依成人综合视频| 日韩午夜在线观看| 午夜精品久久久久| 91久久精品网| 美女高潮久久久| 欧美日韩大陆一区二区| 极品少妇xxxx精品少妇| 欧美白人最猛性xxxxx69交| 国内成+人亚洲+欧美+综合在线 | 国产福利精品导航| 欧美成人高清电影在线| 成人高清免费观看| 在线成人免费视频| 三级亚洲高清视频| 欧美日韩免费不卡视频一区二区三区| 麻豆免费看一区二区三区| 中文字幕中文字幕一区| 成人av资源在线| 青青国产91久久久久久| 欧美在线观看一区| 成人在线视频首页| 国产精品毛片无遮挡高清| 国产成人精品亚洲777人妖 | 欧美日韩成人一区二区| 国产精品中文字幕日韩精品| 一区二区三区影院| 欧美亚洲日本国产| 国产成人鲁色资源国产91色综| 亚洲综合久久久| 欧美三级中文字幕| 亚洲成av人片www| 欧美日韩免费不卡视频一区二区三区| 狠狠狠色丁香婷婷综合激情| 亚洲在线观看免费| 国产精品狼人久久影院观看方式| 欧美一级在线观看| 精久久久久久久久久久| 亚洲国产精品一区二区尤物区| 欧美精品亚洲二区| 色综合久久久久综合体| 亚洲综合在线视频| 自拍偷拍国产精品| 国产精品毛片高清在线完整版 | 欧美成人bangbros| 69精品人人人人| 欧美又粗又大又爽| 91国产精品成人| 色婷婷av一区二区三区软件| 成人听书哪个软件好| 国产精品88888| 国产综合色产在线精品| 精品一区二区三区不卡| 免费美女久久99| 亚洲成人tv网| 午夜激情综合网| 丝袜脚交一区二区| 日韩一区精品字幕| 午夜在线成人av| 日本成人超碰在线观看| 亚洲国产精品高清| 欧美日韩国产高清一区二区| 欧美偷拍一区二区| 欧美日韩一区二区三区在线| 欧洲激情一区二区| 欧美三级日韩三级| 91精品国产91久久久久久一区二区| 成人免费毛片app| 91在线观看污| 一区二区在线观看视频| 亚洲欧洲一区二区在线播放| 91精品一区二区三区久久久久久| 欧美日韩国产影片| 欧美一级黄色大片| 国产亚洲美州欧州综合国| 日本韩国精品一区二区在线观看| 色视频成人在线观看免| 91成人国产精品| 欧美日韩午夜影院| 日韩女优视频免费观看| 在线免费观看视频一区| 91福利精品视频| 欧美吞精做爰啪啪高潮| 日韩美女视频一区二区在线观看| 欧美性色黄大片| 国产精品一区在线| 91日韩精品一区| 制服丝袜国产精品| 久久免费的精品国产v∧| 欧美日韩亚洲另类| 欧美一区二区三区四区五区| 日韩欧美一区中文| 国产精品美女久久久久久久久久久| 亚洲乱码中文字幕综合| 视频在线在亚洲| 丰满白嫩尤物一区二区| 国产精品一二一区| 色成人在线视频| 91精品国产综合久久久久久| 久久久久久久久久久久久久久99 | 精品欧美一区二区在线观看| 欧美激情中文字幕一区二区| 亚洲综合色区另类av| 久久国产精品72免费观看| 不卡一区中文字幕| 欧美精品日韩综合在线| 日本一区二区三区免费乱视频| 亚洲一区二区三区爽爽爽爽爽| 精品一区二区免费看| 在线免费观看成人短视频| 久久久久九九视频| 同产精品九九九| 99在线精品免费| 欧美精品一区男女天堂| 26uuu欧美日本| 国产欧美日韩精品在线| 亚洲国产色一区| 高清国产一区二区| 日韩欧美你懂的| 樱花影视一区二区| 成人综合激情网| 精品久久久三级丝袜| 亚洲成av人片www| 色婷婷综合久久久中文一区二区 | jlzzjlzz亚洲日本少妇| 精品欧美乱码久久久久久1区2区| 亚洲永久免费av| 99精品欧美一区二区三区小说| 精品三级在线看| 日本不卡高清视频| 欧美在线播放高清精品| 日韩毛片视频在线看| 国产成人鲁色资源国产91色综 | 亚洲一区二区三区影院| 99国产精品久| 中文字幕中文乱码欧美一区二区| 国产中文字幕精品| 欧美不卡视频一区| 日韩制服丝袜av| 欧美色精品在线视频| 亚洲激情综合网| 日本韩国视频一区二区| 亚洲女与黑人做爰| 婷婷综合在线观看| 在线视频中文字幕一区二区| 亚洲人成网站精品片在线观看| 国产91富婆露脸刺激对白| 欧美极品美女视频| 福利一区在线观看| 国产天堂亚洲国产碰碰| 免费在线看一区| 精品美女一区二区三区| 久久 天天综合| 欧美本精品男人aⅴ天堂| 久久99这里只有精品| 久久五月婷婷丁香社区| 国产一区二区不卡老阿姨| 久久久久亚洲蜜桃| 成人免费视频app| 亚洲免费看黄网站| 欧洲视频一区二区| 亚洲图片欧美色图| 91精品国产免费| 精东粉嫩av免费一区二区三区| 久久久久国产一区二区三区四区| 国产在线观看一区二区| 欧美国产一区在线| 99国产精品国产精品毛片| 一区二区三区影院| 日韩一区二区中文字幕| 国产精品99久久不卡二区| 国产精品久久久久久久浪潮网站| 色哟哟欧美精品| 日韩**一区毛片| 久久久精品人体av艺术| 99国产精品久久久| 日本女优在线视频一区二区| 久久久一区二区| 在线免费观看一区| 久久99热这里只有精品| 国产精品久久久久久久浪潮网站| 欧美亚洲综合在线| 精品中文字幕一区二区| 一区在线播放视频|