周六终于可以抽出一整段时间了

想了想就写个贪吃蛇吧    第一次写 差不多下了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[]; //保存游戏画面
int direction; //保存现在蛇的前进方向
int grates;
int level; //游戏等级
int rate; //游戏速率
public:
retro_snake() //初始化游戏
{
level = ; rate = ; grates = ; direction = ;
for (int i = ; i<; i++)
{
if (i == || i == )
ma[i] = "###################################";//
else
ma[i] = "# #";
}
zz.X = ; zz.Y = ;
snake.push_front(zz);
}
void draw(void) const//绘画游戏界面
{
for (int i = ; i<; i++)
cout << ma[i] << endl;
cout << "得分:" << grates << "等级:" << level << endl;
cout << "w: 上 s:下 a:左 d:右 空格:暂停 " << endl;
}
void creat_food()//生成食物
{
int x, y;
do
{
x = rand() % + ;
y = rand() % + ;
} while (ma[x][y] != ' ');
ma[x][y] = '$';
}
void clock_system(void)//时钟系统 控制游戏进行
{
double Start = clock();
char ch = 'w'; bool flag;//初始化前进方向
creat_food();
while ()
{
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_ = ; break;
case 'a':direction_ = ; break;
case 's':direction_ = ; break;
case 'd':direction_ = ; break;
default:direction_ = ;
}
if (direction_ + direction != &&direction_!=) direction = direction_;//如果输入的方向不和现在前进的方向冲突 就改变
}
switch (direction)
{
case :zz.X = snake.front().X; zz.Y = snake.front().Y - ; break;
case :zz.X = snake.front().X + ; zz.Y = snake.front().Y; break;
case :zz.X = snake.front().X - ; zz.Y = snake.front().Y; break;
case :zz.X = snake.front().X; zz.Y = snake.front().Y + ; break;
}
if (ma[zz.Y][zz.X] == '#' || ma[zz.Y][zz.X] == '.')
{
COORD coord; coord.X = ; coord.Y = ;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
cout << "游戏结束";
Sleep();
break;
}
else if (ma[zz.Y][zz.X] == '$')
{
grates++; level = grates / ;
level = min(, level);
rate = - level * ;
ma[snake.front().Y][snake.front().X] = '.';
snake.push_front(zz);
ma[snake.front().Y][snake.front().X] = '@';
if (snake.size() == )
{
COORD coord; coord.X = ; coord.Y = ;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
cout << "功德圆满";
Sleep();
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 = ; coord.Y = ;
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 ;
}

C++实现的控制台-贪吃蛇的更多相关文章

  1. C++ 简单的控制台贪吃蛇小游戏

    由于比较懒,所以不怎么写,觉得这样不应该.我应该对自己学的做出整理,不管是高端低端,写出来是自己的. // 贪吃蛇.cpp : 定义控制台应用程序的入口点. // #include "std ...

  2. C++控制台贪吃蛇代码

    游戏截图: 以下是3个代码文件: Snake_Class.h文件: #ifndef SNAKE #define SNAKE #include<windows.h> #include< ...

  3. 转载——C++控制台贪吃蛇代码

    游戏截图: 以下是3个代码文件: Snake_Class.h文件: 1 #ifndef SNAKE 2 #define SNAKE 3 4 #include<windows.h> 5 #i ...

  4. 一个控制台贪吃蛇小游戏(wsad控制移动)

    /******************************************** * 程序名称:MR.DUAN 的贪吃蛇游戏(链表法) * 作 者:WindAutumn <flutti ...

  5. 控制台游戏引擎CGE——贪吃蛇

    今天我也来发一个控制台游戏.先看图: 缘起 LZ是一个有严重拖延症的人,表现的形式就是隔一段时间就要刷一刷博客园. 这不前几天,看到了魏大师<使用Lua脚本语言开发出高扩展性的系统...> ...

  6. c/c++ 贪吃蛇控制台版

    贪吃蛇控制台版(操作系统win7 64位:编译环境gcc, vs2017通过,其它环境未测试 不保证一定通过) 运行效果: #include <iomanip> #include < ...

  7. python【控制台】小游戏--贪吃蛇

    传统贪吃蛇相信大家都玩过,也是一款很老很经典的游戏,今天我们用python控制台实现 项目有很多bug没有解决,因为本人一时兴起写的一个小游戏,所以只是实现可玩部分功能,并没有花较多的时间和精力去维护 ...

  8. C/C++编程笔记:C语言贪吃蛇源代码控制台(二),分数和食物!

    接上文<C/C++编程笔记:C语言贪吃蛇源代码控制台(一),会动的那种哦!>如果你在学习C语言开发贪吃蛇的话,零基础建议从上一篇开始哦!接下来正式开始吧! 三.蛇的运动 上次我已经教大家画 ...

  9. C++控制台应用程序之贪吃蛇(改进版)

    #include<iostream> #include<stdio.h> #include<stdlib.h> #include<time.h> #in ...

随机推荐

  1. webpack从0开始---(一)

    换了新环境,同时也有了新目标,从webpack开始. webpack:具体是什么,大家还是自行去看吧,这里就不多做介绍了! 传送门---webpack.github.io 网上的安装方法很多,这里我就 ...

  2. MyBatis从入门到放弃四:一对多关联查询

    前言 上篇学习了一对一关联查询,这篇我们学习一对多关联查询.一对多关联查询关键点则依然是配置resultMap,在resultMap中配置collection属性,别忽略了ofType属性. 搭建开发 ...

  3. spring提供的线程池

    SPRING中的线程池ThreadPoolTaskExecutor 分类: JAVA Spring2013-07-12 10:36 14896人阅读 评论(9) 收藏 举报 Spring线程池多线程 ...

  4. 基于C#的UDP通信(使用UdpClient实现,包含发送端和接收端)

    UDP不属于面向连接的通信,在选择使用协议的时候,选择UDP必须要谨慎.在网络质量令人十分不满意的环境下,UDP协议数据包丢失会比较严重.但是由于UDP的特性:它不属于连接型协议,因而具有资源消耗小, ...

  5. 【js数据结构】栈解决佩兹糖果盒问题

    现实生活中栈的一个例子是佩兹糖果盒. 想象一下你有一盒佩兹糖果, 里面塞满了红色. 黄色和白色的糖果, 但是你不喜欢黄色的糖果. 使用栈( 有可能用到多个栈) 写一段程序, 在不改变盒内其他糖果叠放顺 ...

  6. Java中实现短信发送

    最近跟着做公司的项目偶然接触到的,顺势把这个给记录下来,给自己梳理一下. 采用引入第三方工具的方式,网上查了半天,发现简单的实现方式便是注册一个中国网建的账号,新建账号的时候会附带赠几条免费短信,彩信 ...

  7. Python中的日期和时间

    感觉C语言作为一门编程的入门语言还是很好的,相比较之下,Python为代表的一些语言,适合很多非计算机专业的编程入门学习. Python 日期和时间 Python 程序能用很多方式处理日期和时间,转换 ...

  8. Mac系统安装nginx+rtmp模块

    1.安装命令 ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install) ...

  9. cuda学习笔记——deviceQuery

    main(int argc, char **argv):argc是参数个数,**argv具体的参数,第0个是程序全名 cudaError_t类型:记录cuda错误,值为cudaSuccess则正确执行 ...

  10. 樱花的季节,教大家用canvas画出飞舞的樱花树

    又到了樱花的季节,教大家使用canvas画出飞舞的樱花树效果. 废话少说,先看效果. 演示效果地址:http://suohb.com/work/tree4.htm 查看演示效果 第一步,我们先画出一棵 ...