• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > 基于C语言实现的贪吃蛇游戏完整实例代码

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

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了c语言贪吃蛇游戏代码,c语言小游戏贪吃蛇,c语言贪吃蛇游戏,c语言编程贪吃蛇游戏,贪吃蛇游戏代码c等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

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

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

#include <graphics.h>
#include <conio.h>
#include <stdlib.h>
#include <dos.h>
#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(x<=375)
    { putimage(x+=2,y,buf,COPY_PUT);
   grade--;
    key=0;
   break;
    } 
   }
   
   if (f==1)
   break; 
 }                           /********** end  ****************/ 
 

 free(buf);
 } 
 
/*************************随即矩形*****************/ 
/***********当nextshow 为1的时候才调用此函数**********/

void ran()
{ int nx;
 int ny;
 int show;         /**********控制是否显示***********/
 int jump=0;
 struct snake *p;
 p=head;
 if(nextshow==1)      /***********是否开始随机产生***************/
  while(1)
  {show=1;
  randomize();
  nx=random(14);
  ny=random(14);
  scenterx=nx*22+58;
  scentery=ny*22+58;
   while(p!=NULL)
   {
    if(scenterx==p->centerx&&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;i<=5;i++)
 {putpixel(random(640),random(80),13); 
  putpixel(random(640),random(80)+80,2); 
  putpixel(random(640),random(80)+160,3); 
  putpixel(random(640),random(80)+240,4);
  putpixel(random(640),random(80)+320,1);
  putpixel(random(640),random(80)+400,14);
 } 
  setcolor(YELLOW);
  settextstyle(0,0,4);
  outtextxy(130,200,"Wonderful!!");
  setfillstyle(SOLID_FILL,10);
  bar(240,398,375,420);
  feiyang(300,400);
  fei(250,400);
  yang(350,400);
  if(bioskey(1))
  if(bioskey(0)==ESC)
 {
      flag=1;
  break;
 }
 }
}

/*************************end************************/

/***********************初始化图形系统*********************/
void init()
{int a=DETECT,b;
 int i,j;
 initgraph(&a,&b,"");
}
/***************************end****************************/ 
 
/***画立体边框效果函数******/
void tline(int x1,int y1,int x2,int y2,int white,int black)
{ setcolor(white);
 line(x1,y1,x2,y1);
 line(x1,y1,x1,y2);
 setcolor(black);
 line(x2,y1,x2,y2);
 line(x1,y2,x2,y2);
 } 
/****end*********/

/*************飞洋标志**********/ 
int feiyang(int x,int y) 
{int feiyang[18][18]={ {0,0,0,0,0,0,1,1,1,1,1,1,0,1,1,0,0,0},
 {0,0,0,0,0,1,1,1,0,0,1,1,1,1,1,0,0,0},
 {0,0,0,0,1,1,1,0,0,0,0,0,1,1,1,0,0,0},
 {0,0,0,1,1,1,0,0,0,0,0,0,0,1,1,0,0,0},
 {0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0},
 {0,0,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0},
 {0,0,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,0},
 {0,0,1,1,1,1,1,0,0,1,0,0,1,1,0,0,0,0},
 {0,0,1,1,1,0,0,0,0,1,0,1,1,1,0,0,0,0},
 {0,0,1,1,0,1,1,1,0,1,1,1,0,0,0,0,0,0},
 {0,0,1,1,0,0,0,1,0,0,1,1,0,0,0,0,0,0},
 {0,0,1,1,0,0,0,1,1,0,0,1,1,0,0,1,0,0},
 {0,0,1,1,1,0,0,1,1,0,0,1,1,0,0,1,0,0},
 {0,0,1,1,1,1,0,1,1,1,1,1,1,0,1,1,0,0},
 {0,0,0,1,1,1,0,1,1,1,1,1,0,0,1,0,0,0},
 {0,0,0,0,1,1,1,0,0,0,0,0,0,1,1,0,0,0},
 {0,0,0,0,0,1,1,1,0,0,0,0,1,1,0,0,0,0},
 {0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0}};
 int i,j;
for(i=0;i<=17;i++)
 for(j=0;j<=17;j++)
 {if (feiyang[i][j]==1)
 putpixel(j+x,i+y,RED);
 }
}

/********"飞"字*************/ 
int fei(int x,int y)
{int fei[18][18]={{1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0},
 {0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0},
 {0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0},
 {0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0},
 {0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0},
 {0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0},
 {0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0},
 {0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,0,0},
 {0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0},
 {0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0},
 {0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0},
 {0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0},
 {0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1},
 {0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1},
 {0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1},
 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0},
 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0}};
int i,j;
for(i=0;i<=17;i++)
  for(j=0;j<=17;j++)
  {if (fei[i][j]==1)
    putpixel(j+x,i+y,BLUE);
  }
} 
 
/*********"洋"字**************/ 
 
int yang(int x,int y)
{
int yang[18][18]={{0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0},
{1,1,0,0,0,0,1,1,1,0,0,0,1,1,0,0,0,0},
{0,1,1,1,0,0,0,1,1,1,0,1,1,0,0,0,0,0},
{0,0,1,1,0,0,0,0,0,1,1,1,0,0,0,1,0,0},
{0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0},
{0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0},
{1,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0},
{0,1,1,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0},
{0,0,1,1,0,0,0,1,1,1,1,1,1,1,1,0,0,0},
{0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0},
{0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0},
{0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,1,1,0},
{0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0},
{1,1,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0},
{0,1,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0},
{0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0},
{0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0}}; 
int i,j;
  for(i=0;i<=17;i++)
    for(j=0;j<=17;j++)
      {if (yang[i][j]==1)
         putpixel(j+x,i+y,BLUE);
 



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

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

相关文章

  • 2017-05-28算法详解之回溯法具体实现
  • 2017-05-28编译错误error: stray ‘\343’in program的解决方法
  • 2017-05-28C++ 的三种访问权限与三种继承方式
  • 2022-04-30什么是源文件?
  • 2017-05-28C语言实现杨辉三角实例
  • 2017-05-28关于C++中的友元函数的一些总结
  • 2017-05-28C++设计模式之观察者模式
  • 2017-05-28strcat 函数的使用指南
  • 2017-05-28VC小技巧汇总之控件技巧
  • 2017-05-28解析c++中参数对象与局部对象的析构顺序的详解

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C++普通函数指针与成员函数指针实例解析
    • 常用Hash算法(C语言的简单实现)
    • C++中Boost库裁剪与其应用详解
    • C++中this指针用法详解及实例
    • 纯C语言实现五子棋
    • C++之异常处理详解
    • c++大数阶乘的实现方法
    • 简要对比C语言中的dup()函数和dup2()函数
    • 使用C语言判断栈的方向实例
    • 数据结构顺序表操作示例

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有