C++ vector容器实现贪吃蛇小游戏
本文实例为大家分享了C++vector容器实现贪吃蛇,供大家参考,具体内容如下
使用vector容器实现贪吃蛇简化了很多繁琐操作,且相比之前我的代码已经做到了尽量的简洁
技术环节:
编译环境:windowsVS2019
需求:
控制贪吃蛇吃食物,吃到一个食物蛇身变长一节,得分增加,撞墙或撞自己则游戏结束。
思路:
创建一个vector容器,容器内存储蛇的每节身体的结构变量,结构变量中保存蛇身体的xy坐标,通过使用vector成员方法不断添加和删除容器中的数据,实现蛇坐标的规律移动,吃到食物等时执行对应操作。
在代码注释中标注了每一步是怎么实现的。
注意:
由于编译器原因程序中_kbhit()和_getch()函数可能在其他编译器上编译会出现错误,解决办法是去掉函数前面的“_”。
运行效果:
#include#include #include #include #include usingnamespacestd; voidgotoxy(intx,inty);//光标定位 //食物类 classFood { private: intm_x; intm_y; public: voidrandfood()//随机产生一个食物 { srand((int)time(NULL)); L1: m_x=rand()%(85)+2; m_y=rand()%(25)+2; if(m_x%2)//如果食物的x坐标不是偶数则重新确定食物的坐标 gotoL1; gotoxy(m_x,m_y);//在确认好的位置输出食物 cout<<"★"; } intgetFoodm_x()//返回食物的x坐标 { returnm_x; } intgetFoodm_y()//返回食物的y坐标 { returnm_y; } }; //蛇类 classSnake { private: //蛇坐标结构 structSnakecoor { intx; inty; }; //蛇容器 vector snakecoor; //判断和改变方向函数 voiddegdir(Snakecoor&nexthead)//参数:新蛇头结构变量、蛇坐标容器 { staticcharkey='d';//静态变量防止改变移动方向后重新改回来 if(_kbhit())//改变蛇前进的方向 { chartemp=_getch(); switch(temp)//如果临时变量的值为wasd中的一个,则赋值给key { default: break; case'w': case'a': case's': case'd': //如果temp的方向和key的方向不相反则赋值 if((key=='w'&&temp!='s')||(key=='s'&&temp!='w')||\ (key=='a'&&temp!='d')||(key=='d'&&temp!='a')) key=temp; } } switch(key)//根据key的值确定蛇的移动方向 { case'd': nexthead.x=snakecoor.front().x+2;//新的蛇头的头部等于容器内第一个数据(旧蛇头)x坐标+2 nexthead.y=snakecoor.front().y; break; case'a': nexthead.x=snakecoor.front().x-2; nexthead.y=snakecoor.front().y; break; case'w': nexthead.x=snakecoor.front().x; nexthead.y=snakecoor.front().y-1; break; case's': nexthead.x=snakecoor.front().x; nexthead.y=snakecoor.front().y+1; } } //游戏结束时需要做的事情 voidfinmatt(constintscore) { system("cls"); gotoxy(40,14); cout<<"游戏结束"; gotoxy(40,16); cout<<"得分:"< =88||snakecoor[0].x<0||snakecoor[0].y>=28||snakecoor[0].y<0) finmatt(score); //撞到自己情况 for(inti=1;i =0;i--)//反向创建初始蛇身,初始蛇头朝东 { temp.x=16+(i<<1);//偶数 temp.y=8; snakecoor.push_back(temp); } } //蛇运动主要函数 voidmove(Food&food,int&score) { Snakecoornexthead;//新蛇头变量 degdir(nexthead);//判断和改变蛇前进的方向 snakecoor.insert(snakecoor.begin(),nexthead);//将新的蛇头插入容器头部 gotoxy(0,0); cout<<"得分:"< 不足之处:
因为初学C++,所以程序中肯定还有一些不规范或不合理的地方。
关于C++小游戏的更多精彩内容请点击专题:《C++经典小游戏》学习了解
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。