| 介业 的个人资料龙虎门照片日志列表 | 帮助 |
|
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; } } 引用通告此日志的引用通告 URL 是: http://phoenix-qu.spaces.live.com/blog/cns!28696C550A3403A2!336.trak 引用此项的网络日志
|
|
|