C++实现贪吃蛇游戏的详细步骤及实战演示
导读:收集整理的这篇文章主要介绍了C++实现贪吃蛇游戏的详细步骤及实战演示,觉得挺不错的,现在分享给大家,也给大家做个参考。学习C++过程中做的一个小程序,比较简单,只实现了贪吃蛇小游戏最基本的功能。上传代码作为学习的记录,同时也为其他同学提供作...
收集整理的这篇文章主要介绍了C++实现贪吃蛇游戏的详细步骤及实战演示,觉得挺不错的,现在分享给大家,也给大家做个参考。学习C++过程中做的一个小程序,比较简单,只实现了贪吃蛇小游戏最基本的功能。上传代码作为学习的记录,同时也为其他同学提供作为一个小小的参考。实现环境为:Microsoft Visual C++6.0集成开发环境 。#includeiostream> #includecmath> #includecstdlib> #includecstdio> #includectime> #includeconio.h> #includewindows.h> using namespace std; /*光标定位*/HANDLE hout = GetStdHandle(STD_OUTPUT_HANDLE); COORD coord; void locate(int x, int y){ coord.X = y; coord.Y = x; SetConsoleCursorPosITion(hout,coord); } ; /*光标隐藏*/void hide(){ CONSOLE_CURSOR_INFO cursor_info = { 1,0} ; //bVisible=0;隐藏光标 SetConsoleCursorInfo(hout, & cursor_info); //获取光标状态} /*生成随机数*/double random(double start, double end){ return start + (end - start)*rand()/(RAND_MAX+1.0); //生成一个数,大于等于start,小于end;} /*定义地图的长和宽*/int m, n; /*定义蛇 的长度,坐标,方向,食物的位置*/struct node{ int x, y; } snake[1000]; //蛇的坐标int snake_length, dir; //蛇的长度,方向node food; int direct[4][2] = { { -1,0} , { 1,0} , { 0,-1} , { 0,1} } ; //食物的位置/*输出围墙:一个矩形框*/void PRint_wall(){ //输出第一行 “----------” cout " "; for (int i = 1; i = n; i++) { cout "-"; } cout endl; //输出第一列“|”,中间输入空格,最后一列输出“|” for (int j = 0; j = m-1; j++) { cout "|"; for (int i = 1; i = n; i++) cout " "; cout "|" endl; } cout " "; //输出最后一行“----------” for (int i = 1; i = n; i++) cout "-"; } /*首次输出蛇,其中snake[0]代表头部*///蛇的外型:“@*****”void print_snake(){ locate(snake[0].x,snake[0].y); cout "@"; for (int i = 1; i snake_length - 1; i++) { locate(snake[i].x, snake[i].y); cout "*"; } } /*判断是否撞墙或者头部是否碰到身体的任意一个部位,碰到则游戏失败*/bool is_correct(){ if (snake[0].x == 0 || snake[0].y == 0 || snake[0].x == m + 1 || snake[0].y == n + 1) return false; //头部碰到边缘 for (int i = 1; i = snake_length - 1; i++) if (snake[0].x == snake[i].x & & snake[0].y == snake[i].y)return false; //头部碰到身体的任意一个部位 return true; } /*随机生成食物的位置*/bool print_food(){ srand((unsigned)time(0)); //随机种子 bool e; while (1) { e = true; int i = (int)random(0,m)+1; int j = (int)random(0,n)+1; food.x = i; food.y = j; //食物的位置随机 for (int k = 0; k = snake_length - 1; k++) //食物不能出现在蛇的身体的任意位置处 { if (snake[k].x == food.x & & snake[k].y == food.y) { e= false; break; } } if (e)break; } //在食物的位置处标记,食物符号为“$”; locate(food.x,food.y); cout "$"; return true; } /*蛇的前进*/bool go_ahead(){ node tmp; bool e = false; tmp = snake[snake_length-1]; //蛇尾 for (int i = snake_length - 1; i > = 1; i--) { snake[i] = snake[i - 1]; //后移一位 } snake[0].x += direct[dir][0]; snake[0].y += direct[dir][1]; locate(snake[1].x, snake[1].y); //定位到头部的后一位 cout "*"; /*吃到食物*/ if (snake[0].x == food.x& & snake[0].y == food.y) { snake_length++; e = true; snake[snake_length - 1] = tmp; } /*输出此时蛇状态*/ if (!e) { locate(tmp.x, tmp.y); cout " "; } else print_food(); locate(snake[0].x, snake[0].y); cout "@"; /*** 如果自撞 ***/ if (!is_correct()) { System("cls"); cout "You lose!" endl "Length: " snake_length endl; return false; } return true; } int main(){ //游戏提示: cout "--------------------贪吃蛇---------------------" endl; cout "请先输入两个数,表示地图大小.要求长宽均不小于10." endl; cout "请注意窗口大小,以免发生错位.建议将窗口调为最大." endl; cout "再选择难度.请在1-10中输入1个数,1最简单,10则最难" endl; cout "然后进入游戏画面,以方向键控制方向.祝你游戏愉快!" endl; cout "-----------------------------------------------" endl; cin > > m > > n; if (m 10 || n 10 || m> 25 || n> 40) { cout "ERROR" endl; system("pause"); return 0; } //输入难度系数:1-10; int hard; cin > > hard; if (hard = 0 || hard > 100) { cout "ERROR" endl; system("pause"); return 0; } //数据初始化:蛇的位置,长度,方向 snake_length = 5; //长度 clock_t a, b; char ch; double hard_len; for (int i = 0; i = 4; i++)//位置 { snake[i].x = 1; snake[i].y = 5 - i; } dir = 3; //方向 //输出原始地图、食物和蛇 system("cls"); hide(); print_wall(); print_food(); print_snake(); //在(0,m+2)出显示长度: locate(m + 2, 0); cout "Now Length:"; //开始游戏 while (1) { /*难度随长度的增加而提高*/ hard_len = (double)snake_length / (double)(m*n); /*调节时间,单位是ms*/ a = clock(); while (1) { b = clock(); if (b - a > = (int)(400 - 30 * hard)*(1 - sqrt(hard_len)))break; } //接收键盘输入的方向//https://blog.csdn.net/wenweimin/article/details/105561 if (_kbhit()) { ch = _getch(); if (ch == -32) { ch = _getch(); switch (ch) { case 72:if (dir == 2 || dir == 3)dir = 0; break; case 80:if (dir == 2 || dir == 3)dir = 1; break; case 75:if (dir == 0 || dir == 1)dir = 2; break; case 77:if (dir == 0 || dir == 1)dir = 3; break; } } } //前进 if (!go_ahead())break; //输出此时的长度 locate(m + 2, 12); cout snake_length; } system("pause"); return 0; }
相关推荐:
H5的canvas实现贪吃蛇小游戏
js贪吃蛇游戏实现思路和源码_javascript技巧
Java游戏项目:拼图游戏的开发视频教程
以上就是C++实现贪吃蛇游戏的详细步骤及实战演示的详细内容,更多请关注其它相关文章!
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: C++实现贪吃蛇游戏的详细步骤及实战演示
本文地址: https://pptw.com/jishu/593121.html