问题:调试时,一要进入Init() 函数时就提示错误,错误提示如图,无法调试
#include<stdio.h>
#include<graphics.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#include<dos.h>
#include<conio.h>
#define N 200
#define LEFT 1
#define RIGHT 3
#define DOWN 0
#define UP 5
#define Esc 9
long int i,key;
long int score=0;//得分
long int gamespeed=50000;//游戏速度可以自己调整
struct Food
{
int x;
int y;
int yes;
}food;
struct Snake
{
int x[N];
int y[N];
int node;
int direction;
int life;
}snake;
void Init();//图形驱动
void Close();//图形结束
void DrawK();//开始画面
void GameOver();//结束游戏
void GamePlay();//玩游戏的具体过程
void PrScore();//输出成绩
void delay(long int i);
void main()
{
Init();
DrawK();
GamePlay();
Close();
}
/*图形驱动*/
void Init()
{
// int gd=DETECT,gm;
// initgraph(&gd,&gm,"");
initgraph(640,480);
// cleardevice();
}
/*开始界面,左上角坐标为(50,40),右下角坐标为(610,460)的围墙*/
void DrawK()
{
setbkcolor(11);
setlinestyle(0,1,NULL,0);//设置线型
// setlinestyle(SOLID_LINE,0,THICK_WIDTH);
for(i=50;i<=600;i+=10)
{
rectangle(i,40,i+10,49);//上边
rectangle(i,451,i+10,460);//下边
}
for(i=40;i<=450;i+=10)
{
rectangle(50,i,59,i+10);//左边
rectangle(601,i,610,i+10);//右边
}
}
//玩游戏的具体过程
void GamePlay()
{
// randomize();//随机数发生器
srand(time(0));
food.yes=1;//1表示需要出现新食物,0表示已经存在食物
snake.life=0;//活着
snake.direction=1;//方向往右
snake.x[0]=100;snake.y[0]=100;//蛇头
snake.x[1]=110;snake.y[1]=100;
snake.node=2;//节数
PrScore();//输出得分
while(1)
{
while(!kbhit())
{
if(food.yes==1)//需要出现新食物
{
food.x=rand()%400+60;
food.y=rand()%350+60;
while(food.x%10!=0)//食物随机出现后必须让食物在整格内,才可以让蛇吃到
{
food.x++;
}
while(food.y%10!=0)
{
food.y++;
}
food.yes=0;//画面上有食物了
}
if(food.yes==0)//画面上有了食物就要显示
{
setcolor(GREEN);
rectangle(food.x,food.y,food.x+10,food.y-10);
}
for(i=snake.node-1;i>0;i--)
{
//蛇的每个环节向前移动,也就是贪吃蛇的关键算法
snake.x[i]=snake.x[i-1];
snake.y[i]=snake.y[i-1];
}
//1,2,3,4表示右,左,上,下四个方向,通过这个判断来移动蛇头
switch(snake.direction)
{
case 1:snake.x[0]+=10;break;
case 2:snake.x[0]-=10;break;
case 3:snake.y[0]-=10;break;
case 4:snake.y[0]+=10;break;
}
for(i=3;i<snake.node;i++)/*从蛇的第四节开始判断是否咬到自己,不蛇头是两节,第三节不可能拐过来*/
{
if(snake.x[i]==snake.x[0] && snake.y[i]==snake.y[0])
{
GameOver();//显示失败
snake.life=1;
break;
}
}
if(snake.x[0]<55 || snake.x[0]>595 ||snake.y[0]<55 ||snake.y[0]>455)//蛇是否撞到墙壁
{
GameOver();
snake.life=1;
}
if(snake.life==1)
{
break;
}
if(snake.x[0]==food.x && snake.y[0]==food.y)//吃到食物以后
{
setcolor(0);//把画面上的食物去掉
rectangle(food.x,food.y,food.x+10,food.y-10);
snake.x[snake.node]=-20;//
snake.y[snake.node]=-20;//
//新的一节先放在看不见的位置,下次循环就取前一节的位置
snake.node++;//蛇的身体长一节
food.yes=1;//画面上需要出现新的食物
score+=10;
PrScore();//输出新得分
}
setcolor(4);//画出蛇
for(i=0;i<snake.node;i++)
rectangle(snake.x[i],snake.y[i],snake.x[i]+10,snake.y[i]-10);
delay(gamespeed);
setcolor(0);//
rectangle(snake.x[snake.node-1],snake.y[snake.node-1],snake.x[snake.node-1]+10,snake.y[snake.node-1]-10);
}
if(snake.life==1)
{
break;
}
// key=biolskey(0);
scanf("%d",&key);
if(key==Esc)//按ESC键退出
break;
else if(key==UP && snake.direction!=4)//判断是否wangle相反方向移动
snake.direction=3;
else if(key==RIGHT && snake.direction!=2)
snake.direction=1;
else if(key==LEFT && snake.direction!=1)
snake.direction=2;
else if(key==DOWN && snake.direction!=3)
snake.direction=4;
}
}
void PrScore()
{
}
void GameOver()//结束游戏
{
}
void Close()//图形结束
{
}
void delay(long int i)
{}