周六终于可以抽出一整段时间了
想了想就写个贪吃蛇吧 第一次写 差不多下了140行 也不算太多吧
以后ACM比赛是在做不来就自己打个贪吃蛇玩
ps:本来想写个项目的 但是为了方便你们阅读 就写在一个文件里面了
测试了下 无重大BUG 但是 功德圆满 没有测试
知识点:
1:刷新窗口 system("cls");
2: time.h 用来编写时钟系统;
3:SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord); 重置光标位置,即你想在那里输出就把光标移到那个地方输出就可以了
开始还有一个思路就是 不用数组存地图 只用定位光标来 更新蛇 后面发现有点困难
4:其他的就是一些C++的基本语法了
感兴趣的可以拿下去玩玩
贴代码:
//基础知识clock_t clock(void) 返回从程序开始到现在为止的时间单位毫秒 CLOCKS_PER_SEC 转换为秒的单位 相当于1000.0
/* 打开exe 后输出普通游戏画面并在地图中间提示 按任意键开始游戏
*/
#include<iostream>
#include<windows.h>
#include<conio.h>
#include<time.h>
#include<list>
#include<string>
using namespace std;
class retro_snake
{
private:
COORD zz;//缓存前进的点用;
list<COORD>snake;//保存蛇
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)<rate && !(flag=_kbhit()));//一秒后自动读取 或者直接有键入
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(