C++实现的控制台-贪吃蛇
周六终于可以抽出一整段时间了
想了想就写个贪吃蛇吧 第一次写 差不多下了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++实现的控制台-贪吃蛇的更多相关文章
- C++ 简单的控制台贪吃蛇小游戏
由于比较懒,所以不怎么写,觉得这样不应该.我应该对自己学的做出整理,不管是高端低端,写出来是自己的. // 贪吃蛇.cpp : 定义控制台应用程序的入口点. // #include "std ...
- C++控制台贪吃蛇代码
游戏截图: 以下是3个代码文件: Snake_Class.h文件: #ifndef SNAKE #define SNAKE #include<windows.h> #include< ...
- 转载——C++控制台贪吃蛇代码
游戏截图: 以下是3个代码文件: Snake_Class.h文件: 1 #ifndef SNAKE 2 #define SNAKE 3 4 #include<windows.h> 5 #i ...
- 一个控制台贪吃蛇小游戏(wsad控制移动)
/******************************************** * 程序名称:MR.DUAN 的贪吃蛇游戏(链表法) * 作 者:WindAutumn <flutti ...
- 控制台游戏引擎CGE——贪吃蛇
今天我也来发一个控制台游戏.先看图: 缘起 LZ是一个有严重拖延症的人,表现的形式就是隔一段时间就要刷一刷博客园. 这不前几天,看到了魏大师<使用Lua脚本语言开发出高扩展性的系统...> ...
- c/c++ 贪吃蛇控制台版
贪吃蛇控制台版(操作系统win7 64位:编译环境gcc, vs2017通过,其它环境未测试 不保证一定通过) 运行效果: #include <iomanip> #include < ...
- python【控制台】小游戏--贪吃蛇
传统贪吃蛇相信大家都玩过,也是一款很老很经典的游戏,今天我们用python控制台实现 项目有很多bug没有解决,因为本人一时兴起写的一个小游戏,所以只是实现可玩部分功能,并没有花较多的时间和精力去维护 ...
- C/C++编程笔记:C语言贪吃蛇源代码控制台(二),分数和食物!
接上文<C/C++编程笔记:C语言贪吃蛇源代码控制台(一),会动的那种哦!>如果你在学习C语言开发贪吃蛇的话,零基础建议从上一篇开始哦!接下来正式开始吧! 三.蛇的运动 上次我已经教大家画 ...
- C++控制台应用程序之贪吃蛇(改进版)
#include<iostream> #include<stdio.h> #include<stdlib.h> #include<time.h> #in ...
随机推荐
- 基于react+react-router+redux+socket.io+koa开发一个聊天室
最近练手开发了一个项目,是一个聊天室应用.项目虽不大,但是使用到了react, react-router, redux, socket.io,后端开发使用了koa,算是一个比较综合性的案例,很多概念和 ...
- Bootstrap学习-环境安装
1.<meta http-equiv="X-UA-Compatible" content="IE=edge"> 让IE运行最新的渲染模式. 2.&l ...
- 九度oj题目1207:质因数的个数
题目描述: 求正整数N(N>1)的质因数的个数. 相同的质因数需要重复计算.如120=2*2*2*3*5,共有5个质因数. 输入: 可能有多组测试数据,每组测试数据的输入是一个正整数N,(1&l ...
- Atlas-手淘组件化框架的前世今生和未来的路
今天手淘技术团队宣布正式开源它们的容器框架Atlas,项目地址: https://github.com/alibaba/atlas 同时他们还推出了项目官网,上线了技术文档: http://atlas ...
- AVFoundation之如何从摄像头获取图像
前言: 最近项目有个需求是对试图对手机密码进行强破解的人进行拍照(通过摄像头截图),因为之前没做过,所以一堆坑.现在就把我的经验都分享出来,希望后来人不用再踏上坑途中. 直接上代码: // 创建会话 ...
- javaScript事件(六)事件类型之滚轮事件
滚轮事件其实就是一个mousewheel事件,这个事件跟踪鼠标滚轮,类似Mac的触屏版. 一.客户区坐标位置 鼠标事件都是在浏览器视口的特定位置上发生的.这个位置信息保存在事件对象的clientX和c ...
- 使用webcollector爬虫技术获取网易云音乐全部歌曲
最近在知乎上看到一个话题,说使用爬虫技术获取网易云音乐上的歌曲,甚至还包括付费的歌曲,哥瞬间心动了,这年头,好听的流行音乐或者经典老歌都开始收费了,只能听不能下载,着实很郁闷,现在机会来了,于是开始研 ...
- android学习——环境的搭建
1.安装JDK(java开发工具箱) 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html(根据自己需要下载) ...
- Telnet 在win7 和 xp中的使用
telnet 默认在开启之后 监听23端口.最近在尝试使用这个服务 虽然很多机器默认是不开启telnet这个服务的 但是 万一能够碰到 也是为了自己以后能够熟练起来咯. telnet有服务器跟客户端之 ...
- angularjs fileUpload
文件上传一直是我不熟悉的地方,<a href='https://github.com/nervgh/angular-file-upload/wiki/Module-API'>官网解释的例子 ...