|
|
发表于 2012-2-20 23:32:12
|
显示全部楼层
- #include <iostream.h>
- #include <windows.h>
- #include <stdlib.h>
- #include <conio.h>
- #include <stdio.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::InitFence()
- {
- 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]='*';
- }
- int SnakeNode::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)
- {
- cout<<"game over!!!!"<<endl;
- exit(0);
- }
- if(a==food_x&&b==food_y)
- {
- 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;
- if (f.game[food_x][food_y]!='*') //做下判断随机产生*是否与初始化重复
- {
- f.game[food_x][food_y] = '*';
- }
- else
- {
- get_food();
- }
- }
- int main(int argc,char argv[])
- {
- move m;
- f.InitFence();
- head->add_head(4,3);
- m.get_food();
- f.OutputF();
- while(true)
- {
- char keydown=getch();//getch()返回键盘上读取的字符
- //包含头文件<conio.h>
- m.change_point(keydown);
- while(!kbhit())
- {
- m.moving();
- system("cls");
-
- f.OutputF();
- Sleep(200);
-
- }
- }
- return 0;
- }
复制代码 伤眼睛啊 sleep控制速度的
这里用了system("cls")我觉得不好
这里如果设计外面边框静态显示
里面东西动态显示就不会显得那么晃了
|
|