借鉴了很多网上大神们的代码,给了我思路和制作方法。

这个版本是最为简单的贪吃蛇,单纯在运行框中运行。最为基础的。

这个版本还有一个问题,由于每次都要刷新屏幕,结果屏幕一闪一闪的,特别不舒服。现在正在努力改进中

#include<iostream>
#include<windows.h>
#include<time.h>
#include<conio.h>
using namespace std;
int i,j,dengji,speed,grade,fenshu,head,weiba;
void shuaxin(char ditu[22][22])
{
    system("cls");
    for(i=0;i<22;i++)
    {
       cout<<"  ";
       for(j=0;j<22;j++)

cout<<ditu[i][j]<<" ";
           if(i==0)
             cout<<"你现在的等级为:"<<dengji;
           if(i==3)
              cout<<"自动前进时间间隔为"<<speed;
           if(i==6)
               cout<<"你的得分为"<<fenshu;

cout<<endl;
    }
}
int main()
{
    //地图绘制
      //这一部分是地图的构建
    char ditu[22][22];     //  贪吃蛇棋盘是一个二维数组(如22*22,包括墙壁)
    int i,j;
    for(i=1;i<=20;i++)
        for(j=1;j<=20;j++)
            ditu[i][j]=' ';     //     初始化贪吃蛇棋盘中间空白部分
    for(i=0;i<=20;i++)
        ditu[0][i] = ditu[21][i] = '-';      //初始化贪吃蛇棋盘上下墙壁
    for(i=1;i<=28;i++)
        ditu[i][0] = ditu[i][21] = '|';      //初始化贪吃蛇棋盘左右墙壁

//蛇的绘制
    int x_she[100],y_she[100];//分别代表x和y的坐标
    for(i=0;i<4;i++)  //初始长度为4
    {
        x_she[i]=1;//都在第一行
        y_she[i]=i+1; //横着排
    }
        head=3;
        weiba=0;//头和尾巴的位置,方便以后进行移动!!!!
        for(i=1;i<=3;i++)
            ditu[1][i]='*';  //以下两行则是在地图上实现蛇的初始位置
        ditu[1][4]='#';

//食物的自动生成
    int x1,y1;
    srand(time(0));//产生随机数
    do
    {
        x1=rand()%22+1;   //随机产生的数对地图取余再加1;
        y1=rand()%22+1;

}while(ditu[x1][y1]!=' ');  //直到合理位置
    ditu[x1][y1]='*';  //在地图上表现;

//开始
     int speed;
     cout<<"请选择难度\n1:简单\n2:中等\n3:困难\n4:炼狱\n";
     cin>>speed;
     if(speed==1)
        speed=100;
     else if(speed==2)
        speed=400;
     else if(speed==3)
        speed=200;
     else if(speed==4)
        speed=1;
     cout<<"\n\n\t\t贪吃蛇游戏即将开始 !"<<endl;
     long start;
     int dengji=1;//初始等级
     int length=4;//初始长度
     //开始倒计时
     for(i=3;i>=0;i--)//i就是倒计时
     {
         start=clock();
         while(clock()-start<=1000);  //刷新页面的倒计时
              system("cls");
         if(i>0)
            cout<<"\n\n\t\t进入倒计时:"<<i<<endl;
         else
            shuaxin(ditu); //刷新页面,打印地图
     }
     /正式开始操作
     int timeover;
     char direction=77;//默认向右出发
     int x,y;
     while(1)
     {
         timeover=1;
         start=clock(); //随机产生
          while((timeover=(clock()-start<=speed))&&!kbhit());//时间超过了游戏速度,则自动前进
          if(timeover)
          {
              getch(); //不需要回车键的输入,用来操作游戏
              direction=getch();//!!一定要赋值
          }
          switch(direction)
          {
              case 72: x= x_she[head]-1; y= y_she[head];break;     // 向上
              case 80: x= x_she[head]+1; y= y_she[head];break;      // 向下
              case 75: x= x_she[head]; y= y_she[head]-1;break;      // 向左
              case 77: x= x_she[head]; y= y_she[head]+1;      //默认向右
          }

if(!(direction==72||direction==80||direction==75 ||direction==77))
           {   //  按键非方向键
                 cout << "\tGame over!" << endl;return 0;
           }
           if(x==0 || x==21 ||y==0 || y==21)
            {   // 碰到墙壁
                cout << "\tGame over!" << endl;return 0;
            }
           if(ditu[x][y]!=' '&&!(x==x1&&y==y1))
            { //   蛇头碰到蛇身
                cout << "\tGame over!" << endl;return 0;
            }
            if(x==x1&&y==y1) //吃到了食物
            {

fenshu++;
                length++;
                if(length>=8)
                {
                    length=length-8;
                    if(speed>=200)
                            speed=550-grade*50;
                }
                ditu[x][y]='#';//食物那个位置变成了头!
                ditu[x_she[head]][y_she[head]]='*';//原来头的位置变成了身子
                head=(head+1)%100; //头的位置刷新一下
                x_she[head]=x;
                y_she[head]=y;
                do  //在产生一个食物,方便刷新地图时一起出现
                {
                     x1=rand()%20+1;
                     y1=rand()%20+1;
                 }while(ditu[x1][y1]!=' ');

ditu[x1][y1]='*';
                 shuaxin(ditu);
             }
             else//没有吃到米,这个时很重要很重要的一部分.解答一个疑惑,很多人不明白为什么
                //转了弯,身子会沿着头的方向走,下面就是答案。因为头就是下一个的身子,一个连着一个
                //顺序不会变
             {
                 ditu[x_she[weiba]][y_she[weiba]]=' '; //前进了一步
                 weiba=(weiba+1)%100; //刷新尾巴
                ditu[x_she[head]][y_she[head]]='*'; //头变成了身子
                 head=(head+1)%100; //刷新尾巴
                 x_she[head]=x;//更新头
                 y_she[head]=y;
                 ditu[x_she[head]][y_she[head]]='#';
                 shuaxin(ditu);

}

}

}



C++实践 极简版本贪吃蛇小游戏相关推荐

  1. 蘑菇云「行空板Python入门教程」第六课:贪吃蛇小游戏

    在很久很久以前,手机屏幕都还是黑白的年代,有一款叫做"贪吃蛇"的游戏风靡了大街小巷,在那分辨率极低的屏幕上,几条扭扭曲曲的弧线似乎穿越了整个童年. 这节课上,就让我们用行空板来实现 ...

  2. python简易贪吃蛇小游戏任务书含代码

    目  录 第一章 绪论 1.1 开发的背景 1.2 开发的目的 1.3 开发的意义 1.4 开发工具简介 第二章 需求分析 (1) 利用方向键来改变蛇的运行方向. (2) 在随机的地方产生食物. (3 ...

  3. python 贪吃蛇小游戏代码_10分钟再用Python编写贪吃蛇小游戏

    Python编写贪吃蛇 前不久我们公众号发布了一篇C++编写贪吃蛇小游戏的推文,反响空前.看来大家对这类简单易上手小游戏还是很喜爱的. 恰逢2018年IEEE Spectrum编程语言排行榜新鲜出炉, ...

  4. 再来一次的C语言贪吃蛇小游戏(三)

    8.游戏的不同界面 为了便于实现主要功能,之前我们所有的状态控制都是放在游戏中,但实际上我们应该把这些状态控制抽离出来,通过菜单来控制,以便在不同游戏界面间切换. 菜单界面 游戏界面 排行榜 游戏结束 ...

  5. 基于C语言Ncurse库和链表的简单贪吃蛇小游戏

    参考:基于C语言Ncurse库和链表的简单贪吃蛇小游戏 作者:三速何时sub20 发布时间:2020-09-29 10:23:51 网址:https://blog.csdn.net/weixin_44 ...

  6. c语言小游戏 精简_一个简易的贪吃蛇小游戏C语言源码

    /* *程序名称:贪吃蛇v2.1 *程序描述:一个简易的贪吃蛇小游戏 *版本信息:v2.1 *v1.1版本更新:1:加入菜单选择项 *v1.2版本更新:1:修复菜单选择bug *v1.3班本更新:1: ...

  7. python快速实现简易贪吃蛇小游戏

    贪吃蛇(也叫做贪食蛇)游戏是一款休闲益智类游戏,有PC和手机等多平台版本.既简单又耐玩.该游戏通过控制蛇头方向吃蛋,从而使得蛇变得越来越长.  贪吃蛇游戏最初为单机模式,后续又陆续推出团战模式.赏金模 ...

  8. 用 typescript 做一个贪吃蛇小游戏

    typescript 做一个贪吃蛇小游戏 搭建环境 创建 tscofig.json 文件 配置如下 {"compilerOptions": {"target": ...

  9. JavaScript 进阶教程(2)---面向对象实战之贪吃蛇小游戏

    目录 1 引言 2 游戏地图 3 游戏对象 3.1 食物对象 3.2 小蛇对象 3.3 游戏对象 4 游戏的逻辑 4.1小蛇的移动 4.2 让蛇自己动起来 4.2.1 自动移动 4.2.2 自调用函数 ...

最新文章

  1. 2018-3-7 HDFS架构
  2. python商业爬虫_商业爬虫学习笔记day1
  3. Knockout应用开发指南(完整版) 目录索引
  4. 异常检测算法--Isolation Forest
  5. Anaconda 环境下 对Tushare进行测试
  6. 接上,进一步优化,LruCache缓存
  7. JS中全局对象的属性和方法
  8. 如何看待papi酱的个人平台papitube?
  9. c语言 srand time 0,c++ 随机数 srand(time(0)) 用法 | 求索阁
  10. java集合的添加方法_深入理解java集合框架之---------Arraylist集合 -----添加方法
  11. 蚂蚁金服OceanBase挑战TPCC|TPC-C基准测试之数据库事务引擎挑战
  12. Redis,真的不完美!
  13. HDU1829【种类并查集】
  14. java入门第二天如何使用Elipse
  15. js input输入框去空格
  16. c#二次开发明华URF-R330读写器读写问题解决方案
  17. 一款完整开源的物联网基础平台
  18. python猴子分桃_Python 五猴分桃.py问题解答代码
  19. Mac修改默认的电子邮箱客户端
  20. Python Windows发出警报声、蜂鸣器、声音报警

热门文章

  1. [backtrack教程]从零开始,教你如何破解WEP、WPA无线网络
  2. virbr0怎么关闭_kvm虚拟化关闭虚拟网卡virbr0的方法
  3. Word VBA中的光标操作
  4. plc服务器作用,工业控制系统以及PLC的简单介绍
  5. h5 使用canvas实现电子签名和图片的保存
  6. 萌新记一次在openEuler下安装VMware-Tools的失败经历
  7. java诺基亚nba,NBA“神器”大比拼 詹皇如三星邓肯似诺基亚
  8. 【第八课】用于三维建模的拍摄技巧(用手机、相机拍摄)
  9. 爬虫ip在使用中被封了如何解决 ?
  10. 竞赛——【蓝桥杯】2022年11月第十四届蓝桥杯模拟赛第一期Python