当前位置: 首页 > news >正文

毕业设计选择做网站的意义自己设计logo怎么做

毕业设计选择做网站的意义,自己设计logo怎么做,中国装饰公司营销型网站建设,网站推广计划怎么做C自学精简实践教程 目录(必读) 主要考察 模块划分 / 文本文件读取 UI与业务分离 / 模块划分 控制台交互 / 数据抽象 需求 用户输入字母表示方向#xff0c;实现贪吃蛇游戏 规则#xff1a;碰到边缘和碰到蛇自己都算游戏结束 输入文件 data.txt data.txt 内容如下自学精简实践教程 目录(必读) 主要考察 模块划分 / 文本文件读取 UI与业务分离 / 模块划分 控制台交互 / 数据抽象 需求 用户输入字母表示方向实现贪吃蛇游戏 规则碰到边缘和碰到蛇自己都算游戏结束 输入文件 data.txt data.txt 内容如下 6 7 0 0 0 0 0 0 0 0 0 2 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 第一行包括两个整数表示游戏棋盘大小。分别表示行数和列数。 例如上图中表示游戏大小为6行7列。 后面的内容是一个行数乘以列数的二维数组。 数组的元素为 0 表示这里什么也没有。 数组的元素为 1 表示蛇的头。程序开始的时候蛇没有身体只有头。 数组的元素为 2 表示食物。程序开始的时候可以有多个食物。 例如上图中表示蛇一开始位于棋盘的 第 5 行第 6 列。同时有 3 个食物。 程序输出样式 运行效果 如下图所示蛇的身体需要显示为 #蛇的头需要显示为 食物需要显示为 $  实现思路 文件加载 文件加载只需要按照文件格式的规定读取对应的信息保存在内存模型变量中即可。 所以主要的问题在于应该如何设计内存模型Model 。 内存模型 内存模型设计的合理符合对事物本周的抽象程序代码就简单易于理解。 反之代码就会晦涩难懂。 游戏盘面二维数组 我们需要一个二维数组来存储游戏盘面。这个二维数组可以用 vectorvectorchar m_playBoard 来表示。 蛇的身体队列 蛇会越来越长身体的每个部分我们不希望只是单独的放在游戏盘面上。因为这样意味着每次更新蛇的位置的时候找蛇的身体的每个位置都非常的麻烦。 我们把蛇的身体单独存放一份放到一个队列里 queuepairint, int m_snakeBody 。队列是有方向的这样就可以轻易的知道蛇的头在哪里。 蛇的移动 但是 queue 没有办法遍历元素这样我们想让蛇往前走一步就好像变的不可能了。 真的是这样吗 蛇需要每个元素都需要往前移动一步才能完成蛇走一步吗  如上图所示蛇的身体全部都用  1 表示实际上我们移动蛇的时候只需要将尾巴上的 1 搬到 蛇的头的下一个将要移动到的地方就完成了蛇的整体移动。 如上图所示蛇头向下方移动了一个位置我们把原来尾巴搬到了蛇头新位置就完成了蛇整体的移动。 这样做的好处就是蛇的移动每次只需要搬蛇身体的尾巴一个元素。移动蛇的身体总是固定的常数时间。计算量最大限度的降低了。程序也变的简单了。 游戏盘面和蛇身体的同步 由于蛇的移动变成了游戏盘面上把蛇的尾巴上的 1 搬运到蛇的头部的下一个将要移动到的位置所以蛇的身体队列 m_snakeBody 里只需要存储蛇的身体的每一个元素在游戏盘面上的位置即可。 这就是为何 m_snakeBody 的每一个元素都是一个 pairint, int 原因了。 游戏控制 用户输入 玩家在键盘上输入一个表示方向的字母这样程序就知道蛇应该往哪里移动了。 使用 GoAhead 来实现往前走一步。 游戏结束  当蛇往前走碰到了墙壁超出了游戏盘面的时候游戏结束。 当蛇往前走碰到了自己的身体的一部分游戏结束。 枚举类型 enum class enum class 通常用来提供字面值常量。也就是一些固定值。比如表示方向的东、南、西、北。表示空间的上、下、左、右、前、后。 在本游戏中我们用来表示盘面上物品的类型什么也没有蛇的身体食物。 启动代码 #include list #include utility #include fstream #include sstream #include iostream #include random//随机数 #include chrono//日期时间 using namespace std;class Snake {// 游戏的任意位置 只有三种情况什么也没有蛇的身体食物enum class MatrixValueEnum{NOTHING 0, SNAKE_BODY #, FOOD 2}; public:// 从文件中加载界面数据存放到内部容器中再根据容器内容绘制界面bool LoadPlayDataFromFile(const std::string file);// 开始游戏void Play(void); private:// 用户输入一个字符e/s/f/d决定将蛇的头部往哪个方向移动bool GoAhead(char userInputDirection);// 核心函数// 移动蛇的头的坐标(x,y) (x,y) (i,j)bool GoAhead(int i, int j);//撞到墙壁或者蛇自己的身体就结束游戏bool IsGameOver(int, int) const;// 获取蛇的头的坐标std::pairint, int GetCurrentPosition(void) const;// 计算蛇的头移动一次后的新坐标std::pairint, int GetNextPosition(int, int) const;// 打印贪吃蛇游戏void PrintMatrix(void) const;// 判断 (i,j) 处是否是一个食物bool ExistFood(int i, int j) const;// 在界面上生成一个新的食物给蛇吃void CreateFood(void); private:std::vectorstd::vectorchar m_playMatrix;// 整个游戏的数据二维数组std::liststd::pairint, int m_snakeBody;// 蛇的身体数据 };bool Snake::LoadPlayDataFromFile(const std::string file) {std::ifstream fin(file);if (!fin){std::cout can not open file file endl;return false;}std::string line;std::getline(fin, line);std::istringstream iss(line);// 字符串流 https://zhuanlan.zhihu.com/p/441027904int row 0, column 0;//读取行数和列数//(1) your codefor (size_t i 0; i row; i){std::vectorchar lineData;std::getline(fin, line);std::istringstream issLineData(line);for (size_t j 0; j column; j){char data;//读取一个元素// (2) your code//将组成蛇的头#存放到蛇m_snakeBody容器中//在文件里一开始蛇的身体只有一个头需要把这个数据存起来//(3) your code 判断两个char相等即可// 参考https://zhuanlan.zhihu.com/p/357348144}//将第一行数据存放到二维数组中作为第一维的一个元素子数组//(4) your code}if (m_snakeBody.size() ! 1){cout snake body is empty! init game failed. endl;return false;}return true; }bool Snake::IsGameOver(int x, int y) const {//判断游戏是否已经结束了// x y 是蛇的头打算要去的目的地这个目的地会导致gomeover// 比如超出了游戏界面下标越界// 比如撞到了蛇的身体//(5) your codereturn true; } std::pairint, int Snake::GetCurrentPosition(void) const {//返回蛇 的头的坐标是m_snakeBody的第一个元素的值//6 your code 下面的代码需要自己修改不可以直接使用std::pairint, int front;return front; } std::pairint, int Snake::GetNextPosition(int i, int j) const {//根据蛇的头的位置以及一个移动的向量 (i,j) 得到蛇头部打算要去的新目的地的坐标auto old GetCurrentPosition();//(7) your code 下面的代码需要自己修改不可以直接使用int x 0;int y 0;return std::make_pair(x, y); } bool Snake::ExistFood(int i, int j) const {//返回 坐标(i,j)处是否是有蛇的食物可以吃//(8) your code 下面的代码需要自己修改不可以直接使用return false; } void Snake::CreateFood(void) {// 生成一个新的食物给蛇来吃// 随机生成一个新的位置但是这个位置可能已经是蛇的身体了// 所以需要用一个循环不断的重复在一个新生成的随机位置放置食物// 直到放置成功为止do{unsigned seed std::chrono::system_clock::now().time_since_epoch().count();std::mt19937 g(seed); // mt19937 is a standard mersenne_twister_engine//生成新的随机的坐标//随机数的用法https://blog.csdn.net/calmreason/article/details/72655060//(9) your code 下面的代码需要自己修改不可以直接使用int x 0;int y 0;// 在新坐标处放置一个食物记得检查可以放才能放// 一旦放好记得退出循环让程序继续执行//(10) your code} while (true); } bool Snake::GoAhead(char userInputDirection) {switch (userInputDirection){case w:case W:return GoAhead(-1, 0);//upcase a:case A:return GoAhead(0, -1);//leftcase d:case D:return GoAhead(0, 1);//rightcase s:case S:return GoAhead(1, 0);//downdefault:return true;} } bool Snake::GoAhead(int i, int j) {auto nextPosition GetNextPosition(i, j);//垂直方向x不变竖直方向y减少1// 首先判断游戏是否已经结束if (IsGameOver(nextPosition.first, nextPosition.second)){return false;}// 判断nextPosition 处是否有食物// 如果有食物就吃掉这个食物// 并生成一个新的食物if (ExistFood(nextPosition.first, nextPosition.second)){// (11) your code//直接吃掉尾巴不用移动m_playMatrix[nextPosition.first][nextPosition.second] static_castchar(MatrixValueEnum::SNAKE_BODY);CreateFood();//随机生成一个食物}// 如果 nextPosition 处没有食物就移动蛇的身体else{// (12) your code//尾巴移动 auto tail m_snakeBody.back();m_playMatrix[tail.first][tail.second] static_castchar(MatrixValueEnum::NOTHING);m_snakeBody.pop_back();} }void Snake::Play(void) {CreateFood();//随机生成一个食物while (true){/*清屏这不是C的一部分是系统调用。这个语句执行的快慢与代码无关与控制台用户自己设置的缓冲区大小有关。*/system(cls);PrintMatrix();std::cout direction: W(up) A(left) S(down) D(right)\n;std::cout $: food\n;std::cout : snake head\n;std::cout #: snake tail\n;char direction;std::cin direction;//往前走一步如果判断无法往前走到用户指定的位置就退出程序// 13 your codeif (!GoAhead(direction)){std::cout Game Over! std::endl;break;}} } void Snake::PrintMatrix(void) const {auto headPosition m_snakeBody.front();for (size_t i 0; i m_playMatrix.size(); i){for (size_t j 0; j m_playMatrix[i].size(); j){if (i headPosition.first j headPosition.second){std::cout ;}else if (m_playMatrix[i][j] static_castchar(MatrixValueEnum::FOOD)){std::cout $ ;}else if (m_playMatrix[i][j] static_castchar(MatrixValueEnum::NOTHING)){std::cout _ ;}else{std::cout m_playMatrix[i][j] ;}}std::cout std::endl;} }int main(int argc, char** argv) {Snake snake;if (snake.LoadPlayDataFromFile(data.txt)){snake.Play();}return 0; }
http://www.zqtcl.cn/news/846940/

相关文章:

  • 自助建站免费建站免费建站工具有哪些
  • 海外网站导航前端静态网站开发
  • 德庆网站建设价格网站的月度流量统计报告怎么做
  • 网站哪里买外链品牌网站设计步骤
  • 网站推广 优帮云淄博网站制作公司
  • 二手书哪个网站做的好wordpress 直排主题
  • 网站开发风险分析做情诗网站
  • 怎样可以快速增加网站的反链网络广告平台有哪些
  • 学校网站源码小游戏网站审核怎么做
  • 西乡网站建设政务网站开发协议
  • 美食网站开发环境北京app网站建设
  • 郑州网站建设推广渠道重庆网站建设公司下载
  • 宜宾营销型网站建设网站建设需要什么资质
  • 重庆建网站有哪些学跨境电商要多少钱
  • 上海建设钢结构工程网站深圳电器公司排名
  • 淄博网站建设找淄深网江苏省建设斤网站
  • 免费行情软件app网站红色西安做网站印象网络
  • 宁波网站建设小程序开发聊城wap网站建设
  • 陇南网站网站建设泰安网站的建设
  • 哪个网站有介绍拿到家做的手工活建设银行网站怎么修改手机号码吗
  • 网站地图怎么用淘宝客推广网站建设
  • 外贸零售网站建设购物网站支付功能怎么做
  • 淘宝客如何做自己的网站西宁工程建设招聘信息网站
  • 天津都有哪些制作网站郑州官网首页
  • 个人网站开发模式海南省建设公司官网
  • edu网站开发做爰视频在线观看免费网站
  • 安防公司网站模板网站建设模板下载
  • 贵阳网站建设方案维护一 建设茶叶网站前的市场分析
  • 山东东营建设网官方网站百度电脑版
  • 做网站前途如何海尔网站建设推广