涡轮游戏
# include & ltstdio.h & gt
# include & ltgraphics.h & gt
# include & ltstdlib.h & gt
# include & ltdos.h & gt/*引用的库函数*/
#定义左0x4b00
#定义右0x4d00
#向下定义0x5000
#定义高达0x4800
#define ESC 0x011b/*宏定义键名*/
#定义N 200
int i,key
int级别;/*游戏等级*/
int得分= 0;/*分数*/
int gamespeed/*游戏速度*/
结构食品
{
int x;/*食物横坐标*/
int y;/*食物的纵坐标*/
int yes/*判断食物的变量是否会出现*/
}食物;/*食物的结构*/
结构蛇
{
int x[N];
int y[N];
int节点;/*蛇的结数*/
int方向;/*蛇的移动方向*/
int life/*蛇的命,0是活的,1是死的*/
}蛇;/*蛇的结构*/
void choice levle(void);/*选择游戏级别*/
void Init(void);/*图形驱动程序*/
void Close(无效);/*图表结束*/
void DRAW(无效);/*游戏区*/
void game over(void);/*结束游戏*/
void玩法(void);/*玩游戏的具体流程*/
void PrScore(void);/*输出结果*/
/*主函数*/
无效总管(无效)
{
init();/*图形驱动程序*/
choice leve();/*选择游戏级别*/
DRAW();/*游戏区*/
游戏性();/*玩游戏的具体流程*/
close();/*图表结束*/
}
/*图形驱动程序*/
void初始化(void)
{
int gd=DETECT,GM;
init graph(& amp;gd,& ampgm," \ \ turbo 2 ");/*初始化图形系统*/
clear device();/*清除图形界面*/
}
/*选择游戏级别*/
无效选择值(无效)
{ char name[20];
setcolor(黄色);
settextstyle(0,0,6);
outtextxy(150,150,“蛇”);
setcolor(绿色);
settextstyle(0,0,1);
outtextxy(200,250,“请输入你的英文名:“);
outtextxy(200,270,"从1-9中选择级别。");
outtextxy(300,320,“姓名:杨子龙”);/*生产商名称*/
outtextxy(300,350,“编号:0902060226”);/*制作人的学号*/
outtextxy(300,380,“类:计算机科学0602”);/*生产者类别*/
getch();
printf("请普京你的名字:");
获取(名称);
printf("请选择级别:");
scanf("%d ",& amp水平);
gamespeed = 100000-400 *级别-300 *级别*级别;
if(level & gt;9 | | level & lt1)
{ clear device();/*清除图形界面*/
setcolor(黄色);/*设置字体颜色*/
settextstyle(0,0,2);/*设置字体类型*/
outtextxy(150,200,“电平输入错误”);/*显示文本*/
getch();
level = 1;
}
}
无效绘制(无效)
{ clear device();/*清空屏幕*/
set color(2);
setlinestyle(SOLID_LINE,0,THICK _ WIDTH);/*设置线型*/
矩形(45,45,465,325);
}
/*玩游戏的具体流程*/
无效游戏(void)
{ set color(5);
setlinestyle(SOLID_LINE,0,THICK _ WIDTH);/*设置线型*/
randomize();/*随机数生成器*/
food . yes = 1;/*1表示新的食物需要出现,0表示食物已经存在*/
snake . life = 0;/*活着*/
snake . direction = 1;/*向右方向*/
snake . x[0]= 320;snake . y[0]= 240;/*蛇头*/
snake . x[1]= 330;snake . y[1]= 240;/*蛇的第二部分的位置*/
snake . node = 3;/*节数*/
PrScore();/*输出分数*/
而(1)/*可以反复玩游戏,按ESC结束*/
{
而(!Khit ())/*蛇在不按键的情况下自行移动*/
{
If(food.yes==1)/*需要新的食物*/
{
food . x = rand()% 360+70;
food . y = rand()% 250+60;
而(food.x%10!=0)/*食物随机出现后,食物必须在整个格子里,蛇才能吃*/
food . x++;
而(food.y%10!=0)
food . y++;
food . yes = 0;/*屏幕上有食物*/
}
If(food.yes==0)/*如果屏幕上有食物,就会显示出来*/
{
setcolor(绿色);
矩形(food.x,food.y,food.x+10,food . y-10);
}
for(I = snake . node-1;我& gt0;我-)/*蛇的每一个环节都向前移动*/
{
snake . x[I]= snake . x[I-1];
snake . y[I]= snake . y[I-1];
}
/*1,2,3,4表示左右上下,蛇头可以通过这个控件移动*/
开关(蛇形方向)
{
case 1:snake . x[0]+= 10;打破;
案例二:snake . x[0]-= 10;打破;
案例三:snake . y[0]-= 10;打破;
案例四:snake . y[0]+= 10;打破;
}
for(I = 3;我& ltsnake .节点;I++)/*从蛇的第四节判断自己是不是打中了自己,因为蛇头有两节,第三节是不可能转身的*/
{
if(snake . x[I]= = snake . x[0]& amp;& ampsnake.y[i]==snake.y[0])
{
game over();/*显示失败*/
snake . life = 1;/*蛇死*/
打破;
}
}
/*如果蛇头碰到墙,蛇头就从对面的墙上出来*/
if(snake . x[0]& lt;50)
{ snake . x[0]= 450;/*如果蛇头越过左边界,从右边界进入*/
snake . y[0]= snake . y[0];/*纵坐标不变*/
for(I = snake . node-1;我& gt0;我-)
{ snake . x[I]= snake . x[I-1];
snake . y[I]= snake . y[I-1];/*蛇的其他结向前移动*/
}
{
setfillstyle(SOLID_FILL,0);/*设置填充模式和颜色,0表示黑色*/
bar(50,55,455,315);/*bar是函数*/
}
}
其他
if(snake . x[0]& gt;450)
{ snake . x[0]= 50;/*如果蛇头越过右边界,蛇头从左边界进入*/
snake . y[0]= snake . y[0];/*纵坐标不变*/
for(I = snake . node-1;我& gt0;我-)
{ snake . x[I]= snake . x[I-1];
snake . y[I]= snake . y[I-1];/*蛇的其他结向前移动*/
}
{
setfillstyle(SOLID_FILL,0);/*设置填充模式和颜色,0表示黑色*/
bar(50,55,455,315);/*bar是函数*/
}
}
其他
if(snake . y[0]& lt;60)
{ snake . y[0]= 320;/*如果蛇头越过上边界,则从下边界进入*/
snake . x[0]= snake . x[0];/*横坐标保持不变*/
for(I = snake . node-1;我& gt0;我-)
{ snake . x[I]= snake . x[I-1];
snake . y[I]= snake . y[I-1];/*蛇的其他结向前移动*/
}
{
setfillstyle(SOLID_FILL,0);/*设置填充模式和颜色,0表示黑色*/
bar(50,55,455,315);/*bar是函数*/
}
}
其他
if(snake . y[0]& gt;320)
{ snake . y[0]= 60;/*如果蛇头越过下边界,它将从上边界进入*/
snake . x[0]= snake . x[0];/*横坐标保持不变*/
for(I = snake . node-1;我& gt0;我-)
{ snake . x[I]= snake . x[I-1];
snake . y[I]= snake . y[I-1];/*蛇的其他结向前移动*/
}
{
setfillstyle(SOLID_FILL,0);/*设置填充模式和颜色,0表示黑色*/
bar(50,55,455,315);/*bar是函数*/
}
}
If(snake.life==1)/*如果蛇死了,跳出内循环重新开始*/
打破;
if(snake . x[0]= = food . x & amp;& ampSnake.y[0]==food.y)/*吃完食物*/
{
set color(0);/*从图片中移除食物*/
矩形(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;/*新食物需要出现在屏幕上*/
得分+= 10;/*每吃一次食物,分数累计到10分*/
如果(分数%100==0)
{ level++;gamespeed = 100000-400 *级别-300 *级别*级别;/*每吃到10食物,就提升一级,速度加快*/
PrScore();/*输出新分数*/
setcolor(黄色);/*设置字体颜色*/
settextstyle(0,0,4);/*设置字体类型*/
outtextxy(150,200," LEVEL UP ");/*显示文本*/
if(level==10)
{级别=1,gamespeed = 100000-400 *级别-300 *级别*级别;}
延时(6000000);
延时(6000000);
延时(6000000);
延时(6000000);
延时(6000000);
延时(6000000);
延时(6000000);
bar(50,55,455,315);/*bar是函数*/
}
PrScore();/*输出新分数*/
}
set color(4);/*画一条蛇*/
for(I = 0;我& ltsnake .节点;i++)
矩形(snake.x[i],snake.y[i],snake.x[i]+10,
snake . y[I]-10);
延迟(gamespeed);/*控制游戏速度*/
set color(0);
矩形(snake.x[snake.node-1],snake.y[snake.node-1],
snake . x[snake . node-1]+10,snake . y[snake . node-1]-10);
} /*endwhile(!Khit) */*用黑色去掉蛇的最后一段*/
If(snake.life==1)/*如果蛇死了,跳出循环*/
打破;
key = BIOS key(0);/*接收按钮*/
If(key==ESC)/*按ESC退出*/
打破;
其他
if(key = = UP & amp;& amp蛇,方向!=4)
/*判断是否向相反方向移动*/
snake . direction = 3;
其他
if(key = = RIGHT & amp;& amp蛇,方向!=2)
snake . direction = 1;
其他
if(key = = LEFT & amp;& amp蛇,方向!=1)
snake . direction = 2;
其他
if(key = = DOWN & amp;& amp蛇,方向!=3)
snake . direction = 4;
}/*endwhile(1)*/
}
/*游戏结束*/
无效游戏结束(无效)
{
clear device();/*清空屏幕*/
PrScore();
setcolor(红色);/*设置字体颜色*/
settextstyle(0,0,4);/*设置字体类型*/
outtextxy(200,200,“游戏结束”);/*显示文本*/
getch();
}
/*输出结果和游戏等级*/
无效PrScore(无效)
{
char str 1[20];/*设置字符数组*/
setfillstyle(SOLID_FILL,0);
吧(50,15,390,35);/*填充矩形框*/
set color(6);/*设置文本颜色*/
settextstyle(0,0,2);/*设置数组显示位置*/
sprintf(str1,"分数%d级别%d ",分数,级别);/*显示数组内容*/
outtextxy(55,20,str 1);
setcolor(黄色);/*设置字体颜色*/
settextstyle(0,0,2);/*设置字体类型*/
outtextxy(250,400," EXIT = ESC ");/*显示文本*/
}
无效关闭(无效)
{
closegraph();
}