- //基础知识clock_t clock(void) 返回从程序开始到现在为止的时间单位毫秒 CLOCKS_PER_SEC 转换为秒的单位 相当于1000.0
- /* 打开exe 后输出普通游戏画面并在地图中间提示 按任意键开始游戏
- */
- #include#include#include#include#include#include < string > using namespace std;
- class retro_snake {
- private: COORD zz; //缓存前进的点用;
- listsnake; //保存蛇
- string ma[15]; //保存游戏画面
- int direction; //保存现在蛇的前进方向
- int grates;
- int level; //游戏等级
- int rate; //游戏速率
- public: retro_snake() //初始化游戏
- {
- level = 0;
- rate = 800;
- grates = 0;
- direction = 1;
- for (int i = 0; i < 15; i++) {
- if (i == 0 || i == 14) ma[i] = "###################################"; //35
- else ma[i] = "# #";
- }
- zz.X = 17;
- zz.Y = 7;
- snake.push_front(zz);
- }
- void draw(void) const //绘画游戏界面
- {
- for (int i = 0; i < 15; i++) cout << ma[i] << endl;
- cout << "得分:" << grates << "等级:" << level << endl;
- cout << "w: 上 s:下 a:左 d:右 空格:暂停 " << endl;
- }
- void creat_food() //生成食物
- {
- int x,
- y;
- do {
- x = rand() % 14 + 1;
- y = rand() % 34 + 1;
- } while ( ma [ x ][y] != ' ');
- ma[x][y] = '$';
- }
- void clock_system(void) //时钟系统 控制游戏进行
- {
- double Start = clock();
- char ch = 'w';
- bool flag; //初始化前进方向
- creat_food();
- while (1) {
- while ((clock() - Start) //一秒后自动读取 或者直接有键入
- Start = clock();
- if (flag) {
- ch = _getch();
- int direction_;
- if (ch == ' ') //暂停的功能实现
- {
- while (!_kbhit());
- ch = _getch();
- Start = clock();
- } else if (ch == 'r') {}
- switch (ch) {
- case 'w':
- direction_ = 1;
- break;
- case 'a':
- direction_ = 3;
- break;
- case 's':
- direction_ = 4;
- break;
- case 'd':
- direction_ = 2;
- break;
- default:
- direction_ = 0;
- }
- if (direction_ + direction != 5 && direction_ != 0) direction = direction_; //如果输入的方向不和现在前进的方向冲突 就改变
- }
- switch (direction) {
- case 1:
- zz.X = snake.front().X;
- zz.Y = snake.front().Y - 1;
- break;
- case 2:
- zz.X = snake.front().X + 1;
- zz.Y = snake.front().Y;
- break;
- case 3:
- zz.X = snake.front().X - 1;
- zz.Y = snake.front().Y;
- break;
- case 4:
- zz.X = snake.front().X;
- zz.Y = snake.front().Y + 1;
- break;
- }
- if (ma[zz.Y][zz.X] == '#' || ma[zz.Y][zz.X] == '.') {
- COORD coord;
- coord.X = 3;
- coord.Y = 8;
- SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
- cout << "游戏结束";
- Sleep(300);
- break;
- } else if (ma[zz.Y][zz.X] == '$') {
- grates++;
- level = grates / 10;
- level = min(5, level);
- rate = 800 - level * 100;
- ma[snake.front().Y][snake.front().X] = '.';
- snake.push_front(zz);
- ma[snake.front().Y][snake.front().X] = '@';
- if (snake.size() == 429) {
- COORD coord;
- coord.X = 3;
- coord.Y = 8;
- SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
- cout << "功德圆满";
- Sleep(300);
- break;
- }
- creat_food();
- } else {
- ma[snake.front().Y][snake.front().X] = '.';
- snake.push_front(zz);
- ma[snake.front().Y][snake.front().X] = '@';
- ma[snake.back().Y][snake.back().X] = ' ';
- snake.pop_back();
- }
- system("cls"); draw();
- }
- }
- void start(void) {
- draw();
- COORD coord;
- coord.X = 13;
- coord.Y = 8;
- SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
- cout << "按任意键开始";
- while (!_kbhit());
- char ch = _getch();
- system("cls");
- draw();
- clock_system();
- }
- };
- int main() {
- retro_snake Game;
- Game.start();
- return 0;
- }
来源: http://www.cnblogs.com/Swust-lyon/p/6714025.html