介业 的个人资料龙虎门照片日志列表 工具 帮助

日志


8月24日

snake类的初步实现

class Object{//由于不知道snake的节点里面存放什么,先设计成抽象基类
 public:
  Object(){}//constructor
  virtual bool isEqual(Object &) = 0;
  virtual bool operator==(Object &) = 0;
  virtual void show() = 0;
  virtual ~Object(){};
}
class Node{//节点
 private:
  Object *info;
  Node *prev, *next;
 public:
  Node(){prev = next = info = 0;}
  Node& operator=(Node &);
  void getInfo();
  void setInfo();
  friend class Snake;
}
class Snake{//实际是实现一个双向链表,并且可以分别在头尾插入节点
 private:
  //int posX, posY;
  Node *head, *tail;
 public:
  Snake(){head = tail = 0;}
  ~Snake();
  void addNode(Node *);//在尾部加入节点
  void addNodeFirst(Node *);//在头部加入节点
  Node* deleteNode(Node *);//not physically delete
  Node* lookUpNode(Object &);//查找某一节点
  void deleteSnake();//physically delete
  void drawSnake();//这个函数以后和OpenGl库结合
  //for debug
  void printSnake();
}
void Snake::addNode(Node *node){
 if(head==NULL)
 {
  head = tail = node;
  node->prev = NULL;
  node->next = NULL;  
 }  
 else
 {
  tail->next = node;
  node->prev = tail;
  tail = node;
  node->next = NULL;
 }
  
}
void Snake::addNodeFirst(Node *node){
 if(head==NULL)
 {
  head=tail=node;
  node->prev = node->next = NULL;
 }
 else
 {
  node->next = head;
  head->prev = node;
  head = node;
  node->prev = NULL;
 }
}
Node* snake::deleteNode(Node *node){
 if(node==head)
 {
  if(node==tail)
  {
   head = tail = NULL;
   //node = NULL;//delete
  }
  else
  {
   head = head->next;
   head->prev = NULL;
   node->next = NULL;
   //node = NULL;//delete
  }
 }
 else
 {
  node->prev->next = node->next;
  if(node==tail)
   tail = node->prev;
  else
   node->next->prev = node->prev;
  node->prve = NULL;
  node->next = NULL;
  //node = NULL;//delete
 }
 return node;
}
Node* Snake::lookUpNode(Object &obj){
 Node* p = head;
 
 while(p)
 {
  if(*(p->info)==obj)
   return p;
  else
   p = p->next;
 }
 return NULL;
}
void Snake::deleteSnake(){
 Node *p, *q;
 p =  head;
 while(p)
 {
  delete p->info;
  q = p;
  p = p->next;
  delete q;
 }
}
void Snake::printSnake(){
 Node* p = head;
 while(p)
 {
  p->info->show();
  p = p->next;
 }
}

评论 (2)

请稍候...
很抱歉,您输入的评论太长。请缩短您的评论。
您没有输入任何内容,请重试。
很抱歉,我们当前无法添加您的评论。请稍后重试。
若要添加评论,需要您的家长授予您相应权限。请求权限
您的家长禁用了评论功能。
很抱歉,我们当前无法删除您的评论。请稍后重试。
您已超过了一天之内允许提供的评论数上限。请在 24 小时后重试。
因为我们的系统表明您可能在向其他用户提供垃圾评论,您的帐户已禁用了评论功能。如果您认为我们错误地禁用了您的帐户,请联系 Windows Live 支持部门
完成下面的安全检查,您提供评论的过程才能完成。
您在安全检查中键入的字符必须与图片或音频中的字符一致。

若要添加评论,请使用您的 Windows Live ID 登录(如果您使用过 Hotmail、Messenger 或 Xbox LIVE,您就拥有 Windows Live ID)。登录


还没有 Windows Live ID 吗?请注册

haihai发表:
xiao ben,终于开始写blog了,还不错, 要坚持下去阿。
6 月 20 日
匿名 的图片
Annie 发表:
Happy New Year!~ ^^
1 月 1 日

引用通告

此日志的引用通告 URL 是:
http://phoenix-qu.spaces.live.com/blog/cns!28696C550A3403A2!336.trak
引用此项的网络日志