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

想了想就写个贪吃蛇吧    第一次写 差不多下了140行  也不算太多吧

以后ACM比赛是在做不来就自己打个贪吃蛇玩

ps:本来想写个项目的 但是为了方便你们阅读 就写在一个文件里面了

测试了下  无重大BUG     但是 功德圆满 没有测试

知识点:

1:刷新窗口 system("cls");

2: time.h 用来编写时钟系统;

3:SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);  重置光标位置,即你想在那里输出就把光标移到那个地方输出就可以了

开始还有一个思路就是 不用数组存地图 只用定位光标来  更新蛇  后面发现有点困难

4:其他的就是一些C++的基本语法了

感兴趣的可以拿下去玩玩

贴代码:

  1. //基础知识clock_t clock(void) 返回从程序开始到现在为止的时间单位毫秒 CLOCKS_PER_SEC 转换为秒的单位 相当于1000.0
  2. /* 打开exe 后输出普通游戏画面并在地图中间提示 按任意键开始游戏
  3. */
  4. #include<iostream>
  5. #include<windows.h>
  6. #include<conio.h>
  7. #include<time.h>
  8. #include<list>
  9. #include<string>
  10. using namespace std;
  11. class retro_snake
  12. {
  13. private:
  14. COORD zz;//缓存前进的点用;
  15. list<COORD>snake;//保存蛇
  16. string ma[]; //保存游戏画面
  17. int direction; //保存现在蛇的前进方向
  18. int grates;
  19. int level; //游戏等级
  20. int rate; //游戏速率
  21. public:
  22. retro_snake() //初始化游戏
  23. {
  24. level = ; rate = ; grates = ; direction = ;
  25. for (int i = ; i<; i++)
  26. {
  27. if (i == || i == )
  28. ma[i] = "###################################";//
  29. else
  30. ma[i] = "# #";
  31. }
  32. zz.X = ; zz.Y = ;
  33. snake.push_front(zz);
  34. }
  35. void draw(void) const//绘画游戏界面
  36. {
  37. for (int i = ; i<; i++)
  38. cout << ma[i] << endl;
  39. cout << "得分:" << grates << "等级:" << level << endl;
  40. cout << "w: 上 s:下 a:左 d:右 空格:暂停 " << endl;
  41. }
  42. void creat_food()//生成食物
  43. {
  44. int x, y;
  45. do
  46. {
  47. x = rand() % + ;
  48. y = rand() % + ;
  49. } while (ma[x][y] != ' ');
  50. ma[x][y] = '$';
  51. }
  52. void clock_system(void)//时钟系统 控制游戏进行
  53. {
  54. double Start = clock();
  55. char ch = 'w'; bool flag;//初始化前进方向
  56. creat_food();
  57. while ()
  58. {
  59. while ((clock() - Start)<rate && !(flag=_kbhit()));//一秒后自动读取 或者直接有键入
  60. Start = clock();
  61. if (flag)
  62. {
  63. ch = _getch();
  64. int direction_;
  65. if (ch == ' ')//暂停的功能实现
  66. {
  67. while (!_kbhit());
  68. ch = _getch();
  69. Start = clock();
  70. }
  71. else if (ch == 'r')
  72. {
  73.  
  74. }
  75. switch (ch)
  76. {
  77. case 'w':direction_ = ; break;
  78. case 'a':direction_ = ; break;
  79. case 's':direction_ = ; break;
  80. case 'd':direction_ = ; break;
  81. default:direction_ = ;
  82. }
  83. if (direction_ + direction != &&direction_!=) direction = direction_;//如果输入的方向不和现在前进的方向冲突 就改变
  84. }
  85. switch (direction)
  86. {
  87. case :zz.X = snake.front().X; zz.Y = snake.front().Y - ; break;
  88. case :zz.X = snake.front().X + ; zz.Y = snake.front().Y; break;
  89. case :zz.X = snake.front().X - ; zz.Y = snake.front().Y; break;
  90. case :zz.X = snake.front().X; zz.Y = snake.front().Y + ; break;
  91. }
  92. if (ma[zz.Y][zz.X] == '#' || ma[zz.Y][zz.X] == '.')
  93. {
  94. COORD coord; coord.X = ; coord.Y = ;
  95. SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
  96. cout << "游戏结束";
  97. Sleep();
  98. break;
  99. }
  100. else if (ma[zz.Y][zz.X] == '$')
  101. {
  102. grates++; level = grates / ;
  103. level = min(, level);
  104. rate = - level * ;
  105. ma[snake.front().Y][snake.front().X] = '.';
  106. snake.push_front(zz);
  107. ma[snake.front().Y][snake.front().X] = '@';
  108. if (snake.size() == )
  109. {
  110. COORD coord; coord.X = ; coord.Y = ;
  111. SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
  112. cout << "功德圆满";
  113. Sleep();
  114. break;
  115. }
  116. creat_food();
  117. }
  118. else
  119. {
  120. ma[snake.front().Y][snake.front().X] = '.';
  121. snake.push_front(zz);
  122. ma[snake.front().Y][snake.front().X] = '@';
  123. ma[snake.back().Y][snake.back().X] = ' ';
  124. snake.pop_back();
  125. }
  126. system("cls");
  127. draw();
  128. }
  129. }
  130. void start(void)
  131. {
  132. draw();
  133. COORD coord; coord.X = ; coord.Y = ;
  134. SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
  135. cout << "按任意键开始";
  136. while (!_kbhit());
  137. char ch =_getch();
  138. system("cls");
  139. draw();
  140. clock_system();
  141. }
  142. };
  143. int main()
  144. {
  145. retro_snake Game;
  146. Game.start();
  147. return ;
  148. }

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. PHP中include()与require()的区别

    require 的使用方法如 require("MyRequireFile.php"); .这个函数通常放在 PHP 程序的最前面,PHP 程序在执行前,就会先读入 require ...

  2. AR入门系列-02-Vuforia在Unity3d编辑器的使用

    到unity3d的官网下载 地址:https://store.unity.com/?_ga=1.1496562.231401799.1487590551 个人版功能齐全免费,个人开发者基本够用,本案例 ...

  3. 2017-2-18 net 输入输出语句

    控制台程序的创建,输出,输入语句,定义变量,变量赋值,值覆盖,值拼接,值打印两种数据类型,整形类型转换 知识点: 1.输出语句 Console.WriteLine("");光标换行 ...

  4. 自己动手编写Maven的插件

    Maven的插件机制是完全依赖Maven的生命周期的,因此理解生命周期至关重要.本文参考官方文档后使用archetype创建,手动创建太麻烦. 创建创建项目 选择maven-archetype-moj ...

  5. 【2017-03-12】SQL Sever 子查询、聚合函数

    一.子查询 子查询:把一条查询语句,当做值来使用子句的查询结果必须是一列子句可以返回多行数据,但必须是一列 子句返回的值为一个值的时候: 例如: 我只知道c026这个编号,我要查询比这个车价格低的全部 ...

  6. JAVA面试题和答案(二)

    本文我们将要讨论Java面试中的各种不同类型的面试题,它们可以让雇主测试应聘者的Java和通用的面向对象编程的能力.下面的章节分为上下两篇,第一篇将要讨论面向对象编程和它的特点,关于Java和它的功能 ...

  7. wxWidgets 的 Linux / Windows 混合开发环境

    目标 建立一个开发 GUI 交互界面程序的环境,要求: 以 C/C++ 为主要程序设计语言. 最好能充分利用已有的 MFC 开发经验. 以 Linux 为主要开发环境.可以在 Windows 中编译并 ...

  8. 开源免费的.NET图像即时处理的组件ImageProcessor

    承接以前的组件系列,这个组件系列旨在介绍.NET相关的组件,让大家可以在项目中有一个更好的选择,社区对于第三方插件的介绍还是比较少的,很多博文的内容主要还是介绍一些简单的操作(很多人都说博客园现在是“ ...

  9. spring或springmvc自动生成applicationcontext.xml或springmvc文件(此文转载和借鉴多篇文章)

    在用spring或者springmvc框架进行开发时,编辑applicationcontext.xml等配置文件是必不可少的,在eclipse中打开applicationcontext.xml通常是这 ...

  10. “Dynamic Web Module 3.0 requires Java 1.6 or newer.”错误 (转别人)

    eclipse maven 在项目的pom.xml的<build></build>标签中加入: <plugins> <plugin> <group ...