返回
编程
分类

//时间函数库

日期: 2020-03-17 01:19 浏览次数 : 57

#include<stdio.h>//基本库
#include<stdlib.h>//系统库
#include<windows.h>//光标定位、字符颜色函数库
#include<time.h>//时间函数库
#include<conio.h>//键值读入函数库
#define width 60
#define height 25
struct ssnake
 {
     int f;//蛇身有效标志
    int x;
     int y;//蛇身坐标
};
void color(int b)         //颜色函数
{
     HANDLE hConsole = GetStdHandle((STD_OUTPUT_HANDLE)) ;
     SetConsoleTextAttribute(hConsole,b) ;
 }
void HideCursor()//隐藏光标
{
     HANDLE hOut=GetStdHandle(STD_OUTPUT_HANDLE);
     CONSOLE_CURSOR_INFO cursor_info={1,0};
     SetConsoleCursorInfo(hOut,&cursor_info);
 }

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<windows.h>
#include<time.h>    
#define MAX  3200
#define LEN  sizeof(Snake)
typedef unsigned char uchar;
//------------------------
typedef struct snake{                  
   char x;
   char y;
   struct snake *next;
   struct snake *last;
}Snake;//双向链表
Snake *h,*tp1,*tp2;
Snake *t,*hp1,*hp2;//表尾tail
//----------------------(数组图片)结构体化---------------------------------
 typedef struct Pic{
  char x[MAX];
  char y[MAX];
  int pnum;
}PIC;
 //-----------------------------------------------------------------------
PIC p0;
//------------------------
char f;//食物标志
int  m=0,n=0;//食物位置
int a=20;
//------------------------
unsigned short  color=5;//设置蛇头颜色
int  score=0;
int _score=0;//历史分数变量
step=0;//记录吃食物所用步数
foodlose=0;//记录未吃到的食物数
//-------颜色设置-----------------
void colorf(unsigned short  t)
{
    HANDLE  color;//创建句柄    color是变量名可以自己定义
    color=GetStdHandle(STD_OUTPUT_HANDLE);//句柄实例化
    SetConsoleTextAttribute(color,t);//设置字体颜色
}

#include<time.h>
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
#include<windows.h>
#define PASSWORD "000"
#define PRICE 5.0
#define END 24
#define SPEED_CAR 150
#define SELCET 300
#define EXIST 1  //EXISTŽú±íµ±Ç°³µÎ»Óгµ
#define NO 0     //NO Žúµ±Ç°³µÎ»±íû³µ
/*
ŽŽœšÒ»žö¶þάÊý×飬ģÄâ³µ¿âµÄÆœÃæÊŸÒâÍŒ
ŽŽœšÁœžö¶ÓÁУ¬Ä£Äâœø¿âºÍ³ö¿âµÄ¶ÓÁÐ
³µÁŸµÄ¶ÓÁÐÓë³ö¿âÖ®ŒäÍš¹ý×ø±êœøÐÐÁªÏµ
³µÎ»Óпգ¬µ«ÓÐŒÈÓгµ¿âÓÖÓгµ³ö¿âʱ£¬
×ñÕÕÏȳöºóœøµÄÔ­Ôò£¬
ŒŽ£¬³ö¿âµÄÓÅÏÈŒ¶žßÓÚÈë¿âµÄÓÅÏÈŒ¶*
*/
struct Coordinate
{
    int x;
    int y;
};
struct Car
{
    int number;        //³µÅƺÅ
    int time_inner;    //ÔÚ³µ¿âÀïµÄÍ£³µÊ±Œä
    int probability;   //ŽæŽ¢³µÁŸÀëÈ¥µÄžÅÂÊ,1,2,3,4Œ¶ÊýÒ»ŽÎÔöŽó
    double cost;       //žÃŽÎÍ£³µÓŠž¶·ÑÓÃ
    char time_insert;  //œø¿âʱŒä
    char time_left;    //³ö¿âʱŒä, ³ö¿âµÄʱŒäµÈÓÚœø¿âʱŒäŒÓ³ö¿âʱµÄprobability
    Coordinate local;  //µ±Ç°³µÁŸËùÔÚ/Òª³öµÄ¿â±àºÅ
    Car *next;   //ÓÉÓÚ³µÁŸÊý²¢²»È·¶š£¬ÒòŽËÓÃÁŽÊœŽæŽ¢
};
int Time=0;
double Sum_Money=0.0;
bool Garage[2][10];   //ÓÃ10*2µÄ·œžñÄ£Äâ³µ¿âµÄÆœÃæÊŸÒâÍŒ
Car *Head_Out=(Car *)malloc(sizeof(Car)); //ÔÚ³µ¿âÀ׌±ž³öÀŽµÄ³µ¶Ó
Car *Head_In=(Car *)malloc(sizeof(Car)); //ÔÚÍâÃæÅŶӣ¬×Œ±žœø¿âµÄ³µ¶Ó
/* ³µ¿âµÄÆœÃæÊŸÒâ¡¢³µ¶ÓµÄÍ·ÖžÕë¡¢ÊÕÒæÉèΪȫŸÖ±äÁ¿£¬ÕâÑù·œ±ãž÷º¯ÊýµÄµ÷ÓÃ*/
void gotoxy(int x, int y)     
{
    COORD pos;
    pos.X = x;
    pos.Y = y;
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
}
int Insert_Password(int flag)
{
       char key[20],c;
    int count=0;
    if(flag)
    {
        system("cls");
        puts("nÎÂÜ°ÌáÊŸ£¬ÄãµÄÊäÈëÃÜÂëÓÐÎónn");
    }
    printf("nÇëÊäÈëÃÜÂë £º ");
    while(c=getch(),c!='r')
    {
        if(c==8)
        {
            system("cls");
            if(flag)
                printf("nÎÂÜ°ÌáÊŸ£¬ÄãµÄÊäÈëÃÜÂëÓÐÎónn");
            printf("nÇëÊäÈëÃÜÂë £º ");
            if(count>0)
            {
                key[--count]='';
                for(int i=0;i<count;i++)
                    printf("¡ñ");
            }
        }
        else if(count>=0)
        {
            printf("¡ñ");
            key[count++]=c,key[count]='';
        }
    }
    if(strcmp(key,PASSWORD)==0)
    {
        system("cls");
        gotoxy(35,5);
            puts("ÃÜÂëÕýÈ·");
        Sleep(2000);
        return 1;
    }
    else return Insert_Password(1);
}
void Enter()
{
    for(int i=0;i<15;i++)
    {
        gotoxy(35,5);
            puts("ÕýÔÚµÇÂŒn");
        Sleep(200);
        for(int j=0;j<i;j++)
        {
            if(!j)
                printf("tt必威官网亚洲体育 ,t¡ö");
            else printf("¡ö");
        }
    }
    system("cls");
}
void Get_Time()   //»ñÈ¡œø³ö³µ¿âµÄʱŒä
{
    time_t rawtime;
    struct tm *timeinfo;
    time (&rawtime);
    timeinfo = localtime (&rawtime);
    gotoxy(61,1);
        printf("%d",timeinfo->tm_hour);
    gotoxy(66,1);
        printf("%d",timeinfo->tm_min);
    gotoxy(71,1);
        printf("%d",timeinfo->tm_sec);
    gotoxy(0,END);
}
void Print_Left_Form()
{
    gotoxy(8,0);
        printf("©Š");
    gotoxy(0,1);
        printf("¡ª¡ª¡ª¡ª©Œ");
    gotoxy(3,4);
        printf("ÅŶӳµÁŸ");
    gotoxy(0,5);
        printf("©°¡ª¡ª¡ª¡ª¡ª¡ª©Ž");
    for(int i=6;i<23;i+=2)
    {
        gotoxy(0,i),printf("©ŠÅƺŠ       ©Š");
        gotoxy(0,i+1),printf("©À¡ª¡ª¡ª¡ª¡ª¡ª©È");
    }
    gotoxy(0,22);
        printf("©ŠÅƺŠ       ©Š");
    gotoxy(0,23);
        printf("©ž¡ª¡ª¡ª¡ª¡ª¡ª©Œ");
}
void Print_Right_Form()
{
    gotoxy(51,1);
        printf("µ±Ç°Ê±Œä:   ʱ   ·Ö   Ãë");
    //gotoxy(51,4);
    gotoxy(50,6);
        printf("©°¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª©Ž");
    gotoxy(50,7);
        printf("©Š œø¿â³µÁŸÊý£ºt  ©Š");
    gotoxy(50,8);
        printf("©À¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª©È");
    gotoxy(50,9);
        printf("©Š ³ö¿â³µÁŸÊý£ºt  ©Š");
    gotoxy(50,10);
        printf("©ž¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª©Œ");
    gotoxy(50,13);
        printf("©°¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª©Ž");
    for(int y=14;y<23;y++)
    {
        gotoxy(50,y);
            printf("©Š");
        gotoxy(74,y);
            printf("©Š");;
        gotoxy(50,++y);
            printf("©Š");
        gotoxy(74,y);
            printf("©Š");
    }
    gotoxy(50,23);
    printf("©ž¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª©Œ");
}
void Fun()
{
    gotoxy(53,14);
        printf("³µÅƺţºtt");
    gotoxy(50,15);
        printf("©À¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª©È");
    gotoxy(53,16);
        printf("³ö¿â×ø±ê£ºtt");
    gotoxy(50,17);
        printf("©À¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª©È");
    gotoxy(53,18);
        printf("ÓŠœÉ·ÑÓãºtt");
    gotoxy(50,19);
        printf("©À¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª©È");
    gotoxy(53,20);
        printf("Í£ÁôʱŒä£ºtt");
    gotoxy(50,21);
        printf("©À¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª©È");
    gotoxy(53,22);
        printf("Í£Áôʱ¶Î£ºtt ");
}
void Print_Garage()
{
    system("cls");
    gotoxy(0,0);
    puts("ntt ©°¡ª¡ª¡ª¡ª©Ð¡ª¡ª©Ð¡ª¡ª¡ª¡ª©Ž");
    for(int i=0;i<10;i++)
    {
        if(Garage[0][i]) printf("tt ©Š ¡ö¡ö¡ö ");
        else printf("tt ©Š  t");
        if(Garage[1][i]) puts("t    ¡ö¡ö¡ö ©Š");
        else  puts("t    t   ©Š");
        if(i==9)
            puts("tt ©ž¡ª¡ª¡ª¡ª©È¡ý¡ü©À¡ª¡ª¡ª¡ª©Œ");
        else if(i==0||i==3||i==6)
            puts("tt ©À¡ª¡ª¡ª¡ª©È¡ý¡ü©À¡ª¡ª¡ª¡ª©È");
        else
            puts("tt ©À¡ª¡ª¡ª¡ª©Èt ©À¡ª¡ª¡ª¡ª©È");
    }
    puts("ttt   ©Š    ©Š");
    printf("ttt   ©Š¡ý¡ü©Š");
    /*Êä³ö³µ¿âµÄÆœÃæÊŸÒâÍŒ*/
    gotoxy(15,0);
        printf("©°¡ª¡ú x");
    gotoxy(15,1);
        printf("©Š");
    gotoxy(15,2);
        printf("¡ý");
    gotoxy(15,3);
        printf("y");
    gotoxy(14,0);
        printf("0");
    /*¶Ô×ø±êÊä³öÉèÖÃ*/
}
void Declare()
{
    Sleep(1000);
    int speed=200;
    int i;
    gotoxy(38,6);
    char s[][3]={"Ö£","ÖØ","Éê","Ã÷",
        "±Ÿ","³Ì","Ðò","Ϊ","ÕÅ","ì÷","×Ô","Ö÷","ŽŽ","ÐÂ","¿ª","·¢",
        "Ÿø","ÎÞ","µÁ","°æ","»ò","Õß","Øâ","ÇÔ","Ëû","ÈË","Ö®","ÏÓ","#"};
    for(i=0;strcmp(s[i],"#");i++)
    {
        printf("%s",s[i]);
        Sleep(speed);
        if(i==3)
            gotoxy(30,8);
        if(i==15)
            gotoxy(30,10);
    }
    Sleep(1000);
    system("cls");
    Print_Left_Form();
    char s_1[][3]={"µ±","Ç°","œø","³ö","³µ","¿â","Ïû","Ï¢","#"};
    gotoxy(10,2);
        puts("šI");
    Sleep(speed);
    gotoxy(13,3);
    for(i=0;strcmp(s_1[i],"#");i++)
    {
        printf("%s",s_1[i]);
        Sleep(speed);
    }
    Sleep(1000);
    system("cls");
    Print_Left_Form();
    gotoxy(18,14),printf("¡û ");
    char s_2[][3]={"µ±","Ç°","ÅÅ","¶Ó","³µ","ÁŸ","Œ°","Æä","³µ","ÅÆ","ºÅ","#"};
    for(i=0;strcmp(s_2[i],"#");i++)
    {
        printf("%s",s_2[i]);
        Sleep(speed);
    }
    Sleep(1000);
    system("cls");
    Print_Right_Form();
    Fun();
    gotoxy(32,4);
    char s_3[][3]={"ÏÔ","ÊŸ","µ±","Ç°","±Ÿ","µØ","ʱ","Œä","#"};
    for(i=0;strcmp(s_3[i],"#");i++)
    {
        printf("%s",s_3[i]);
        Sleep(speed);
    }
    gotoxy(49,3);
        puts("šJ");
    Sleep(speed);
    Sleep(1000);
    system("cls");
    Print_Right_Form();
    Fun();
    gotoxy(24,8);
    char s_4[][3]={"Ò»","С","ʱ","ÄÚ","œø","¡¢","³ö","µÄ","³µ","ÁŸ","Êý","#"};
    for(i=0;strcmp(s_4[i],"#");i++)
    {
        printf("%s",s_4[i]);
        Sleep(speed);
    }
    gotoxy(47,7);
        puts("šJ");
    gotoxy(47,9);
        puts("šK");
    Sleep(1000);
    system("cls");
    Print_Right_Form();
    Fun();
    char s_5[][3]={"œø","¡¢","³ö","¿â","³µ","ÁŸ","ÐÅ","Ï¢","#"};
    gotoxy(28,18);
    for(i=0;strcmp(s_5[i],"#");i++)
    {
        printf("%s",s_5[i]);
        Sleep(speed);
    }
    puts("  ¡ú");
    Sleep(1000);
    system("cls");
    Print_Garage();
    char s_6[][3]={"³µ","¿â","×ø","±ê","#"};
    gotoxy(0,2);
    for(i=0;strcmp(s_6[i],"#");i++)
    {
        printf("%s",s_6[i]);
        Sleep(speed);
    }
    gotoxy(9,1);
        printf("šJ");
    Sleep(1000);
    system("cls");
    Print_Garage();
    char s_7[][3]={"³µ","¿â","¶þ","ά","Æœ","Ãæ","ÊŸ","Òâ","ÍŒ","#"};
    gotoxy(47,11);
        printf("¡û ");
    for(i=0;strcmp(s_7[i],"#");i++)
    {
        printf("%s",s_7[i]);
        Sleep(speed);
    }
    Sleep(1000);
    system("cls");
}
void Print_Right_Info()
{
    int i=0;
    char menu[][4]={"¿Õ","Žú","±í","žÃ","³µ","λ","¿É","ÒÔ","Í£","³µ",
        "¡ö","Žú","±í","žÃ","³µ","λ","ÒÑ","ÓÐ","³µ","Í£",
        "·Å","Çë","°Ž","¡ü ","¡ý ","¡û ","¡ú ","œø","ÐÐ","Ñ¡",
        "Ôñ","Òª","œø","Èë","µÄ","³µ","λ","##"};
    gotoxy(59,12);
        printf("³µÁŸÐÅÏ¢");
    gotoxy(53,15);
    while(strcmp(menu[i],"##"))
    {
        if(i==10)
            gotoxy(53,17);
        if(i==20)
            gotoxy(53,19);
        if(i==28)
            gotoxy(53,21);
        if(i==40)
            gotoxy(53,23);
        printf("%s",menu[i++]);
        Sleep(200);
    }
    Sleep(1000);
}
void Repair_Road_Sign()
{
    gotoxy(29,3);
        printf("¡ý¡ü");
    gotoxy(29,9);
        printf("¡ý¡ü");
    gotoxy(29,15);
        printf("¡ý¡ü");
    gotoxy(29,END-1);
        printf("¡ý¡ü");
}
void Print_Number(int n)
{
    Sleep(500);
    int a[5];
    memset(a,0,sizeof(a));
    int i;
    i='A',i+=n%10;  //œ«³µÅƺŵÄ×îºóһλת»¯³ÉŽóÐŽ×ÖÄž£¬ÒÔ±ãÃÀ¹Û
    printf("%c ",i);
    i=4;
    while(n)
    {
        a[i--]=n%10;
        n/=10;
    }
    for(i=0;i<5;i++)
    {
        printf("%d",a[i]);
        Sleep(300);
    }
}
bool Check_Space()
{
    for(int i=0;i<10;i++)
        if(Garage[0][i]==0||Garage[1][i]==0)
            return 1;
        return 0;
        /* 0Žú±í²»ŽæÔÚ¿Õ³µÎ»£¬1Žú±íŽæÔÚ¿Õ³µÎ»*/
}
bool Check_Car()
{
    Car *p=Head_Out->next;
    while(p)
    {
        if(p->probability)
        {
            return 1;
        }
        p=p->next;
    }
    return 0;
    /* 0Žú±í³µ¿âÀï²»ŽæÔÚÔÚ³µ£¬1Žú±í³µ¿âÀïŽæÔÚ³µ,ŽæÔÚ³µ²»ÊÇŒòµ¥µÄŽæÔÚ£¬ÒªŒì²éŽæÔÚÊÇ·ñÄÜ¿ª×ߵijµ*/
    /*ÓÉÓÚÉ挰µœ¶ÔžÅÂʵČìË÷£¬¹ÊÖ±œÓ¶Ô³ö¿âÁŽ±íŒìË÷*/
}
void Select_Continue()
{
    gotoxy(31,4);
        printf("Ò»žöСʱ¹ýºó¡£¡£¡£¡£¡£¡£");
    gotoxy(26,6);
        printf(" ¡ú ŒÌÐø¹ÜÀí        ²é¿ŽÊÕÈë");
    char c;
    int flag=0;
    while(c=getch(),c!='r')
    {
        switch(c)
        {
        case 75:
        case 77:
            if(flag%2)
            {
                gotoxy(42,6);
                    printf("  ");
                gotoxy(27,6);
                    printf("¡ú");
                flag=0;
            }
            else
            {
                gotoxy(27,6);
                    printf("   ");
                gotoxy(42,6);
                    printf("¡ú");
                flag=1;
            }
            break;
        default:break;
        }
        gotoxy(0,0);
    }
    if(flag)//²é¿ŽÊÕÈë
    {
        system("cls");
        gotoxy(32,5);
            printf("Ä¿Ç°×ÜÊÕÈëΪ£º%.2lfnn",Sum_Money);
        gotoxy(26,8);
            printf(" ¡ú ŒÌÐøÔËÐР       Í˳ö³ÌÐò");
        gotoxy(0,0);
        flag=0;
        while(c=getch(),c!='r')
        {
            switch(c)
            {
            case 75:
            case 77:
                if(flag%2)
                {
                    gotoxy(42,8);
                        printf("  ");
                    gotoxy(27,8);
                        printf("¡ú");
                    flag=0;
                }
                else
                {
                    gotoxy(27,8);
                        printf("   ");
                    gotoxy(42,8);
                        printf("¡ú");
                    flag=1;
                }
                break;
            default:break;
            }
            gotoxy(0,0);
        }
        if(flag)
        {
            gotoxy(28,10);
                printf("©°¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª©Ž");
            gotoxy(28,11);
                printf("©Š   лл¹ÛÉÍ£¬ÔÙŒû£¡£¡£¡ ©Š");
            gotoxy(28,12);
                printf("©ž¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª©Œ");
            exit(0);
        }
    }
}
void Insert_Out_Car(int x,int y)   //ËùÓÐÔÚ³µ¿âÀï³µÁŸµÄ¶ÓÁÐ,x,yÊÇÕÒµœ¿ÕλµÄ×ø±ê
{
    Car *p=Head_Out;
    while(p->next)
        p=p->next;   // ÕÒµœËùÓÐÔÚ³µ¿âÀï³µµÄ¶Óβ
    p->next=(Car *)malloc(sizeof(Car));   /*œøÐÐÁ¬œÓ*/
    if(p->next==NULL)
    {
        system("cls");
        gotoxy(38,6);
            puts("³ÌÐò±ÀÀ£");
        exit(0);
    }
    p=p->next,p->next=NULL;
    p->local.x=x;
    p->local.y=y;  //³µ¿âÀï×îºóÒ»ÁŸ³µµÄ×ø±ê
    Car *q=Head_In->next;
       /* ÓÉÓÚÅŶӵijµÊÇÒ»žö¶ÓÁУ¬ÒòŽËÅÅÔÚ×îÇ°µÄµ±È»ÏÈœø*/
    p->number=q->number;
    p->time_insert=q->time_insert;
    p->probability=q->probability;
    p->cost=0.0;
    p->time_insert=Time;
    Head_In->next=q->next;   //ÉŸ³ýÅŶӶÓÁеĵÚÒ»žöœáµã
    free(q);
}
void Print_Car_Info(int x,int y,bool flag)
{
    gotoxy(53,14);printf("³µÅƺţºtt");
    gotoxy(50,15);printf("©À¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª©È");
    if(!flag)
    {
        gotoxy(53,16);
            printf("³ö¿â×ø±ê£ºtt");
    }
    else
    {
        gotoxy(53,16);
            printf("Èë¿â×ø±ê£ºtt");
    }
    gotoxy(50,17);
        printf("©À¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª©È");
    gotoxy(53,18);
        printf("ÓŠœÉ·ÑÓãºtt");
    gotoxy(50,19);
        printf("©À¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª©È");
    gotoxy(53,20);
        printf("Í£ÁôʱŒä£ºtt");
    gotoxy(50,21);
        printf("©À¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª©È");
    gotoxy(53,22);
        printf("Í£Áôʱ¶Î£ºtt ");
    Car *p=Head_Out->next;
    while(p)
    {
        if(p->local.x==x&&p->local.y==y)
            break;
        p=p->next;
        Get_Time();
    }/*ÕÒµœ×îºóÒ»žöœáµã*/
    gotoxy(65,14);
        Print_Number(p->number);       //Êä³ö³µÅƺÅ
    Sleep(400);
    gotoxy(65,16);
        printf("(%d,%d)",x,y);    //Êä³ö×ø±ê
    Get_Time();
    Sleep(400);
    gotoxy(65,18);
        printf("%.2lf",p->cost);   //Êä³ö·ÑÓÃ
    Sleep(400);
    gotoxy(65,20);
        printf("%d Сʱ",p->probability); //Êä³öÍ£ÁôʱŒä£¬ÊµŒÊÉÏŸÍÊÇžÅÂÊ
    Sleep(400);
    Get_Time();
    gotoxy(65,22);
        printf("%02d ¡ú %02d",(p->time_insert)%24,(p->time_insert+p->probability)%24);//Êä³öÍ£ÁôʱŒä¶Î
    Sum_Money+=p->cost;   //×ÜÊÕÈëÄÜÔÙÓгµÁŸ³ö¿âʱŒÆËãÒ»ŽÎ
}
Coordinate Find_Garage()  //²éÕÒ¿ÉÒÔÍ£³µµÄ³µÎ»
{
    Coordinate p;    //p¿ØÖƳµ¿âµÄ×ø±ê
    int x=30,y=2;  //x,y·Ö±ð¿ØÖƹâ±êµÄ×ø±ê
    gotoxy(x-1,y);
        printf("¡û");  //³õÊŒ¹â±ê
    for(p.y=0;p.y<10;p.y++,y+=2)
    {
        p.x=0;
        while(p.x<2)
        {
            gotoxy(x,y);
            if(p.x) printf(" ¡ú");
            else
            {
                gotoxy(x-1,y);
                    printf("¡û");
            }
            if(Garage[p.x][p.y])
                Get_Time();
            else
            {
                Sleep(SELCET);
                Sleep(500);
                return p;
            }
            gotoxy(0,END-1);
            Sleep(SELCET);
            p.x++;
            gotoxy(x,y);
                printf("  ");
            Repair_Road_Sign();
        }
    }
    return p;
}
void Enter_Into(Coordinate p)  //Ê»È뺯Êý
{
    int x=p.x;
    int y=p.y;
    int i;
    for(i=1;i<END-2*p.y-1;i++)
    {
        if(i>3)
        {
            gotoxy(31,END-i+3);
                printf(" ");
        }
        gotoxy(31,END-i);
            printf("¡ö");
        Get_Time();
        if(END-i==12||END-i==20||END-i==18||END-i==6)
        {
            gotoxy(31,END-i+3);
                printf("¡ü");
        }
        Sleep(SPEED_CAR);
        Get_Time();
    }
    if(p.x) //œøµœÓÒ±ß
    {
        gotoxy(33,2*p.y+2);
            printf("¡ö");
        gotoxy(31,2*p.y+4);
            printf(" ");
        Sleep(SPEED_CAR);
        Get_Time();
        gotoxy(35,2*p.y+2);
            printf("¡ö");
        Get_Time();
        gotoxy(31,2*p.y+3);
            printf(" ");
        Sleep(SPEED_CAR);
        Repair_Road_Sign();
        gotoxy(32,2*p.y+2);
            printf(" ¡ö¡ö¡ö");
        gotoxy(34,2*p.y+2);
            printf("  ¡ö¡ö¡ö");
        Sleep(SPEED_CAR);
    }
    else   //œøµœ×ó±ß
    {
        gotoxy(29,2*p.y+2);
            printf("¡ö");
        gotoxy(32,2*p.y+4);
            printf(" ");
        Sleep(SPEED_CAR);
        gotoxy(27,2*p.y+2);
            printf("¡ö");
        Get_Time();
        gotoxy(31,2*p.y+3);
            printf(" ");
        Sleep(SPEED_CAR);
        Repair_Road_Sign();
        gotoxy(24,2*p.y+2);
            printf("¡ö¡ö¡ö  ");
        Sleep(SPEED_CAR);Get_Time();
        gotoxy(20,2*p.y+2);
            printf("¡ö¡ö¡ö   ");
        Sleep(SPEED_CAR);
    }
}
bool Must_Drive_Out()  //Í£³µŽïµœ4Сʱ£¬±ØÐëÒªÀ뿪µÄ³µ
{
    Car *p=Head_Out->next;
    while(p)
    {
        if(p->probability==4)
            return 1;
        p=p->next;
    }
    return 0;
}
Coordinate Select_Garage()   //Ñ¡Ôñ³ö¿âµÄλÖÃ
{
    Car *q=NULL;
    int flag;
    bool mark=0;  //0±íÊö²»ŽæÔÚÕâÀà³µ
    int number[20];
    memset(number,0,sizeof(number));
    while(mark==0)
    {
        if(Must_Drive_Out()) flag=4;
        else
        {
            flag=rand()%10;
            /*
            ³ö³µ¿âʱžÅÂÊŒÆËã³öÄÄÒ»Àà,Ëæ»úÊýÓŠÔÚ[0,9]Ö®Œä
            [0,1)±íÊŸÍ£Áô1Сʱ³µÀ뿪µÄžÅÂÊ
            [1,2]±íÊŸÍ£Áô2Сʱ³µÀ뿪µÄžÅÂÊ
            [3,5]±íÊŸÍ£Áô3Сʱ³µÀ뿪µÄžÅÂÊ
            [6,9]±íÊŸÍ£Áô4СʱÀ뿪µÄžÅÂÊ
            */
            if(flag==0)
                flag=1;
            else if(flag<=2)
                flag=2;
            else if(flag<=5)
                flag=3;
            else if(flag<=9)
                flag=4;
        }
        /*ÏÂÃæÊǶÔÕâÀà³µÊÇ·ñŽæÔÚ×öŒìË÷£¬ÔÚ³ö³µ¶ÓÁÐÀïŒìË÷*/
        q=Head_Out->next;
        while(q)
        {
            if(q->probability==flag)
            {
                mark=1;  //ŽæÔÚÕâÀà³µ
                break;
            }
            q=q->next;
        }
    }
    /* ÒÔÉÏÊǶԳö³µžÅÂʵČÆËã*/
    /*×îºóÈ·¶šÒª³öµÄ³µÁŸÊÇÄÄÒ»Àà*/
    q=Head_Out->next;
    int k=0;
    while(q)
    {
        if(q->probability==flag)
            number[k++]=q->number;
        q=q->next;
    }
    k=rand()%k;    //Ëæ»úÑ¡³öÒ»ÀàµÄÆäÖÐÒ»žö
    flag=number[k];    //ºÅÂë
    q=Head_Out->next;
    int a,b;
    while(q)
    {
        if(q->number==flag)  //ÕÒµœºÅÂëÏàͬµÄ³µÁŸ
        {
            a=q->local.x;
            b=q->local.y;
            break;
        }
        q=q->next;
    }//ÓÃa,b»ñÈ¡µ±Ç°³ö¿â³µÁŸ×ø±ê
    Sleep(SELCET);
    Get_Time();
    int x=30,y=2;  //x,y·Ö±ð¿ØÖƹâ±êµÄ×ø±ê
    Print_Car_Info(a,b,0);   /*Êä³öËù³ö³µÁŸÐÅÏ¢*/
    Coordinate p;    //p¿ØÖƳµ¿âµÄ×ø±ê
    for(p.y=0;p.y<b+a;p.y++,y+=2)
    {
        p.x=0;
        while(p.x<2)
        {
            gotoxy(x,y);
            if(p.x) printf(" ¡ú");
            else    printf("¡û");
            Sleep(SELCET);
            Get_Time();
            p.x++;
            gotoxy(x,y);
                printf("  ");
            Repair_Road_Sign();
            Get_Time();
        }
    }
    if(!a)
    {
        gotoxy(x,y);
            printf("¡û");
    }
    p.x=a,p.y=b;
    Sleep(1000);
    return p;
}
void Drive_Out(Coordinate p)
{
    int x=p.x;
    int y=p.y;
    if(p.x) //ÓÒ¿ª³ö
    {
        gotoxy(34,2*p.y+2);
            printf("¡ö¡ö¡ö ");
        Sleep(SPEED_CAR);
        gotoxy(31,2*p.y+2);
            printf("¡ö¡ö¡ö  ");
        Sleep(SPEED_CAR);
        Get_Time();
        gotoxy(29,2*p.y+2);
            printf("¡ö¡ö¡ö  ");
        Sleep(SPEED_CAR);
        gotoxy(31,2*p.y+2);
            printf("¡ö ");
        Get_Time();
        gotoxy(29,2*p.y+3);
            printf("¡ö");
        Sleep(SPEED_CAR);
        gotoxy(29,2*p.y+4);
            printf("¡ö");
        gotoxy(31,2*p.y+2);
            printf(" ");
        Sleep(SPEED_CAR);
        Get_Time();
    }
    else //×󿪳ö
    {
        gotoxy(21,2*p.y+2);
            printf(" ¡ö¡ö¡ö");
        Sleep(SPEED_CAR);
        Get_Time();
        gotoxy(23,2*p.y+2);
            printf(" ¡ö¡ö¡ö");
        Sleep(SPEED_CAR);
        gotoxy(24,2*p.y+2);
            printf(" ¡ö¡ö¡ö");
        Sleep(SPEED_CAR);
        Get_Time();
        gotoxy(29,2*p.y+3);
            printf("¡ö");
        Get_Time();
        gotoxy(26,2*p.y+2);
            printf(" ");
        gotoxy(28,2*p.y+2);
            printf(" ");Sleep(SPEED_CAR);
        Get_Time();
        gotoxy(29,2*p.y+4);
            printf("¡ö");
    }
    Repair_Road_Sign();// ÐÞžŽÂ·±ê
    for(int i=5;2*p.y+i<END;i++)
    {
        gotoxy(29,2*p.y+i);
            printf("¡ö");
        gotoxy(29,2*p.y+i-3);
            printf(" ");
        Sleep(SPEED_CAR);
        Get_Time();
        if(2*p.y+i==12||2*p.y+i==18||2*p.y+i==6)
        {
            gotoxy(29,2*p.y+i-3);
                printf("¡ý");
        }
    }
    gotoxy(29,END-2);
        printf("¡ö");
    gotoxy(29,END-3);
        printf("¡ý");Sleep(SPEED_CAR);
    gotoxy(29,END-2);
        printf(" ");
    gotoxy(29,END-1);
        printf("¡ý");
    Sleep(SPEED_CAR);
}
void Delete_Car(int x,int y)
{
    Car *p,*before_p;
    if(Head_Out->next==NULL) return ;
    p=Head_Out->next;
    before_p=Head_Out;
    while(p)
    {
        if(p->local.x==x&&p->local.y==y)
        {
            before_p->next=p->next;
            free(p);
            return ;
        }
        p=p->next;
        before_p=before_p->next;
    }
}
void Update_Info()
{
    Car *p=Head_Out->next;
    while(p)
    {
        p->probability++;
        p->cost+=PRICE;
        p=p->next;
    }
}
void Printf_Queue_Number()
{
    Car *p=Head_In->next;
    int x=0;
    while(p)
    {
        if(x<9)
        {
            gotoxy(7,6+x*2);
            printf("%c %05d",p->number%10+'A',p->number);
        }
        x++;
        p=p->next;
    }
    gotoxy(7,6+x*2);
        puts("       ");//²Á³öÏÂÒ»ÌõŒÇÂŒ
    gotoxy(0,0);
}
void Insert_Intit_Car(int n)   //ËùÓÐÅŶӳµÁŸµÄ¶ÓÁÐ
{
    Car *p=Head_In; //Í·œáµã
    while(p->next)
    p=p->next;
    for(int i=0;i<n;i++)
    {
        p->next=(Car *)malloc(sizeof(Car));
        if(p->next==NULL)
        {
            system("cls");
            gotoxy(38,6);
                puts("³ÌÐò±ÀÀ£");
            exit(0);
        }
        p=p->next,p->next=NULL;
   &nb

void gotoxy(int x,int y)//设置字符显示位置
{
     HANDLE hOut=GetStdHandle(STD_OUTPUT_HANDLE);
     COORD loc={x,y};
     SetConsoleCursorPosition(hOut,loc);
 }
void drawmap(char *mp,char *omp,ssnake *snp)
 {//画场景
    char pel[]="  ◆■●";
     int i,j,k;
     for(i=0;snp[i].f>0;i++)
     {
         j=4;//蛇身
        if(i==0)j=2;//蛇头
        mp[snp[i].x*height+snp[i].y]=j;
     }
     for(k=0;k<width*height;k++)
     {
         if(mp[k]!=omp[k])
         {
             i=k/height;j=k%height;
             color(15);
             if(mp[k]==6)color(13);
             omp[k]=mp[k];
             gotoxy(i,j);
             printf("%c",pel[mp[k]]);
             printf("%c",pel[mp[k]+1]);
         }
     }
 }
void rndapple(ssnake *snp,int *px,int *py)
 {//产生苹果随机位置
    bool f=false;
     int i,j,k=0,z[1500][2]={0};
     char map[width][height]={0};
     *px=-1;*py=-1;
     for(i=0;snp[i].f>0;i++)map[snp[i].x][snp[i].y]=1;
     for(i=0;i<width;i+=2)
         for(j=0;j<height;j++)
         {
             if(map[i][j]==0)
             {
                 z[k][0]=i;
                 z[k][1]=j;
                 k++;
             }
         }
     if(k>0)
     {
         i=rand()%k;
         *px=z[i][0];
         *py=z[i][1];
     }
 }

//---------------------------
void point(int x,int y)//起始点(0,0)
{
 int i,dx=0,dy=0;
 static int x0=0,y0=0,j=1;//x0,y0表示当前行和当前列
 if(x==-1&&y==-1)  {x0=y0=0;j=1;}//用point(-1,-1)刷函数-相对于(0,0)点开始打点,未刷屏则相对于
 //当前点,一般用于重新绘图时
 if(x==0&&y==0&&j==1) { j=0;
 if(x==h->x&&y==h->y)  printf("○");
 else if(x==24||x==0||y==0||y==20)     {colorf(0x0f); printf("□"); colorf(9);}
    else printf("●");return;}
 if(x==0&&y==0&&j==0)  return;//打两次(0,0)时略去第二个
 dx=x-x0;
 if(!dx) dy=y-y0;  //dx=0,同一行
 else   dy=y;
 if(dy<0||dx<0)  return;
 if(x==0&&y!=0&&dy==y&&j)    printf("  ");
 if(dy==0&&y!=0)   return;
 for(i=0;i<dx;i++)     putchar('n');
    if(dx&&y!=0)       printf("  ");
    for(i=1;i<dy;i++)      printf("  ");
    //putchar(4);
 //--------判断蛇头---------
 if(x==h->x&&y==h->y)     {colorf(color);printf("■");colorf(9);}
 else if(x==24||x==0||y==0||y==20)   {colorf(0x0f); printf("□"); colorf(9);}
 else printf("●");
 //---------------
 x0=x;
 y0=y;
}//注:每次打的点必须在前一个点后面,且第一次调用时必须先清屏
// ⊙★○▲△▽○◇☆♀♂㊣╲■▕╱╲▏▏卐卍♀◢◥◤
//--------整理pic-------
void  sort(char*tx,char*ty)
{
    int i,j,t,k;
 int m,n,l;
 //----第一步排tx(并保持tx与ty之间的对应关系)---
 for(i=1;i<p0.pnum;i++)
 {
  t=tx[i];
  k=ty[i];
  for(j=i-1;j>=0;j--)
   if(t<tx[j]) {  tx[j+1]=tx[j]; ty[j+1]=ty[j]; }
   else break;
  tx[j+1]=t;
  ty[j+1]=k;
 }
   //--------第二步逐行排ty----------
 
    for(i=tx[0],j=0;i<=tx[p0.pnum-1];i++)//从第tx[0]到tx[p0.pnum-1]行 
 { 

int main(void)
 {
     char map[width][height]={0},oldmap[width][height]={0};//场景 0:空 2:蛇头 4:蛇身 6:苹果
    int mx=0,my=0;//蛇头移动方向
    int apx=-1,apy=-1;//苹果位置
    int i,j,sc=0,ef=0,sp=210;
     long t1,nt;//计时
    char a;
     bool pf=false;//暂停标志
    ssnake sn[1500]={0};//蛇,最长1500个关节,关节数据结构为ssnake,
    nt=clock();
     t1=nt;
     system("mode con cols=80 lines=25");
     HideCursor();
     for(i=0;i<height;i++){gotoxy(width,i);printf("‖");}
     color(14);
     gotoxy(width+4,12);printf("控制:←↑→↓");
     gotoxy(width+4,14);printf("空格:暂停");
     gotoxy(width+4,16);printf("ESC :退出");
     gotoxy(width+4,18);printf("得分:%d",sc);
     sn[0].f=1;sn[0].x=30;sn[0].y=10;sn[1].f=0;//蛇头位置
    srand((unsigned)time(NULL));
     while(1)
     {
         nt=clock();
         if(kbhit())   //判断击键
        {
             a=getch();
             if(a<0)
             {
                 a=getch();
                 if(a=='K'&&mx!=2){mx=-2;my=0;}
                 if(a=='M'&&mx!=-2){mx=2;my=0;}//左右移动,由于用汉字符号表示,所以步长为2
                if(a=='H'&&my!=1){my=-1;mx=0;}
                 if(a=='P'&&my!=-1){my=1;mx=0;}//上下移动
            }
             else
             {
                 if(a==27){ef=1;break;}//人为退出
                if(a==32)pf=!pf;
             }
         }
         if(!pf&&nt-t1>sp)
         {
             t1=nt;
             for(i=0;sn[i].f>0;i++);
             for(j=i;j>0;j--){sn[j].x=sn[j-1].x;sn[j].y=sn[j-1].y;}//蛇身前进
            sn[0].x+=mx;sn[0].y+=my;//蛇头前进
            if(sn[0].x<0||sn[0].x>=width||sn[0].y<0||sn[0].y>=height){ef=2;break;}//越界
            for(j=1;sn[j].f>0;j++){if(sn[j].x==sn[0].x&&sn[j].y==sn[0].y)break;}
             if(sn[j].f!=0){ef=3;break;}//判断是否自己吃自己
            if(sn[0].x==apx&&sn[0].y==apy)//吃了苹果
            {
                 sn[i].f=1;sn[i+1].f=0;apx=-1;apy=-1;sp--;
                 sc=sc+10+i;//成绩累加
                gotoxy(64,18);printf("得分:%d",sc);
             }
         }
         for(i=0;i<width;i++)
             for(j=0;j<height;j++)
                 map[i][j]=0;
         if(apx<0&&apy<0)rndapple(sn,&apx,&apy);//获取苹果位置
        if(apx>=0&&apy>=0)
             map[apx][apy]=6;//设置苹果
        else
         {//已经没有空位画苹果位置了,说明蛇足够长,这是不可能的
            gotoxy(62,24);
             printf("厉害,满分!");
             break;
         }
         drawmap(&map[0][0],&oldmap[0][0],sn);
     }
     gotoxy(25,23);
     color(15);
     if(ef==1)printf("不玩了!Game Over!n");
     if(ef==2)printf("越界死翘翘!Game Over!n");
     if(ef==3)printf("吃自己死翘翘!Game Over!n");
 }

   
       l=0;  //j的最大值不能超过p0.pnum
       while(tx[j]==i)
        //此处只依靠tx[*]的值去做判断,容易出现超出数组寻址范围的情况,因为如果对于未定义的内存

        //空间(此处是明确的,tx后的地址就是ty的地址),其值虽然相对
        //不变,但总体(理论上)应该是不确定的(这可能取决于各自的机器),因此尽管超出规定的

        //范围,仍然有可能
        //满足这个判别式,从而造成寻址越界的情况
        {  
            if(j==p0.pnum)   break;//后来加的限制条件,没有它会出现一系列的奇葩现象
            j++;l++;
         }//得到tx[*]行的点数l
         //当tx[*]全赋0且ty[0]=0,此处寻址越界,由于tx[*]寻址越界后,寻到了ty[*]处,他们地址是连续的,
         //而此时的ty[0]正好满足ty[0]=tx[0]=0,这就造成了寻址越界,因此加上一条限制语句(如上),
         //也证明上面的猜想是正确的
         if(l==1||l==0)  continue;
        //*************************************
    for(m=j-l;m<j-1;m++)
    { k=m;      
      for(n=m+1;n<j;n++)
      if(ty[n]<ty[k] )  k=n;
      if(k!=m)
     {
     t=ty[k];
     ty[k]=ty[m];
     ty[m]=t;}  }
 }
}
//-------光标定位-------------------------
void  gotoxy(int x,int y)
{
 COORD c;
 c.X=x;c.Y=y;
 SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),c);
}
 //--------------------------------------
void picture()
{
   int i;
   sort(p0.x,p0.y);
    //------刷新--------
   point(-1,-1);
   system("cls");
//--------------------------------
  for(i=0;i<p0.pnum;i++)
  //{gotoxy(p0.y[i]*2,p0.x[i]);printf("□"); } //测试gotoxy()
  point(p0.x[i],p0.y[i]);
  putchar(10);
}
//------------------------------
void s_play(Snake *h);
void s_add_t(char a,char b)//加尾
{
 //---开辟新节点并链接---
    tp2=(Snake*)malloc(LEN);
 tp2->x=a;
 tp2->y=b;
    tp1->next=tp2;
    tp2->last=tp1;
 tp2->next=NULL;
 //-------------------
 t=tp1=tp2;
}
void s_add_h(char a,char b)//加头
{
  hp2=(Snake*)malloc(LEN);
  hp2->x=a;
  hp2->y=b;
  hp2->last=NULL;
  hp2->next=hp1;
  hp1->last=hp2;
  h=hp1=hp2;
}
void  s_sub(char a)     
{  
   Snake* p;
    if(a>0){
     p=h;
  hp1=h=h->next;//此处要当心hp1应始终和h保持同步,在创建一个新h时默认hp1指向当前h,此处若不更新
  //hp1将为NULL,导致链接错误
  h->last=NULL;} //删去蛇头
 if(a<0){
  p=t;
  tp1=t=t->last;
  t->next=NULL;
 }//删去蛇尾
    free(p);
}   
void s_play(Snake *p)

 int i=89;//前面点做图框
 //--------------(墙壁)------------------------
 int j=0;
 for(j=0;j<20;j++)
 { p0.x[j]=24; p0.y[j]=j;             }
 for(j=0;j<20;j++)
 { p0.x[j+20]=0;p0.y[j+20]=j;   }
 for(j=0;j<25;j++)
 { p0.x[j+40]=j;p0.y[j+40]=0;   }
  for(j=0;j<25;j++)
 { p0.x[j+65]=j;p0.y[j+65]=20; }
//---------------------------------------------
 if(f)   { p0.x[i]=m=rand()%23+1; p0.y[i]=n=rand()%19+1;  f=0;}//放置食物
 else  {   p0.x[i]=m;  p0.y[i]=n; }
 //----------- -----------------
 i++;
 p0.x[i]=p->x;
 p0.y[i]=p->y;
// printf("%dt%dn",p->x,p->y);
 i++; 
   do    
 {
  if(p->next==NULL)   break;
  p=p->next;
     p0.x[i]=p->x;
  p0.y[i]=p->y;
 // printf("%dt%dn",p->x,p->y);
  i++; 
 } while(p->next!=NULL);
     p0.pnum=i;
  //getch();
  colorf(9);
  picture();
  colorf(10);
  printf("n当前得分:%dn当前蛇头(%d,%d)t当前食物(%d,%d)n当前步数:%d(step<=50)t未吃到食物数:%dn",score,h->x,h->y,m,n,step,foodlose);
  printf("按z可自动行走步数:%dt按q退出t按e暂停n",a);
  gotoxy(48,8);
  printf("%st%s",__DATE__,__TIME__);
  gotoxy(2,23); //可以在不破坏原图的情况下定位光标
//system("cls");point(-1,-1);point(23,2);
  printf("版权制作 吴侯所有  213.6.23");
}
void init()
{
   system("color 07");
//------食物设置---------
   srand(time(NULL));
   f=1;
  m=n=0;
  //---------使用说明--------
  printf("nnnnnnntt按键盘w、s、a、d键控制蛇的上下左右移动n");
  printf("tt按z键可自动行走n");
  printf("tt按键盘q键选择退出 按e键暂停n"); 
  printf("tt注意:当蛇头触碰到墙壁时会:game over!ntt");
  printf("输入你希望的蛇头颜色(0-15):ntt");
  scanf("%d",&color);
  system("pause");
  //getch();
system("color 09");
 //-----------------------
    t=h=hp1=tp1=(Snake*)malloc(LEN);
    tp1->last=NULL;
    tp1->next=NULL;//空链表
 tp1->x=8;
 tp1->y=4; //蛇头
 //-----初始化----------
    s_add_t(8,5);
    s_add_t(8,6);
    s_add_t(8,7);
    s_play(h);
   //----------------
}
void main()
{
 char c;
 char c_='d';
 char c__='a';
 //--------函数声明-------
 void save();
 void load();
 void creat();
 void gameover();
 void move(char c);
 char autogo();
 //------------------------
 creat();//外部文件生成判断
 init();
 while(1)
 {
        if(kbhit()) { c_=c=getch();  move(c); }
  else {
   if(c_=='e'||c_=='z'||c_=='E'||c=='Z') c_=c__;
   move(c_);
   c__=c_;
   _sleep(200);}
 }
 
}
//-----方向控制-------------------------
void move(char c)
{
 if(h->x<=0||h->x>=24||h->y<=0||h->y>=20)   gameover(); //撞墙判断
 switch(c)
 {
   case 'W':
   case 'w':{
       {s_sub(-1);s_add_h(h->x-1,h->y);step++; }
         break;  }
   case 'S':
   case 's':{ 
       {s_sub(-1);s_add_h(h->x+1,h->y);step++;}
         break;}
    case 'A':
    case 'a':{
     {s_sub(-1);s_add_h(h->x,h->y-1);step++;}
        break;  }
 case'D':
    case 'd':{
     { s_sub(-1);s_add_h(h->x,h->y+1);step++; } 
          break; }
 case'Q':
    case 'q' : {  system("cls");
     system("color 0a"); printf("nnnnnnnnnnnnnttt退出?('y' or 'n')ntttt");
        if(getchar()=='y'||getchar()=='Y')    {printf("ttt"); exit(0); }
        else   system("color 09"); }
 }
    //putchar(c_);
 //getch();
 if(h->x<=0||h->x>=24||h->y<=0||h->y>=20)   gameover(); //撞墙判断
 if(c=='z'||c=='Z')   while(a) { move(autogo());a--; }
 if(c=='e'||c=='E')   system("pause"); //暂停
    if((h->x==m&&h->y==n)||(t->x==m&&t->y==n)) 
 { s_add_t(t->x,t->y+1); step=0;score++;f=1;printf("a");
   if(a<20) a=20;else a++;                                         }  //吃到食物,增加节点,并重新放置食物
    if(step==50) { step=0;f=1;foodlose++;printf("a");    }//走完u步未吃到食物则更新食物
    s_play(h);
}
//------------自动寻找食物演示----------------
char   autogo()
{
 char c=0;
      if(h->x>m)  c='w';
     if(h->x<m)  c='s';
  if(h->x==m){
        if(h->y>n) c='a';
        if(h->y<n) c='d'; }
 return c;

}
//------------------------------------------
void gameover()

    load();
       system("cls");
    system("color 0a");
    printf("nnnnnnnnntttgame over!ntt");
    printf("t您的得分是:%dnttt",score);
    printf("历史最高分数:%dnttt",_score);
    save();
    getch(); 
    Sleep(1000);exit(0);
}
//-----------------数据保存-----------------------
 void save()
 {
  FILE *fp;
  fp=fopen("mtcs.mine","w");
  if(fp==NULL) printf("nttt数据保存失败!n");
     if(score<_score) {fclose(fp); return;} 
  fprintf(fp,"%d",score);
  fclose(fp);
 }
//------------------数据提取------------------
 void load()
 {
  FILE *fp;
  fp=fopen("mtcs.mine","r");
  if(fp==NULL)  printf("nttt加载数据失败!n");
  fscanf(fp,"%d",&_score);
  fclose(fp);
 }
 //------------------------------------------
 void  creat() //判断文件是否存在,若无则新建
 {
  void save();
  FILE *fp;
     fp=fopen("mtcs.mine","r");
  if(fp==NULL)   save();
  else fclose(fp);
}
//-------------------------------------------------