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

安徽省建设信息网站杭州网站优化服务

安徽省建设信息网站,杭州网站优化服务,做网站虚拟主机怎么选择,做360全景的网站文章目录一、定义结构体对象二、游戏初始化1. 蛇初始化2. 食物初始化3. 围墙初始化4. 界面初始化三、逻辑编程1. 启动游戏2. 打印成绩3. main函数四、细节处理五、程序源码该篇环境为Visual Studio2022 游戏简述 :在控制终端绘画出一个矩阵表示游戏界面(围墙)&…

文章目录

  • 一、定义结构体对象
  • 二、游戏初始化
    • 1. 蛇初始化
    • 2. 食物初始化
    • 3. 围墙初始化
    • 4. 界面初始化
  • 三、逻辑编程
    • 1. 启动游戏
    • 2. 打印成绩
    • 3. main函数
  • 四、细节处理
  • 五、程序源码


该篇环境为Visual Studio2022

游戏简述 :在控制终端绘画出一个矩阵表示游戏界面(围墙),“ @ ”表示蛇头,“ * ”表示蛇身,“ # ”表示食物。通过向控制终端输入"a"、“s”、“w”、"d"分别表示贪吃蛇向左、向下、向上、向右移动,食物为随机出现(同一时刻只有一个食物出现),每吃掉一块食物,蛇的移动速度加快且游戏分数+10,若蛇撞到墙或吃到自身会导致游戏结束并打印游戏分数在终端上。

在这里插入图片描述

一、定义结构体对象

该游戏可划分为俩个对象,“贪吃蛇”和“食物”对象
而“贪吃蛇”对象 又可划分为“一节蛇头”和“多节蛇身”

1. 定义蛇身结构体

struct BODY {int X;   //x 和 y 表示蛇身的一个位置点(坐标)int Y;
};

2. 定义蛇对象
其中 body[0]为蛇头,其余都表示蛇身

struct SNAKE {struct BODY body[WIDE * HIGH];    //WIDE和HIGH表示游戏界面的宽和高int size;
}snake;

3. 定义食物对象

struct FOOD {int X;    //表示食物的位置点int Y;
}food;

二、游戏初始化

1. 蛇初始化

void initSnake(void) {snake.size = 2;snake.body[0].X = WIDE / 2;		 //蛇头初始化snake.body[0].Y = HIGH / 2;snake.body[1].X = WIDE / 2 - 1;  //蛇的一节身体初始化snake.body[1].Y = HIGH / 2;return;
}

2. 食物初始化

void initFood(void) {food.X = rand() % WIDE;  food.Y = rand() % HIGH;  return;
}

3. 围墙初始化

//画墙
void initWall(void) {for (size_t i = 0; i <= HIGH; i++){for (size_t j = 0; j <= WIDE; j++){if (j == WIDE)cout << "|";else if (i == HIGH)cout << "_";elsecout << " ";}cout << endl;}
}

4. 界面初始化

void initUI(void) {COORD coord = {0};         //光标移动的位置//画蛇for (size_t i = 0; i < snake.size; i++){coord.X = snake.body[i].X;coord.Y = snake.body[i].Y;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);if(i==0)putchar('@');else putchar('*');}//去除蛇尾coord.X = lastX;coord.Y = lastY;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);putchar(' ');//画食物coord.X = food.X;coord.Y = food.Y;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);putchar('#');
}

三、逻辑编程

1. 启动游戏

void playGame(void) {char key = 'd';//判断蛇撞墙while (snake.body[0].X >= 0 && snake.body[0].X < WIDE&& snake.body[0].Y >= 0 && snake.body[0].Y < HIGH) {initUI();  //更新蛇//接收用户按键输入if (_kbhit()) {     //为真时,说明用户按下按键   _kbhit()不阻塞判断用户输入key = _getch();   //                         _getch()不回显读取一个字符}switch (key) {case 'w':	kx = 0;  ky = -1; break;case 's':	kx = 0;  ky = +1; break;case 'a':	kx = -1; ky = 0;  break;case 'd':	kx = +1; ky = 0;  break;default:	break;}//蛇头撞身体 蛇头==任一一节身体for (size_t i = 1; i < snake.size; i++){if (snake.body[0].X == snake.body[i].X && snake.body[0].Y == snake.body[i].Y)return;    //游戏结束}//蛇头撞食物if (snake.body[0].X == food.X && snake.body[0].Y == food.Y) {initFood();     //食物消失		snake.size++;   //身体增长score += 10;    //加分sleepSecond -= 25;//加速}//存储蛇尾坐标lastX = snake.body[snake.size - 1].X;lastY = snake.body[snake.size - 1].Y;//蛇移动,前一节身体给后一节身体赋值for (size_t k = snake.size - 1; k > 0; k--){snake.body[k].X = snake.body[k - 1].X;snake.body[k].Y = snake.body[k - 1].Y;}snake.body[0].X += kx;   //蛇头坐标根据用户按键 修改snake.body[0].Y += ky;Sleep(sleepSecond);}return;
}

2. 打印成绩

void showScore(void) {//将光标默认位置移动至 不干扰游戏的位置COORD coord;coord.X = 0;coord.Y = HIGH + 2;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);cout << "Game Over!!!" << endl;cout << "成绩为:" << score << endl<<endl<<endl;
}

3. main函数

int main(void) {//去除光标CONSOLE_CURSOR_INFO cci;cci.dwSize = sizeof(cci);cci.bVisible = FALSE;  //设置为false则光标不可见SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cci);srand(time(NULL));  //播种随机数种子initWall();      //画墙initSnake();   //初始化蛇initFood();    //初始化食物initUI();      //画蛇和食物playGame();   //启动游戏showScore();  //打印分数system("pause");return 0;
}

四、细节处理

在该游戏的制作过程中,有以下几个方面的细节处理:

  • 1. 绘画问题
    每绘画蛇和食物图像时,都需要将光标移动到指定地方才能成功绘画。
    COORD 为光标移动处理结果体
COORD coord;
coord.X = snake.body[i].X;
coord.Y = snake.body[i].Y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
  • 2. 去除光标闪烁问题
    CONSOLE_CURSOR_INFO 为光标显示处理结构体
CONSOLE_CURSOR_INFO cci;    
cci.dwSize = sizeof(cci);
cci.bVisible = FALSE;  //设置为false则光标不可见
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cci);
  • 3. 蛇尾隐藏
    蛇每吃掉一块食物,蛇身便会增长一节,急需对蛇尾做隐藏处理
//存储蛇尾坐标
lastX = snake.body[snake.size - 1].X;
lastY = snake.body[snake.size - 1].Y;coord.X = lastX;
coord.Y = lastY;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord); //移动光标
putchar(' '); //用“ ”覆盖蛇尾
  • 4. 接收用户按键输入
    _kbhit()不阻塞判断用户输入
    _getch()不回显读取一个字符
if (_kbhit()) {     //为真时,说明用户按下按键   key = _getch();                         
}
  • 5. 延迟
    若不对移动时进行Sleep处理,则蛇移动速度飞快,游戏一下就结束了。
Sleep(sleepSecond);

五、程序源码

若需程序源码可留言邮箱至评论区或直接私信 即可。

http://www.ds6.com.cn/news/61974.html

相关文章:

  • 创意做网站公司网络营销策略是什么
  • 做无障碍浏览网站各大免费推广网站
  • 青海做网站最近一周的新闻大事10条
  • 深圳网站建设美橙互联百度推广多少钱
  • 楼房平台设计重庆seo标准
  • 能制作网站的公司联系方式河南郑州最新消息今天
  • 电脑上不了建设厅网站抖音推广引流
  • 政府网站建设新华网产品推广宣传方案
  • 039 织梦云idc网站源码seo排名优化工具
  • 湖南网站开发站长工具seo推广
  • 樟树市建设局网站百度站长收录提交入口
  • 成都中小企业网站建设地推网推平台
  • 利用dreamweaver设计网页深圳seo公司助力网络营销飞跃
  • 用discuz做的网站营销服务机构
  • 苏州网站制作上海网站seo招聘
  • 上海网站推广策划市场推广方案怎么做
  • 交互型网站难做吗品牌营销活动策划方案
  • 商城微发布seo秘籍优化课程
  • 佛山市建设局网站成人大专
  • 几项措施政府网站集约化建设百度移动首页
  • 上饶专业做网站建设网络推广优化招聘
  • 为什么谷歌网站打不开市场营销一般在哪上班
  • 如何做网站网页费用朋友圈营销
  • 给网站做seo的必要性新泰网站设计
  • 网站建设费用取得专票会计分录网站搭建费用
  • wordpress 外链转内链 页面seo可以提升企业网站的
  • 怎么给网站做后台热搜榜百度
  • 烟台建设用地规划查询网站北京建站
  • 做那种的视频网站有哪些网络优化软件
  • phpcms 网站哪家网站优化公司好