📄 edacioussnake.c
字号:
}
void time_0(struct time *noncetime)/*将时间设置为00:00:00.00,noncetime将作为置0前的时间存储起来*/
{
struct time timezero;
timezero.ti_sec=0;
timezero.ti_min=0;
timezero.ti_hour=0;
timezero.ti_hund=0;
gettime(noncetime);/*保存当前时间*/
settime(&timezero); /*置时间为00:00:00.00*/
}
void wink()
{
char *gamename="Edacious Snake";
char *gameauthor="Author : Cifry";
char *qq="OICQ : 442044866";
static int flag=0,num=0;
int color;
setviewport(gamwin_x-1,gamwin_y-1,gamwin_x+199+1,gamwin_y+199+1,0);
if(flag==0)
{
color=RED;
if(++num==5)
{
flag=1;
num=0;
}
}
else
{
color=BLUE;
if(++num==5)
{
flag=0;
num=0;
}
}
setcolor(RED);
rectangle(2,-48,197,-2);
setfillstyle(SOLID_FILL,RED);
bar(2,-48,197,-33);
settextstyle(0,0,1);
setcolor(CYAN);
outtextxy(45,-43,gamename);
setcolor(color);
outtextxy(20,-27,gameauthor);
outtextxy(20,-12,qq);
setviewport(gamwin_x,gamwin_y,gamwin_x+199,gamwin_y+199,0);/*返回游戏窗口*/
}
void operate() /*玩家控制*/
{
extern int key;
key=0;
while(1)
{
struct time t_end,t_time;
wink();/*闪烁信息*/
food(); /*投放食物*/
{/*信息刷新*/
void inform_size();
static int cmpsize=3;
if(cmpsize!=snakesize)
{
cmpsize=snakesize;
inform_size();
}
}
if(key==0) /*程序初始化后蛇随机移动方向*/
{
int randnum;
time_t pip;
srand((unsigned) time(&pip));
randnum=(unsigned)rand();
randnum=randnum%3+1;
switch(randnum)
{
case 1 :key=RIGHT;goto right;
case 2 :key=UP;goto up;
case 3 :key=DOWN;goto down;
}
}
time_0(&t_time);
while(1) /*接受键盘按键的有效时间*/
{
gettime(&t_end);
if(t_end.ti_hund>=difficulty){revert_time(&t_time,&t_end);break;}
if(bioskey(1))key=bioskey(0);
}
switch(key)
{
case LEFT :inspect(head->x-1,head->y);break;
case RIGHT:right:inspect(head->x+1,head->y);break;
case UP :up:inspect(head->x,head->y-1);break;
case DOWN :down:inspect(head->x,head->y+1);break;
case ESC :goto gameover;
}
}
gameover:
{
{/*贪吃蛇所有元素被清除*/
while(head->back!=NULL)
{
head=head->back;
free(head->front);
head->front=NULL;
}
free(head);
}
edacioussnake();
}
}
void gamewindow() /*游戏窗口*/
{
{ /*窗口边框*/
setcolor(RED);
setviewport(gamwin_x-1,gamwin_y-1,gamwin_x+199+1,gamwin_y+199+1,0);
rectangle(0,0,201,201);
}
wink();
setviewport(gamwin_x,gamwin_y,gamwin_x+199,gamwin_y+199,0);
}
void aboutgame() /*关于游戏*/
{
char *up="\30 UP";
char *down="\31 DOWN";
char *left="\33 LEFT";
char *right="\32 RIGHT ";
char *esc="ESC EXIT";
char *enter=" ENTER CONFIRM";
int row=45;
{
{ /*窗口边框*/
setcolor(RED);
setviewport(infwin_x-1,infwin_y-1,infwin_x+199+1,infwin_y+199+1,0);
rectangle(0,0,201,201);
}
setviewport(infwin_x,infwin_y,infwin_x+199,infwin_y+199,0);
}
settextstyle(0,0,1);
setcolor(GREEN);
outtextxy(50,row+=25,up);
outtextxy(50,row+=15,down);
outtextxy(50,row+=15,left);
outtextxy(50,row+=15,right);
outtextxy(42,row+=15,esc);
outtextxy(26,row+=15,enter);
setcolor(RED);
outtextxy(113,192,"Version 0.7");
}
void inform_size()/*贪吃蛇长度信息*/
{
char *size;
setviewport(infwin_x,infwin_y,infwin_x+199,infwin_y+199,0);
sprintf(size,"SIZE: %d",snakesize);
setfillstyle(SOLID_FILL,YELLOW);
bar(102,17,188,35);
setcolor(RED);
outtextxy(110,24,size);
setviewport(gamwin_x,gamwin_y,gamwin_x+199,gamwin_y+199,0);/*回到游戏窗口*/
}
void inform_grand(int diff)/*贪吃蛇速度信息*/
{
char *inform;
setviewport(infwin_x,infwin_y,infwin_x+199,infwin_y+199,0);
sprintf(inform,"GRADE: %d",diff);
setfillstyle(SOLID_FILL,CYAN);
bar(12,17,99,35);
setcolor(RED);
outtextxy(20,24,inform);
setviewport(gamwin_x,gamwin_y,gamwin_x+199,gamwin_y+199,0);
}
void face()/*界面*/
{
aboutgame();
gamewindow();
}
void option_display(int row,int num,int color)/*游戏难度菜单选项*/
{
int pixel_x,pixel_y;
char *grade;
for(pixel_x=0+1;pixel_x<200-1;pixel_x++)
for(pixel_y=row*20+1;pixel_y<(row*20)+20-1;pixel_y++)
putpixel(pixel_x,pixel_y,color);
settextstyle(0,0,1);
setcolor(BLUE);
sprintf(grade,"GRADE %d",num);
outtextxy(75,row*20+8,grade);
}
void menu_display()/*游戏难度菜单显示*/
{
int i=0;
while(i<10)
{
option_display(i,i+1,DARKGRAY);
i++;
}
}
void setgame()/*游戏难度设置*/
{
int row=0;
setviewport(gamwin_x,gamwin_y,gamwin_x+199,gamwin_y+199,0);
clearviewport();/*清除窗口内容*/
menu_display();
option_display(row,1,LIGHTGRAY);
difficulty=90;
inform_grand(row+1);/*信息反馈*/
inform_size();
while(1)
{
int key;
key=bioskey(0);
if(key==UP&&row!=0)
{
option_display(row,row+1,DARKGRAY);
row-=1;
option_display(row,row+1,LIGHTGRAY);
}
if(key==DOWN&&row!=9)
{
option_display(row,row+1,DARKGRAY);
row+=1;
option_display(row,row+1,LIGHTGRAY);
}
if(key==ENTER){clearviewport();break;}
if(key==ESC)exit(0);
if(difficulty!=diff[row])
{
difficulty=diff[row];
inform_grand(row+1);/*信息反馈*/
}
}
}
void edacioussnake() /*贪吃蛇游戏*/
{
initmap();/*地图初始化*/
inisnake();/*贪吃蛇初始化*/
face();/*界面设计*/
setgame();/*游戏设置*/
operate();/*游戏运行*/
}
void userinigraph()/*自定义图形检测*/
{
int gdriver,gmode,errorcode;
gdriver=VGA;
gmode=VGAHI;
initgraph(&gdriver,&gmode,"");
errorcode = graphresult();
if (errorcode !=0)
{
printf("\n\t\t\tGame : Edacious Snake\n");
printf("\t\t\tAuthor : Cifry\n");
printf("\n\terror:\t%s\n", grapherrormsg(errorcode));
getch();
exit(1);
}
}
int main()
{
userinigraph(); /*图形检测*/
edacioussnake(); /*贪吃蛇游戏*/
closegraph();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -