模拟停车场(第二部作品)

作者在 2012-01-06 13:25:01 发布以下内容
#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ÎÂÜ°ÌáÊŸ£¬ÄãµÄÊäÈëÃÜÂëÓÐÎó\n\n");
    }
    printf("\nÇëÊäÈëÃÜÂë £º ");
    while(c=getch(),c!='\r')
    {
        if(c==8)
        {
            system("cls");
            if(flag)
                printf("\nÎÂÜ°ÌáÊŸ£¬ÄãµÄÊäÈëÃÜÂëÓÐÎó\n\n");
            printf("\nÇëÊäÈëÃÜÂë £º ");
            if(count>0)
            {
                key[--count]='\0';
                for(int i=0;i<count;i++)
                    printf("¡ñ");
            }
        }
        else if(count>=0)
        {
            printf("¡ñ");
            key[count++]=c,key[count]='\0';
        }
    }
    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("\t\t\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("³µÅƺţº\t\t");
    gotoxy(50,15);
        printf("©À¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª©È");
    gotoxy(53,16);
        printf("³ö¿â×ø±ê£º\t\t");
    gotoxy(50,17);
        printf("©À¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª©È");
    gotoxy(53,18);
        printf("ÓŠœÉ·ÑÓãº\t\t");
    gotoxy(50,19);
        printf("©À¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª©È");
    gotoxy(53,20);
        printf("Í£ÁôʱŒä£º\t\t");
    gotoxy(50,21);
        printf("©À¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª©È");
    gotoxy(53,22);
        printf("Í£Áôʱ¶Î£º\t\t ");
}
void Print_Garage()
{
    system("cls");
    gotoxy(0,0);
    puts("\n\t\t ©°¡ª¡ª¡ª¡ª©Ð¡ª¡ª©Ð¡ª¡ª¡ª¡ª©Ž");
    for(int i=0;i<10;i++)
    {
        if(Garage[0][i]) printf("\t\t ©Š ¡ö¡ö¡ö ");
        else printf("\t\t ©Š  \t");
        if(Garage[1][i]) puts("\t    ¡ö¡ö¡ö ©Š");
        else  puts("\t    \t   ©Š");
        if(i==9)
            puts("\t\t ©ž¡ª¡ª¡ª¡ª©È¡ý¡ü©À¡ª¡ª¡ª¡ª©Œ");
        else if(i==0||i==3||i==6)
            puts("\t\t ©À¡ª¡ª¡ª¡ª©È¡ý¡ü©À¡ª¡ª¡ª¡ª©È");
        else
            puts("\t\t ©À¡ª¡ª¡ª¡ª©È\t ©À¡ª¡ª¡ª¡ª©È");
    }
    puts("\t\t\t   ©Š    ©Š");
    printf("\t\t\t   ©Š¡ý¡ü©Š");
    /*Êä³ö³µ¿âµÄÆœÃæÊŸÒâÍŒ*/
    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("Ä¿Ç°×ÜÊÕÈëΪ£º%.2lf\n\n",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("³µÅƺţº\t\t");
    gotoxy(50,15);printf("©À¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª©È");
    if(!flag)
    {
        gotoxy(53,16);
            printf("³ö¿â×ø±ê£º\t\t");
    }
    else
    {
        gotoxy(53,16);
            printf("Èë¿â×ø±ê£º\t\t");
    }
    gotoxy(50,17);
        printf("©À¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª©È");
    gotoxy(53,18);
        printf("ÓŠœÉ·ÑÓãº\t\t");
    gotoxy(50,19);
        printf("©À¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª©È");
    gotoxy(53,20);
        printf("Í£ÁôʱŒä£º\t\t");
    gotoxy(50,21);
        printf("©À¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª©È");
    gotoxy(53,22);
        printf("Í£Áôʱ¶Î£º\t\t ");
    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
数学算法类 | 阅读 1141 次
文章评论,共0条
游客请输入验证码