#include <windows.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#include <cstring>
#include <cstdio>
#include <iostream>
#define  N 22
using namespace std;int gameover;int x1, y1; // 随机出米int x,y;long start;//=======================================
//类的实现与应用initialize
//=======================================//下面定义贪吃蛇的坐标类
class snake_position
{
public:int x,y;      //x表示行,y表示列snake_position(){};void initialize(int &);//坐标初始化};snake_position position[(N-2)*(N-2)+1]; //定义贪吃蛇坐标类数组,有(N-2)*(N-2)个坐标void snake_position::initialize(int &j)
{x = 1;y = j;
}//下面定义贪吃蛇的棋盘图class snake_map
{private:char s[N][N];//定义贪吃蛇棋盘,包括墙壁。int grade, length;int gamespeed; //前进时间间隔char direction; // 初始情况下,向右运动int head,tail;int score;bool gameauto;public:snake_map(int h=4,int t=1,int l=4,char d=77,int s=0):length(l),direction(d),head(h),tail(t),score(s){}void initialize();   //初始化函数void show_game();int updata_game();void setpoint();void getgrade();void display();};//定义初始化函数,将贪吃蛇的棋盘图进行初始化void snake_map::initialize()
{int i,j;for(i=1;i<=3;i++)s[1][i] = '*';s[1][4] = '#';for(i=1;i<=N-2;i++)for(j=1;j<=N-2;j++)s[i][j]=' '; // 初始化贪吃蛇棋盘中间空白部分for(i=0;i<=N-1;i++)s[0][i] = s[N-1][i] = '-'; //初始化贪吃蛇棋盘上下墙壁for(i=1;i<=N-2;i++)s[i][0] = s[i][N-1] = '|'; //初始化贪吃蛇棋盘左右墙壁
}//============================================
//输出贪吃蛇棋盘信息void snake_map::show_game(){system("cls"); // 清屏int i,j;cout << endl;for(i=0;i<N;i++){cout << '\t';for(j=0;j<N;j++)cout<<s[i][j]<<' '; // 输出贪吃蛇棋盘if(i==2) cout << "\t等级:" << grade;if(i==6) cout << "\t速度:" << gamespeed;if(i==10) cout << "\t得分:" << score << "分" ;if(i==14) cout << "\t暂停:按一下空格键" ;if(i==18) cout << "\t继续:按两下空格键" ;cout<<endl;}
}//输入选择等级
void snake_map::getgrade()
{cin>>grade;while( grade>7 || grade<1 ){cout << "请输入数字1-7选择等级,输入其他数字无效" << endl;cin >> grade;}switch(grade){case 1: gamespeed = 1000;gameauto = 0;break;case 2: gamespeed = 800;gameauto = 0;break;case 3: gamespeed = 600;gameauto = 0;break;case 4: gamespeed = 400;gameauto = 0;break;case 5: gamespeed = 200;gameauto = 0;break;case 6: gamespeed = 100;gameauto = 0;break;case 7: grade = 1;gamespeed = 1000;gameauto = 1;break;}}//输出等级,得分情况以及称号void snake_map::display()
{cout << "\n\t\t\t\t等级:" << grade;cout << "\n\n\n\t\t\t\t速度:" << gamespeed;cout << "\n\n\n\t\t\t\t得分:" << score << "分" ;}//随机产生米
void snake_map::setpoint()
{srand(time(0));do{x1 = rand() % (N-2) + 1;y1 = rand() % (N-2) + 1;}while(s[x1][y1]!=' ');s[x1][y1]='*';
}char key;int snake_map::updata_game()
{gameover = 1;key = direction;start = clock();while((gameover=(clock()-start<=gamespeed))&&!kbhit());//如果有键按下或时间超过自动前进时间间隔则终止循环if(gameover){getch();key = getch();}if(key == ' '){while(getch()!=' '){};//这里实现的是按空格键暂停,按空格键继续的功能,但不知为何原因,需要按两下空格才能继续。这是个bug。}elsedirection = key;switch(direction){case 72: x= position[head].x-1; y= position[head].y;break; // 向上case 80: x= position[head].x+1; y= position[head].y;break; // 向下case 75: x= position[head].x; y= position[head].y-1;break; // 向左case 77: x= position[head].x; y= position[head].y+1; // 向右}if(!(direction==72||direction==80||direction==75 ||direction==77))   // 按键非方向键gameover = 0;else if(x==0 || x==N-1 ||y==0 || y==N-1)   // 碰到墙壁gameover = 0;else if(s[x][y]!=' '&&!(x==x1&&y==y1))    // 蛇头碰到蛇身gameover = 0;else if(x==x1 && y==y1){ // 吃米,长度加1length ++;if(length>=8 && gameauto){length -= 8;grade ++;if(gamespeed>=200)gamespeed -= 200; // 改变贪吃蛇前进速度elsegamespeed = 100;}s[x][y]= '#';  //更新蛇头s[position[head].x][position[head].y] = '*'; //吃米后将原先蛇头变为蛇身head = (head+1) % ( (N-2)*(N-2) );   //取蛇头坐标position[head].x = x;position[head].y = y;show_game();gameover = 1;score += grade*20;  //加分setpoint();   //产生米}else{ // 不吃米s[position[tail].x][position[tail].y]=' ';//将蛇尾置空tail= (tail+1) % ( (N-2) * (N-2) );//更新蛇尾坐标s[position[head].x][position[head].y]='*';  //将蛇头更为蛇身head= (head+1) % ( (N-2) * (N-2) );position[head].x = x;position[head].y = y;s[position[head].x][position[head].y]='#'; //更新蛇头gameover = 1;}return gameover;}
//====================================
//主函数部分
//====================================
int main()
{char ctn = 'y';int nodead;cout<<"\n\n\n\n\n\t\t\t 欢迎进入贪吃蛇游戏!"<<endl;//欢迎界面;cout<<"\n\n\n\t\t\t 按任意键马上开始。。。"<<endl;//准备开始;;getch();while( ctn=='y' ){system("cls"); // 清屏snake_map snake;snake.initialize();cout << "\n\n请输入数字选择游戏等级:" << endl;cout << "\n\n\n\t\t\t1.等级一:速度 1000 \n\n\t\t\t2.等级二:速度 800 \n\n\t\t\t3.等级三:速度 600 ";cout << "\n\n\t\t\t4.等级四:速度 400 \n\n\t\t\t5.等级五:速度 200 \n\n\t\t\t6.等级六:速度 100 \n\n\t\t\t7.自动升级模式" << endl;snake.getgrade();//获取等级for(int i=1;i<=4;i++){position[i].initialize(i);//初始化坐标}snake.setpoint();  // 产生第一个米do{snake.show_game();nodead = snake.updata_game();}while(nodead);system("cls"); //清屏cout << "\n\n\n\t\t\t\tGameover!\n\n"<<endl;snake.display();//输出等级/得分情况cout << "\n\n\n\t\t    是否选择继续游戏?输入 y 继续,n 退出" << endl;cin >> ctn;}return 0;
}

贪吃蛇大作战【C++游戏】相关推荐

  1. 基于Java实现的贪吃蛇大作战小游戏

    贪吃蛇大作战小游戏 整体思路与架构 本项目主要分为三个部分,即UI界面.游戏逻辑与网络传输. UI界面部分,主要是为了实现不同界面之间的切换.包括了注册登陆窗口(loginFrame)与游戏主窗口(G ...

  2. Java实现贪吃蛇大作战小游戏(完整教程+源码)额外实现积分和变速功能

    大家好,我是黄小黄同学!今天给大家带来的是小项目是 基于Java+Swing+IO流实现 的贪吃蛇大作战小游戏.实现了界面可视化.基本的吃食物功能.死亡功能.移动功能.积分功能,并额外实现了主动加速和 ...

  3. JAVA 实现《贪吃蛇大作战》游戏|CSDN创作打卡

    前言 贪吃蛇(也叫做贪食蛇)游戏是一款休闲益智类游戏,有PC和手机等多平台版本.既简单又耐玩.该游戏通过控制蛇头方向吃东西,从而使得蛇变得越来越长. 本程序是通过java的swing来实现<贪吃 ...

  4. 贪吃蛇大作战类游戏的实现

    贪吃蛇大作战类游戏的实现 前段时间玩了一个叫做贪吃蛇大作战的手机游戏,一下子就喜欢上了,然后就有了尝试实现的想法. 制作的平台环境:vs2012/cocos2dx3.8.1/C++ 关于贪吃蛇游戏的了 ...

  5. 【经典游戏】贪吃蛇大作战java游戏代码讲解

    <贪吃蛇大作战>一个简单到不行的游戏,也不知道怎么就火了.反正一款游戏火了,各路媒体.专家总能说出种种套路来,所以我就不发表意见了.不过这实在是一个挺好实现的游戏,于是一时技痒,拿 jav ...

  6. laya游戏开发之贪吃蛇大作战(一)

    laya游戏开发之贪吃蛇大作战 一.背景 二.引擎选择 三.整体架构 3.1 玩法分析 3.2 游戏架构 3.3 技术选型 一.背景 需要快速实现一个贪吃蛇的 demo 以验证功能,非传统贪吃蛇玩法, ...

  7. 【项目实战】轻松实现C/C++大作业:贪吃蛇大作战游戏!

    这是一个贪吃蛇大作战类游戏,修改特性为 AI 不互杀: 该程序有四个类:蛇基类 SnakeBase,玩家类 Player,AI 类,Game 类:SnakeBase 和 AI 均继承自 SnakeBa ...

  8. python 贪吃蛇大作战_Python实现贪吃蛇大作战

    本文给大家分享的是一个使用cocos2d-python游戏引擎库制作出来的贪吃蛇大作战的游戏代码,基于Python 2.7 和 cocos2d 库,有需要的小伙伴可以参考下 感觉游戏审核新政实施后,国 ...

  9. C语言高仿贪吃蛇大作战,800行代码就能实现,结尾有源码~

    这是一个贪吃蛇大作战类游戏,修改特性为 AI 不互杀: 该程序有四个类:蛇基类 SnakeBase,玩家类 Player,AI 类,Game 类: SnakeBase 和 AI 均继承自 SnakeB ...

  10. java 贪吃蛇穿越边界,刨除可耻的山寨,《贪吃蛇大作战》是如何吸引那么多玩家...

    经典游戏贪吃蛇想必大家都玩过,你能想出这么经典的游戏要怎么创新才能比原作更好玩吗?贪吃蛇大作战就做到了,而且表现异常亮眼,这几天都登上免费榜第一的位置.一时间涌现出虫虫大作战.蛇蛇大作战.贪吃蛇等等产 ...

最新文章

  1. 9.spark core之共享变量
  2. 才知道创建数据表的后面int(M)的m居然和存储大小没有关系
  3. Tomcat unable to start within 45 seconds.
  4. 牛津大学的研究人员首次在人体植入“闭环”生物电子研究系统
  5. python什么时候诞生的_关于RFC 3339日期时间:在Python中产生timestamp
  6. AtCoder AGC032E Modulo Pairing (二分、贪心结论)
  7. Python里那些可爱的游戏模块们
  8. 【struts2】文件上传下载—struts2实现
  9. 浏览器打印设置横向打印_爱普生打印机无线连接设置
  10. C# 调用命令行,参数有空格
  11. 千头万绪:从一道面试题看数据库性能和安全的方方面面
  12. java中的fd是什么意思_java中关键字和保留字分别是什么意思
  13. IE10、IE11解决不能播放Flash的问题!
  14. Android studio R文件丢失或错误解决方法
  15. python 3全栈开发-面向对象之绑定方法(classmethod与staticmethod的区别)、多态、封装的特性property...
  16. JavaScript回顾与学习——运算符
  17. pands库中的一些函数用法
  18. oppok3如何刷机_oppok3刷机方法
  19. linux如何将两个文件拆分,linux下用split命令将一个大的文件拆分成若干小文件
  20. 【全网最简单】给朋友- 制作,微信公众号推送教程

热门文章

  1. 竞争定位、价值主张及企业市场细分
  2. 解决安卓应用程序未安装的三种方法
  3. 智慧书-永恒的处世经典格言:241-280
  4. 2012年重要的软件开发发展
  5. MOOC 念整数(C语言)
  6. autohotkey入门_AutoHotkey-入门
  7. SpringGateway网关
  8. 王者荣耀微信一区的服务器没了,王者荣耀微信区不出现保存回放 | 手游网游页游攻略大全...
  9. 天猫商品详情接口,天猫商品优惠券接口,天猫api接口,天猫价格监控接口,天猫比价接口,品牌维权接口,天猫销量api接口,接口代码可对接数据分析业务,品牌维权,比价业务,行业分析业务接口代码分享
  10. Google 手机地图-中国版~