当前位置:  编程技术>c/c++/嵌入式

基于C语言实现的贪吃蛇游戏完整实例代码

    来源: 互联网  发布时间:2014-10-26

    本文导语:  本文以实例的形式讲述了基于C语言实现的贪吃蛇游戏代码,这是一个比较常见的游戏,代码备有比较详细的注释,对于读者理解有一定的帮助。 贪吃蛇完整实现代码如下: #include #include #include #include #define NULL 0 #define...

本文以实例的形式讲述了基于C语言实现的贪吃蛇游戏代码,这是一个比较常见的游戏,代码备有比较详细的注释,对于读者理解有一定的帮助。

贪吃蛇完整实现代码如下:

#include 
#include 
#include 
#include 
#define NULL 0
#define UP  18432
#define DOWN 20480
#define LEFT 19200
#define RIGHT 19712
#define ESC  283
#define ENTER 7181 
struct snake
{int centerx;
 int centery;
 int newx;
 int newy;
 struct snake *next;
};
struct snake *head;

int grade=60;                     /*控制速度的*******/
int a,b;                        /* 背静遮的 位置*/
void *far1,*far2,*far3,*far4;             /* 蛇身指针 背静遮的指针 虫子*/
int size1,size2,size3,size4;              /* **全局变量**/
int ch=RIGHT;                     /**************存按键 开始蛇的方向为RIGHT***********/
int chy=RIGHT; 
int flag=0;                       /*********判断是否退出游戏**************/
int control=4;                     /***********判断上次方向和下次方向不冲突***/
int nextshow=1;                     /*******控制下次蛇身是否显示***************/
int scenterx;                      /***************随即矩形中心坐标***************/
int scentery;
int sx;                         /*******在a b 未改变前 得到他们的值 保证随机矩形也不在此出现*******/
int sy;                
 
/************************蛇身初始化**************************/ 
void snakede()
{
 struct snake *p1,*p2;
 head=p1=p2=(struct snake *)malloc(sizeof(struct snake)); 
 p1->centerx=80;
 p1->newx=80;
 p1->centery=58;
 p1->newy=58;
 p1=(struct snake *)malloc(sizeof(struct snake));
 p2->next=p1;
 p1->centerx=58;
 p1->newx=58;
 p1->centery=58;
 p1->newy=58;
 p1->next=NULL;
}
/*******************end*******************/ 
void welcome()            /*************游戏开始界面 ,可以选择 速度**********/                
{ 
 int key;
 int size;
 int x=240;
 int y=300;
 int f;
 void *buf; 
 setfillstyle(SOLID_FILL,BLUE);
 bar(98,100,112,125);
 setfillstyle(SOLID_FILL,RED);
 bar(98,112,112,114);
 setfillstyle(SOLID_FILL,GREEN);
 bar(100,100,110,125);
 size=imagesize(98,100,112,125);
 buf=malloc(size);
 getimage(98,100,112,125,buf);
 cleardevice();

 setfillstyle(SOLID_FILL,BLUE);
 bar(240,300,390,325);
 outtextxy(193,310,"speed:");
 setfillstyle(SOLID_FILL,RED);
 bar(240,312,390,314);
 setcolor(YELLOW);
 outtextxy(240,330,"DOWN");
 outtextxy(390,330,"UP");
 outtextxy(240,360,"ENTER to start..." ); 
 outtextxy(270,200,"SNAKE");
 fei(220,220);
 feiyang(280,220);
 yang(340,220); 
 putimage(x,y,buf,COPY_PUT); 
 setcolor(RED);
 rectangle(170,190,410,410);
 while(1)
 { if(bioskey(1))                      /********8选择速度部分************/
  key=bioskey(0);
  switch(key)
  {  
    case ENTER:
   f=1;
   break;
    case DOWN:
    if(x>=240)
    { putimage(x-=2,y,buf,COPY_PUT);
   grade++;
   key=0;
   break;
    }
 case UP:
    if(xcenterx&&scentery==p->centery||scenterx==sx&&scentery==sy)
  {show=0;
  jump=1;
  break;
  }
    else
  p=p->next; 
   if(jump==1)
  break;
  }
 if(show==1)
  {putimage(scenterx-11,scentery-11,far3,COPY_PUT);
  nextshow=0;
  break;
  }

 }
}

/***********过关动画**************/ 
void donghua()
{ int i;
 cleardevice();
 setbkcolor(BLACK);
 randomize();
 while(1)
 {for(i=0;inewy;           /************记录最后节点的坐标************/
  sx=a;
  sy=b;
  }
  p1->newx=p2->centerx;
  p1->newy=p2->centery;
  p2=p1;
 }
p1=head;
while(p1!=NULL)
{p1->centerx=p1->newx;
 p1->centery=p1->newy;
 p1=p1->next;
}

/********判断按键方向*******/ 
if(bioskey(1))
 { ch=bioskey(0);
   if(ch!=RIGHT&&ch!=LEFT&&ch!=UP&&ch!=DOWN&&ch!=ESC)   /********chy为上一次的方向*********/
   ch=chy;
 } 
 switch(ch)
 {
  case LEFT: if(control!=4)
 {head->newx=head->newx-22;
         head->centerx=head->newx;
  control=2;
  if(head->newxnewx=head->newx+22;
          head->centerx=head->newx;
   control=4;
   if(head->newx>377)
   gameover();
     }
  chy=ch;
  break; 
  case DOWN:
        if(control!=1)
     { head->newy=head->newy+22;
          head->centery=head->newy;
   control=3;
   if(head->newy>377)
   gameover();
         }
         else
       { head->newy=head->newy-22;
    head->centery=head->newy;
           control=1;
    if(head->newynewx=head->newx+22;
          head->centerx=head->newx;
          control=4;
   if(head->newx>377)
      gameover();
         }
         else
      { head->newx=head->newx-22;
          head->centerx=head->newx;
          control=2;
   if(head->newxnewy=head->newy-22;
        head->centery=head->newy;
        control=1;
    if(head->newynewy=head->newy+22;
        head->centery=head->newy;
        control=3;
 if(head->newy>377)
        gameover();
        }
        chy=ch;
        break; 
 

  case ESC:
       flag=1;
       break;
 } 
 

/* if 判断是否吃蛇*/ 
if(flag!=1)
{ if(head->newx==scenterx&&head->newy==scentery)
 { p3=head;
   while(p3!=NULL)
   { p4=p3;
 p3=p3->next;
   }
  p3=(struct snake *)malloc(sizeof(struct snake));
  p4->next=p3;
  p3->centerx=a;
  p3->newx=a;
  p3->centery=b;
  p3->newy=b;
  p3->next=NULL; 
  a=500;
  b=500;
  putimage(409,62,far4,COPY_PUT);  /********** 分数框挡住**************/
  putimage(500,62,far4,COPY_PUT);  /*********把以前的剩下虫子的框挡住********/
  score=(++n)*100;
  left--;
  itoa(score,sscore,10);
  itoa(left,sleft,10);
  setcolor(RED);
  outtextxy(415,70,sscore);
  outtextxy(512,70,sleft);
  nextshow=1;
  if(left==0)           /************判断是否过关**********/
  donghua();             /*******如果过关,播放过关动画*********************/ 
 }
 p5=head;       /*********************判断是否自杀***************************/
 p5=p5->next;
 p5=p5->next;
 p5=p5->next;
 p5=p5->next;      /****从第五个节点判断是否自杀************/
 while(p5!=NULL)
 {if(head->newx==p5->centerx&&head->newy==p5->centery)
  { gameover();
    break;
  }
   else
  p5=p5->next;
 }
 }
} 
/************snakechange()函数结束*******************/ 
 
 
 

/*****************************主函数******************************************/
int main()
{ int i;
 init();       /**********初始化图形系统**********/
 welcome();      /*********8欢迎界面**************/
 bort();       /*********主场景***************/
 snakede();      /**********连表初始化**********/
 while(1)
 { snakechange();
  if(flag==1)
  break;
  snakepaint();
  ran();
  for(i=0;i

    
 
 

您可能感兴趣的文章:

  • HTML超文本标记语言教程及实例
  • LINUX 或者Windows 如何保证一个进程只有一个实例在运行?如果是C语言,JAVA语言开发,又怎么样保证?
  • 大家帮我推荐些在linux下用c语言对数据库操作编程的实例或资料吧!谢谢!
  • C语言构建动态数组完整实例
  • C语言实现堆排序的简单实例
  • C语言实现杨辉三角实例
  • c语言 字符串转大写的简单实例
  • C语言二维数组的处理实例
  • c语言如何实现只运行单个进程实例?
  • C语言中自动隐式转换与类型强制转换实例分析
  • C语言十进制转二进制代码实例
  • C语言变量类型与输出控制用法实例教程
  • C语言创建链表错误之通过指针参数申请动态内存实例分析
  • C语言的递归思想实例分析
  • C语言二叉树的非递归遍历实例分析
  • PHP编程语言介绍及安装测试方法 iis7站长之家
  • C语言程序,软定时器应用的实例
  • c语言全盘搜索指定文件的实例代码
  • C语言连续子向量的最大和及时间度量实例
  • C语言安全之数组长度与指针实例解析
  • C语言循环队列的表示与实现实例详解
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • c语言判断某一年是否为闰年的各种实现程序代码
  • 如何得到C语言代码对应的汇编代码?
  • c语言实现MD5算法完整代码示例
  • 如何将C语言代码转换为应用程序(也就是编译)
  • Linux启动过程到哪个阶段之后的源代码全是C语言而不是汇编写的?
  • 何处可得 标准C语言函数源代码?
  • 用vi编辑c语言代码问
  • linux下有没有能编译出16bit代码的C语言编译器?
  • 请问那里有c语言的编译器源代码啊?
  • 求linux下连接odbc的C语言代码
  • c语言中if 语句的作用范围示例代码
  • 在做FTP服务端,请问哪位有解析LIST命令的C语言代码?
  • 就剩下7分了,提个问题 QT语言中清空的代码怎么写
  • C语言中打印特殊图案的实现代码
  • linux下C语言开发的一些源代码,谁需要?
  • 请问在哪里可以找到Unix的C语言源代码?? 立刻给分
  • (****非作业帖),求ftp客户/服务器c语言源代码.
  • c语言 汉诺塔算法代码
  • 请问这段代码用其他非java语言怎么实现?
  • 不会汇编语言,想学习Linux内核网络部分的代码可以嘛?
  • 怎样在c语言的代码里内嵌的操作oracle数据库,各位大虾谢谢了
  • 2013年7月和2013年8月编程语言排行榜
  • 如何在GTK2.0下实现国际化(语言选择根据自己设置的语言,不用系统的语言)
  • 2017 年热门编程语言排行榜出炉,你的语言上榜没?
  • C语言中有指针,因此C语言可以创建链表,那么Java语言没有指针,那Java是否可以创建链表呢?
  • 苹果OS X和IOS下最新编程语言swift介绍
  • 求助,在linux下,c语言和汇编语言的接口是什么?
  • PHP编程语言介绍及安装测试方法
  • C语言中间语言 CIL
  • Linux下C语言strstr()查找子字符串位置函数详细介绍(strstr原型、实现及用法)
  • 最近学JSP,苦于HTML语言和JAVA语言太差,请教推荐几本书,thanks.




  • 特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3