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 ...
随机推荐
- PHP中include()与require()的区别
require 的使用方法如 require("MyRequireFile.php"); .这个函数通常放在 PHP 程序的最前面,PHP 程序在执行前,就会先读入 require ...
- AR入门系列-02-Vuforia在Unity3d编辑器的使用
到unity3d的官网下载 地址:https://store.unity.com/?_ga=1.1496562.231401799.1487590551 个人版功能齐全免费,个人开发者基本够用,本案例 ...
- 2017-2-18 net 输入输出语句
控制台程序的创建,输出,输入语句,定义变量,变量赋值,值覆盖,值拼接,值打印两种数据类型,整形类型转换 知识点: 1.输出语句 Console.WriteLine("");光标换行 ...
- 自己动手编写Maven的插件
Maven的插件机制是完全依赖Maven的生命周期的,因此理解生命周期至关重要.本文参考官方文档后使用archetype创建,手动创建太麻烦. 创建创建项目 选择maven-archetype-moj ...
- 【2017-03-12】SQL Sever 子查询、聚合函数
一.子查询 子查询:把一条查询语句,当做值来使用子句的查询结果必须是一列子句可以返回多行数据,但必须是一列 子句返回的值为一个值的时候: 例如: 我只知道c026这个编号,我要查询比这个车价格低的全部 ...
- JAVA面试题和答案(二)
本文我们将要讨论Java面试中的各种不同类型的面试题,它们可以让雇主测试应聘者的Java和通用的面向对象编程的能力.下面的章节分为上下两篇,第一篇将要讨论面向对象编程和它的特点,关于Java和它的功能 ...
- wxWidgets 的 Linux / Windows 混合开发环境
目标 建立一个开发 GUI 交互界面程序的环境,要求: 以 C/C++ 为主要程序设计语言. 最好能充分利用已有的 MFC 开发经验. 以 Linux 为主要开发环境.可以在 Windows 中编译并 ...
- 开源免费的.NET图像即时处理的组件ImageProcessor
承接以前的组件系列,这个组件系列旨在介绍.NET相关的组件,让大家可以在项目中有一个更好的选择,社区对于第三方插件的介绍还是比较少的,很多博文的内容主要还是介绍一些简单的操作(很多人都说博客园现在是“ ...
- spring或springmvc自动生成applicationcontext.xml或springmvc文件(此文转载和借鉴多篇文章)
在用spring或者springmvc框架进行开发时,编辑applicationcontext.xml等配置文件是必不可少的,在eclipse中打开applicationcontext.xml通常是这 ...
- “Dynamic Web Module 3.0 requires Java 1.6 or newer.”错误 (转别人)
eclipse maven 在项目的pom.xml的<build></build>标签中加入: <plugins> <plugin> <group ...