1 /**--------------------------------------------------**/
2 /**名称:大大维的贪吃蛇v1 日期:2017/1/22**/
3 /**描述:实现了贪吃蛇的基本功能,可以调节游戏难度,**/
4 /**做了一个简单的用户界面 **/
5 /**存在的问题:由于使用了全局数组存贮,因此对Space **/
6 /**类的封装有些欠缺;由于使用了全局刷新,游戏运行中**/
7 /**会出现闪屏现象,游戏难度越高,闪动越严重;不能够**/
8 /**存储玩家的游戏记录,由于不是图形化界面,用户界面**/
9 /**较丑;不能改变游戏的地图大小 **/
10 /**笔者会在后续版本逐步完善这些问题!!! **/
11 /**--------------------------------------------------**/
12
13 #include<iostream>
14 #include<ctime>
15 #include<cstdlib>
16 #include<cstdio>
17 #include<conio.h>
18 #include<windows.h>
19 using namespace std;
20 const int SpaceLENG=20;
21 const int SpaceHIGH=40;
22 const int HARDSPEED=100;
23 const int NOMALSPEED=400;
24 const int EASYSPEED=700;
25 int speed=NOMALSPEED;
26 bool FLAG=true;
27 enum dir {UP,DOWN,LEFT,RIGHT};///使用小写会引发歧义
28 enum level {HARD,ESAY,NOMAL};
29 ///----------------------------------------------------
30 ///游戏空间定义
31 class Space
32 {
33 public:
34 void InitSpace();
35 void DisplaySpace();
36 public:
37 char SpaceData[SpaceLENG+2][SpaceHIGH+2];
38 };
39 void Space::InitSpace()
40 {
41 for(int i=-1; i<SpaceLENG+1; i++)
42 for(int j=-1; j<SpaceHIGH+1; j++)
43 {
44 if(i<0||i==SpaceLENG||j<0||j==SpaceHIGH)
45 SpaceData[i][j]='#';
46 else
47 SpaceData[i][j]=' ';
48 }
49 }
50 void Space::DisplaySpace()
51 {
52 for(int i=-1; i<SpaceLENG+1; i++)
53 {
54 for(int j=-1; j<SpaceHIGH+1; j++)
55 {
56 cout<<SpaceData[i][j];
57 }
58 cout<<endl;
59 }
60 cout<<endl<<endl;
61 }
62 Space *spa=new Space();
63 ///----------------------------------------------------
64 ///蛇节点定义
65 class SnakeNode
66 {
67 public:
68 void setXY(int m,int n)
69 {
70 x=m;
71 y=n;
72 }
73 void setNext(SnakeNode *temp)
74 {
75 next=temp;
76 }
77 void setPrior(SnakeNode *temp)
78 {
79 prior=temp;
80 }
81 int getX()
82 {
83 return x;
84 }
85 int getY()
86 {
87 return y;
88 }
89 SnakeNode* getNext()
90 {
91 return next;
92 }
93 SnakeNode* getPrior()
94 {
95 return prior;
96 }
97 private:
98 int x,y;
99 SnakeNode *prior,*next;
100 };
101 ///----------------------------------------------------
102 ///食物定义
103 class Food
104 {
105 public:
106 void foodCreate()
107 {
108 bool flag=true;
109 while(flag)
110 {
111 srand((unsigned int)time(NULL));
112 fx=rand()%SpaceLENG;
113 fy=rand()%SpaceHIGH;
114 if(spa->SpaceData[fx][fy]!='*')
115 flag=false;
116 }
117
118 spa->SpaceData[fx][fy]='$';
119 }
120 int getFx()
121 {
122 return fx;
123 }
124 int getFy()
125 {
126 return fy;
127 }
128 private:
129 int fx;
130 int fy;
131 };
132 ///----------------------------------------------------
133 ///蛇定义
134 class Snake:public SnakeNode,public Food
135 {
136 public:
137 Snake()
138 {
139 addHead(SpaceLENG/2,SpaceHIGH/2);
140 addHead(SpaceLENG