采用easyX插件进行C语言编写的贪吃蛇,自带播放音乐

/**********************************************************************************
*本程序采用VC++6.0编程,需要在easy X官网下载插件。

*程序作者:Booligan

*邮        箱:904657718@qq.com

文件下载地址:https://download.csdn.net/download/qq_35146123/11220921

**********************************************************************************/


#include<graphics.h>
#include<conio.h>
#include<stdlib.h>
#include<stdio.h>
#include<time.h>
#include<string.h>
#pragma comment(lib,"Winmm.lib")


#define SIZEMAX 100
#define SNAKELEN 10
#define SPEED 150
#define NUM_R 10 //半径
#define NUM_X 25 //横向个数
#define NUM_Y 25 //纵向个数
#define NUM 30 //所需节点个数
//定义枚举来表示方向
typedef enum
{
up,down,left,right
}DIR;
//定义结构来存储坐标信息
typedef struct{
int x;
int y;
}COOR;
//定义结构来储存蛇的食物信息
struct FOOD 
{
COOR food_coor;
int flag;
}food;
//定义结构来储存蛇的信息
struct SNAKE
{
COOR snake_coor[SIZEMAX];
DIR dir;
int node;
}snake;


int stop_music=0;
int speed;   //设置贪吃蛇运动速度
void init();//对游戏进行初始化
void setfood();   //设置食物
void showfood();    //显示食物
void snakemove();   
void showsnake();
void changedir();  //改变蛇运行方向
void food_condition();
void die_condition();  //判断蛇死亡状态
void gameover();
void Quit();  
void NewGame();
void flush();


void main(void)
{
initgraph(640,480);
//输出提示信息
outtextxy(240, 240, _T("Press any key to start game!"));
_getch();
cleardevice();//清除屏幕信息
init();//界面初始化


while(1)
{
settextcolor(WHITE);
settextstyle(16,0,_T("宋体"));
setbkmode(TRANSPARENT);
outtextxy(0,270,"操作方法:");
    outtextxy(0, 300, _T("UP:W "));
outtextxy(0, 325, _T("DOWN:S "));
outtextxy(0, 350, _T("LEFT:A "));
outtextxy(0, 375, _T("RIGHT:D "));
outtextxy(260,400,"@Copyright by Booligan");
NewGame();
}
}


void init(void)
{
   for(int j=0;j<480;j++)
   {
  setlinecolor(LIGHTGRAY);
  line(0,j,640,j);
   }
   for(int i=48;i<378;i++)
   {
  setlinecolor(GREEN);
  line(148,i,498,i);
   }
   srand((unsigned)time(NULL));
   food.flag=0;
   snake.snake_coor[0].x=200+SNAKELEN;
   snake.snake_coor[0].y=60;
   snake.snake_coor[1].x=200;
   snake.snake_coor[1].y=60;
   snake.snake_coor[2].x=200;
   snake.snake_coor[2].y=60;
   snake.node=3;
   speed=SPEED;
   snake.dir=down;
   setcolor(BLUE);
   rectangle(148,48,498,378);
   rectangle(140,40,510,390);
   setcolor(WHITE);
}


void setfood(void)
{
  food.food_coor.x=rand()%(250/SNAKELEN)*SNAKELEN+240;
  food.food_coor.y=rand()%(300/SNAKELEN)*SNAKELEN+50;
  food.flag=1;
}


void showfood(void)
{
  setcolor(YELLOW);
  setfillcolor(YELLOW);
  fillcircle(food.food_coor.x+5,food.food_coor.y+5,5);
}


void snakemove(void)
{
  for(int i=snake.node;i>0;i--)
  {
 snake.snake_coor[i].x=snake.snake_coor[i-1].x;
 snake.snake_coor[i].y=snake.snake_coor[i-1].y;
  }
  switch(snake.dir)
  {
     case up:
snake.snake_coor[0].y-=SNAKELEN;
break;
case down:
snake.snake_coor[0].y+=SNAKELEN;
break;
case left:
snake.snake_coor[0].x-=SNAKELEN;
break;
case right:
snake.snake_coor[0].x+=SNAKELEN;
break;
  }
  showsnake();
}


void food_condition(void)
{
  if(snake.snake_coor[0].x==food.food_coor.x&&snake.snake_coor[0].y==food.food_coor.y)
  {
    snake.node++;
speed-=5;
setlinecolor(GREEN);
circle(food.food_coor.x+5,food.food_coor.y+5,5);
food.flag=0;
  }
}
void die_condition(void)
{
  if(snake.snake_coor[0].x>490||snake.snake_coor[0].x<150||snake.snake_coor[0].y<50||snake.snake_coor[0].y>370)
 gameover();
  for(int i=snake.node-1;i>0;i--)
  {
 if(snake.snake_coor[0].x==snake.snake_coor[i].x&&snake.snake_coor[0].y==snake.snake_coor[i].y)
 gameover();
  }
}


void showsnake(void)
{
  for(int i=snake.node-1;i>=0;i--)
  {
 circle(snake.snake_coor[i].x+5,snake.snake_coor[i].y+5,5);
  }
  setlinecolor(GREEN);
  setfillcolor(GREEN);
  fillcircle(snake.snake_coor[snake.node].x+5,snake.snake_coor[snake.node].y+5,5);
  setlinecolor(RED);
  setfillcolor(RED);
  fillcircle(snake.snake_coor[0].x+5,snake.snake_coor[0].y+5,5);
}


void changedir(void)
{
  char key;
  key=getch();
  switch(key)
  {
    case 'w':case 'W':
if(snake.dir!=down)
snake.dir=up;
break;
case 's':case 'S':
if(snake.dir!=up)
snake.dir=down;
break;
case 'a':case 'A':
if(snake.dir!=right)
snake.dir=left;
break;
case 'd':case 'D':
if(snake.dir!=left)
snake.dir=right;
break;
  }
}


void gameover(void)
{
   stop_music=1;
   if(stop_music) 
{
mciSendString("stop mymusic",NULL,0,NULL);
mciSendString("close mymusic",NULL,0,NULL);
}
   setcolor(RED);
   settextstyle(25,26,_T("宋体"));
   outtextxy(200,200,"Game Over!");
   HWND wnd = GetHWnd();
   if(MessageBox(wnd, "游戏结束。\n重来一局吗?","贪吃蛇",MB_YESNO|MB_ICONQUESTION)==IDYES)
main();
   else
Quit();
}
void Quit()
{
exit(0);
}
void NewGame()
{
// 播放音乐
mciSendString("open res\\123.mp3 alias mymusic", NULL, 0, NULL);
mciSendString("play mymusic", NULL, 0, NULL);
IMAGE img;
loadimage(&img, _T("res\\logo2.jpg"));
putimage(0, 100, &img);
    while(1)
{
while(!kbhit())
{
if(!food.flag) setfood();
showfood();
die_condition();
food_condition();
snakemove();
Sleep(speed);
}
changedir();
}
}

  • 7
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值