Un ejemplo de referencia, se puede ejecutar correctamente en VC++6.0 (puede haber problemas)\x0d\\x0d\#include \x0d\#include \x0d\#include \x0d\#include \ x0d\#include //Usa la hora actual como semilla;\x0d\enum dir{up,down,left,right}; //Tipo de enumeración enum dir;\x0d\//Fence;\x0d\class Fence{\ x0d \public:\x0d\ void InitFence();\x0d\ void OutputF();\x0d\public:\x0d\ char game[20][20];\x0d\}f //Definir objeto;\x0d \ //Marco de imagen;\x0d\void Fence::InitFence(){\x0d\ for(int i=0; ix =x; q->y =y;\x0d\ q->next =head;\x0d \ q->prior =NULL;\x0d\ if(head) head->prior =q;\x0d\ head =q;\x0d\ if(!tail) tail =head;\x0d\ f.game[x] [ y]= '*'; // El objeto f se puede definir al definir la clase Fence y la clase Fence se define antes de la clase SnakeNode;\x0d\}\x0d\int SnakeNode::get_x(){\x0d \ return x;\ x0d\}\x0d\int SnakeNode::get_y(){\x0d\ return y;\x0d\}\x0d\//Eliminar el nodo de cola;\x0d\void SnakeNode::delete_tail(){ \x0d\ SnakeNode * p =tail;\x0d\ f.game[tail->get_x()][tail->get_y()]= ' ';//Establece el '*' representado por las coordenadas del nodo de cola a un espacio;\x0d\ if(tail==head)\x0d\ tail= head= NULL;\x0d\ else{\x0d\ tail= tail->prior;\x0d\ tail->next= NULL;\x0d \ }\x0d\ eliminar p ;\x0d\}\x0d\//move move;\x0d\class move{\x0d\public:\x0d\ dir point; //punto de variable de enumeración: dirección de control;\x0d\ int food_x;\x0d\ int food_y;\x0d\public:\x0d\ void moving();\x0d\ void change_point(char); //Cambiar dirección;\x0d\ void get_food();\x0d\};\x0d \void move::moving (){\x0d\ int a,b;\x0d\ a= head->get_x(); //Obtiene la abscisa del nodo principal\x0d\ b= head->get_y(); //La ordenada del nodo principal \x0d\ switch(point){\x0d\ case up: --a; break;\x0d\ case down: ++a;\x0d\ case left: --b; romper;\x0d\ caso derecho: ++b; romper;\x0d\ }\x0d\ if(a==19||b==19||a==0||b==0){
//Determina si golpea la pared; \x0d\ coutadd_head(a,b);\x0d\ get_food();\x0d\ }\x0d\ else{\x0d\ head->add_head(a,b); Insertar punto de nudo principal;\x0d\ head->delete_tail(); //Eliminar el nodo de cola;\x0d\ }\x0d\}\x0d\void move::change_point(char keydown){\x0d\ switch(keydown) {\x0d \ case 'w': punto= arriba;\x0d\ case 's': punto= abajo;\x0d\ case 'a': punto= izquierda;\x0d\ case 'd' : point= right; break;\x0d\ }\x0d\}\x0d\void move::get_food(){\x0d\ srand((unsigned int) time(NULL)); //Crear semillas (tiempo de ejecución del programa) ; \x0d \ food_x= rand()%18+1; \x0d\ food_y= rand()%18+1;\x0d\ f.game[food_x][food_y]= '*';\x0d\}\x0d \// main();\x0d\int main()\x0d\{\x0d\ coutadd_head(4,3);\x0d\ head->add_head(4,4);\x0d\ head->add_head(4 ,5) ;\x0d\ m.get_food();\x0d\ f.OutputF();\x0d\ while (true){\x0d\ char keydown= getch() //getch() devuelve los caracteres leídos en el teclado contiene el archivo de encabezado\x0d\ m.change_point(keydown);\x0d\ while(!kbhit()){ //Juzga si se ha presionado una tecla;\x0d\ system("cls"); Función borrar pantalla;\x0d \ m.moving();\x0d\ f.OutputF();\x0d\ Sleep(200);\x0d\ }\x0d\ }\x0d\ return 0;\x0d\} p>