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

想了想就写个贪吃蛇吧    第一次写 差不多下了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. RxSwift 入坑好多天 - 终于有了一点理解

    一.前言 江湖上都在说现在就要赶紧学 swift 了,即将是 swift 的天下了.在 api 变化不大的情况下,swift 作为一门新的语言,集众家之所长,普通编码确实比 oc 要好用的多了 老早就 ...

  2. html细节积累-01

    语义错误 块级元素可以包含内联元素和某些块级元素,内联元素不能包含块级元素,只能包含内联元素 页面可能正常解析,但不符合语义.浏览器自带容错机制,对于不规范的写法也能够正确解析,各浏览器的容错机制不同 ...

  3. WeMall微信商城源码插件会员卡代码详情

    WeMall微信商城源码插件会员卡代码是用于商业推广的比较有效的方式,分享了部分比较重要的代码,供技术员学习参考 Index_index.html <html> <head> ...

  4. 3400: [Usaco2009 Mar]Cow Frisbee Team 奶牛沙盘队

    3400: [Usaco2009 Mar]Cow Frisbee Team 奶牛沙盘队 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 129  Solv ...

  5. SQL server 数据库(视图、事物、分离附加、备份还原))

    ql Server系列:视图.事物.备份还原.分离附加  视图是数据库中的一种虚拟表,与真实的表一样,视图包含一系列带有名称的行和列数据.行和列数据用来自定义视图的查询所引用的表,并且在引用视图时动态 ...

  6. 'utf8' codec can't decode byte 0xd1 in position 931: invalid continuation byte解决方法

    有时候,我得到这样的字符œ导致的UnicodeDecodeError错误. 我需要能够使串的UTF-8有或没有这些字符. 在工作中,经常遇到,读取一个文件,或者是从网页获取一个问题,明明看着是gb23 ...

  7. JAVA基础知识(2)--关键字static的使用

    在Java类中声明属性.方法和内部类时,可使用关键字static作为修饰符,static标记的属性和方法可以由整个类进行共享,因此static修饰的属性称为类成员或者称为类方法:static修饰的方法 ...

  8. java学习笔记 --- String类

    一.定义 就是由多个字符组成的一串数据.也可以看成是一个字符数组. 注意: 1.字符串是常量:它们的值在创建之后不能更改.为什么? 意思就是说字符串确定了,就会在常量池中生成这个字符串. 所以说它的值 ...

  9. Linux中web服务运行情况的方法

    监控一般通过脚本实现,使用定时任务定期执行检测. 1.端口 本地:ss,netstat,lsof 远程:telnet,namp,nc 2.本地进程数 例如: lsof -i:80|wc -l ps - ...

  10. c++学习笔记之继承篇

    title: c++学习笔记之继承篇 date: 2017-03-26 16:36:33 tags: [c++,继承,public,virtual,private,protected] categor ...