#include <iostream> #include <windows.h> #include <stdlib.h> #include <conio.h> #include <time.h> //使用当前时间做种子 enum dir {up,down,left,right}; //枚举类型enum dir //围墙 class Fence { public: void initFence(); void OutputF(); public: char game[20][20]; } f; //定义对象 //画框框 void Fence::lnitFence() { for (int i=0; i<20; i++) for (int j=0; j<20; j++) { if (i==0||i==19||j==0||j==19) game[i][j]='*'; else game[i][j]=' '; } } //显示框框 void Fence::OutputF() { for (int i=0; i<20; i++) { for (int j=0; j<20; j++) cout<<game[i][j]<<''; cout<<endl; } } //蛇结点 class SnakeNode { private: int x,y; SnakeNode *prior,*next; public: void add_head(int x,int y) int get_x(); int get_y(); void delete_tail(); } *head=NULL,*tail=NULL; //插入头结点 void SnakeNode::add_head(int x,int y) { SnakeNode *q=new SnakeNode; q->x=x; q->y=y; q->next=head; q->prior=NULL; if (head) head->prior=q; head=q; if (!tail) tail=head; f.game[x][y]='*'; //f对象可以在定义Fence类时定义;且Fnce类在SnakeNode类前定义 } int SnkeNode::get_x() { return x; } int SnakeNode::get_y() { return y; } //删除尾结点 void SnakeNode::delete_tail() { SnakeNode *p=tail; f.game[tail->get_x()][tail->get_y()]=' '; //把尾结点的坐标表示的'*'置为空格; if (tail==head) tail=head=NULL; else { tail=tail->prior; tail=next=NULL; } delete p; } class move { public: dir point; //枚举变量point:控制方向 int food_x; int food_y; public: void moving(); void change_point(char); //改变方向; void get_food(); }; void move::moving() { int a,b; a=head->get_x(); //取得头结点横坐标 b=head->get_y(); //取得头结点纵坐标 switch (point) { case up: --a; break; case down: ++a; break; case left: --b; break; case right: ++b; break; } if (a==19||b==19||a==0||b==0||game[a][b]='*') //判断是否撞墙 { cout<<"gameover!!!"<<endl; exit(0); } if (a==food_x&&b==food_y) //吃food { head->add_head(a,b); get_food; } else { head->add_head(a,b); //插入头结点 head->delete_tail(); //删除尾结点 } void move::change_point(char keydown) { switch (keydown) { case 'w': point=up; break; case 's': point=down; break; case 'a': point=left; break; case 'd': point=right; break; } } void move::get_food() { srand((unsigned int) time(NULL)); //做种子(程序运行时间) food_x=rand()%18+1; food-y=rand()%18+1; f.game[food_x][food_y]='*'; } } int main() { cout<<"Using 'w,a,s,d'to control direction!!!\n\n\n"; //画框框和小蛇; move m; f.lnitFence(); head->add_head(4,3); head->add_head(4,4); head->add_head(4,5); m.get_food(); f.OutputF(); while (ture) { char keydown =getch(); //getch()返回 m.chan ge_point(keydown); while (!kbhit()) //判断有没有按键落下 { system("cls"); //清屏函数; m.moving(); f.OutputF(); sleep(200); } } return 0; }
错误显示:
这是我在网上看到的,照着原图花了半个多小时敲出来的代码,可问题还是一大堆;网上的东西果然不可信啊 这里面好像大部分都是C语言,求有空的大神帮我修改成C++,找出错误并改正,谢谢啦;新手上路,请多多关照。。。
时间: 2024-10-28 16:52:52