新手学习C语言编程,制作字符贪吃蛇小游戏

前沿技术

  C语言是面向过程的,而C++是面向对象的。C和C++的区别:

  C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制)。

  C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制。 所以C与C++的最大区别在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”。

  C与C++的最大区别:在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”,而就语言本身而言,在C中更多的是算法的概念。那么是不是C就不重要了,错!算法是程序设计的基础,好的设计如果没有好的算法,一样不行。而且,“C加上好的设计”也能写出非常好的东西。

  时代老是在前进

  代码如下:

  #include

  #include

  #include

  #include

  #include

  #define N 20

  #define M 40

  int foodx,foody;

  int positionx,positiony;

  int screen[N][M];

  int i,j;

  void start(int* length,int* vx,int* vy,int* score,int* rate){

  *rate=20;

  srand((unsigned)time(NULL));

  for(i=0;i

  for(j=0;j

  screen[i][j]=0;

  }

  }

  //初始化

  screen[0][0]=5;

  screen[0][1]=4;

  screen[0][2]=3;

  screen[0][3]=2;

  screen[0][5]=1;

  foodx=10;

  foody=10;

  screen[foody][foodx]=-1;

  positiony=0;

  positionx=5;

  *length=5;

  *vx=0;

  *vy=1;

  *score=0;

  }

  void show(int* score,int* rate){

  system("cls");

  printf("wasd²Ù×÷\n");

  for(i=-1;i<=N;i++){

  for(j=-1;j<=M;j++){

  if(i==-1

  i==N)

  putchar(-);

  else if(j==-1

  j==M)

  putchar(

  );

  else if(screen[i][j]>0)

  putchar(*);

  else if(screen[i][j]==-1)

  putchar(@);

  else

  putchar( );

  }

  putchar(\n);

  }

  printf("分数%d\n",*score);

  Sleep(20*(*rate));

  }

  void updatewithoutinput(int* length,int* vx,int* vy,int* score,int* rate){

  //配速

  int rank=0;

  rank=(*score>5)+(*score>10)+(*score>15)+(*score>20)+(*score>25);

  *rate=20-rank;

  //衰亡

  if(positionx==0&&*vx==-1)

  *score=-1;

  if(positionx==M-1&&*vx==1)

  *score=-1;

  if(positiony==0&&*vy==-1)

  *score=-1;

  if(positiony==N-1&&*vy==1)

  *score=-1;

  if(screen[positiony+*vy][positionx+*vx]>0)

  *score=-1;

  //挪动

  for(i=0;i

  for(j=0;j

  if(screen[i][j]>0)

  screen[i][j]++;

  }

  }

  for(i=0;i

  for(j=0;j

  if(screen[i][j]>*length)

  screen[i][j]=0;

  }

  }

  //前进

  for(i=0;i

  for(j=0;j

  if(screen[i][j]==2){

  positiony=i+*vy;

  positionx=j+*vx;

  screen[positiony][positionx]=1;

  }

  }

  }

  for(i=0;i

  for(j=0;j

  if(screen[positiony+*vy][positionx+*vx]==-1){

  screen[positiony+*vy][positionx+*vx]=0;

  (*length)++;

  (*score)++;

  foodx=rand()%M;

  foody=rand()%N;

  while(screen[foody][foodx]){

  foodx=rand()%M;

  foody=rand()%N;

  }

  screen[foody][foodx]=-1;

  }

  }

  }

  }

  void updatewithinput(int* vx,int* vy){

  char input;

  if(kbhit()){

  input=getch();

  if(input==a&&positionx>0&&(*vx)!=1){

  *vx=-1;

  *vy=0;

  }

  if(input==d&&positionx

  *vx=1;

  *vy=0;

  }

  if(input==w&&positiony>0&&(*vy)!=1){

  *vx=0;

  *vy=-1;

  }

  if(input==s&&positiony

  *vx=0;

  *vy=1;

  }

  if(input==q)

  system("pause");

  }

  }

  int main(){

  int length;

  int vx,vy;

  int score;

  int rate;

  begin:start(&length,&vx,&vy,&score,&rate);

  while(1){

  if(score==-1)

  goto begin;

  updatewithinput(&vx,&vy);

  updatewithoutinput(&length,&vx,&vy,&score,&rate);

  show(&score,&rate);

  }

  return 0;

  }

  贪吃蛇焦点的算法就是挪动。其实所有游戏都是如许,算法的难点都在更新这一步上。拿象棋来说,游戏轨则最关头的就是不合棋子的走法。

  仍是建立在坐标系上,我们将蛇分为一节一节的,将头编为1,蛇身为2,3,4......若是不去操控贪吃蛇,它就会不息向前,也就是有个不变的速度,我们只需保留这个速度,然后没个轮回去把持蛇前进。

  最为焦点的是把持编制。若是分化一下挪动过程的话,当前的蛇(网罗头)不才一个轮回就会变成蛇身,然后在前进标的目的加一个蛇头,再把蛇尾去掉。按照分化举措,我们可以将蛇团体+1,就变成了2,3,4......,然后把末了的坐标清零,再将前进标的目的的坐标赋值为1。建立在挪动算法的根本上蛇身伸长的就了然了,只需将上限+1即可。

  算法的思惟很简单,回忆一下高中物理题,求一根绳子被拉着举动做了若干好多功。在计较时我们将物理过程等效为取绳子结尾的一个个微元挪动到前端,保持中心的不变,如许就可以简化计较。运用在贪吃蛇中,我们就只需将蛇尾移到蛇头就行,分化一下就是去掉蛇尾,生成蛇头就ok了。

  这些是C/C++能做的

  服务器开发工程师、人工智能、云计算工程师、信息安全(黑客反黑客)、大数据 、数据平台、嵌入式工程师、流媒体服务器、数据控解、图像处理、音频视频开发工程师、游戏服务器、分布式系统、游戏辅助等

标签: 前沿技术