[C]名字大战(控制台小游戏)

来源:互联网 发布:淘宝粉红色高跟鞋 编辑:程序博客网 时间:2024/05/19 19:43

去年刚进专业时做的东东...
当时RPG玩多了,然后又想到以前玩过一个flash版本的名字大战
于是便有此物

#include <stdio.h>#include <stdlib.h>#include <conio.h>#include <time.h>void game();void lvlup(int);int go();void fight(int,int);int damage(int,int);int crit(int);void miss(int,int);int heal(int);void lucky(int,int);int length(char[20]);int oratk(char[20]);int ordef(char[20]);int ordex(char[20]);int orluk(char[20]);void status();void sleep(int);//Global Valint atk[2],def[2],dex[2],luk[2];int hp[2];char name[2][20];int maxhp[2]={100,100};int win[2];int lvexp[2];int lvl[2];int god[2]={1,1};int main(){    do{        system("cls");        printf("\n\t\t\t\tName Battle  2\n");//                                   Name Battle  2        printf("\n\t\t\t\t-----Auto-----\n");//                                   -----Auto-----        printf("\n\t\t    -  Press any key to continue.  -");//            -  Press any key to continue.  -        getch();                system("cls");        printf("\n\n\n\t\t\tPress any key to play");        getch();        game();    }while(1);}void game(){    char conti='y';//continue?    win[0]=0;win[1]=0;    lvexp[0]=0;lvexp[1]=0;    lvl[0]=1;lvl[1]=1;    int winner;        system("cls");    printf("\n\tPlease enter name of player1->");    scanf("%s",name[0]);    atk[0]=oratk(name[0]);    def[0]=ordef(name[0]);    dex[0]=ordex(name[0]);    luk[0]=orluk(name[0]);    printf("\n\tPlease enter name of player2->");    scanf("%s",name[1]);    atk[1]=oratk(name[1]);    def[1]=ordef(name[1]);    dex[1]=ordex(name[1]);    luk[1]=orluk(name[1]);        if(atk[0]==17&&def[0]==10&&dex[0]==13&&luk[0]==12)        {atk[0]=def[0]=dex[0]=luk[0]=25;        god[0]=2;}    if(atk[1]==17&&def[1]==10&&dex[1]==13&&luk[1]==12)        {atk[1]=def[1]=dex[1]=luk[1]=25;        god[1]=2;}    if(atk[0]==11&&def[0]==10&&dex[0]==15&&luk[0]==15)        {atk[0]=def[0]=dex[0]=luk[0]=50;maxhp[0]=1000;        god[0]=5;}    if(atk[1]==11&&def[1]==10&&dex[1]==15&&luk[1]==15)        {atk[1]=def[1]=dex[1]=luk[1]=50;maxhp[1]=1000;        god[1]=5;}    if(atk[0]==20&&def[0]==10&&dex[0]==16&&luk[0]==13)        {atk[0]=def[0]=dex[0]=luk[0]=50;maxhp[0]=1000;        god[0]=5;}    if(atk[1]==20&&def[1]==10&&dex[1]==16&&luk[1]==13)        {atk[1]=def[1]=dex[1]=luk[1]=50;maxhp[1]=1000;        god[1]=5;}            printf("\n\n\tPress any key to continue.");    getch();    getch();    do{        hp[0]=maxhp[0];        hp[1]=maxhp[1];        winner=go();//A round.        win[winner]++;        status();        printf("\t%s wins.\n",name[winner]);        lvexp[winner]+=25*god[winner];        sleep(2);        lvlup(0);        lvlup(1);    }while(conti=='y');    if(win[0]>win[1])        winner=0;    else if(win[0]<win[1])        winner=1;    else        winner=2;    system("cls");    printf("*****Result***********************************************************\n");    printf("\tP1:%19s\t\tP2:%19s\n\n",name[0],name[1]);    printf("\t\tWIN:%2d\t\t\t\tWIN:%2d\n\n",win[0],win[1]);    if(winner==2)        printf("\t\t\t\tDraw\n");    else    printf("\t\t\tWinner:%s\n",name[winner]);    printf("**********************************************************************\n");      //Effect//*****Status***********************************************************          //        P1:xxxxxxxxxxxxxxxxxxx          P2:xxxxxxxxxxxxxxxxxxx          //                WIN:00                          WIN:00                         //          //                        Winner:xxxxxxxxxxx          //*****fighting*********************************************************    printf("\n\tPress any key to return to Menu.");    getch();    getch();}void lvlup(int a){    for(;lvexp[a]>100*lvl[a];){        lvexp[a]-=100*lvl[a];        maxhp[a]+=10*((lvl[a]>10)?1:2)*god[a];        lvl[a]++;        atk[a]+=((lvl[a]>10)?2:3)*god[a];        def[a]+=((lvl[a]>10)?1:2)*god[a];        dex[a]+=((lvl[a]>10)?1:2)*god[a];        luk[a]+=((lvl[a]>10)?1:2)*god[a];        if(atk[a]>99)            atk[a]=99;        if(def[a]>99)            def[a]=99;        if(dex[a]>99)            dex[a]=99;        if(luk[a]>99)            luk[a]=99;        status();        printf("\t%s reaches level %d.",name[a],lvl[a]);        printf("\n\n\tprintf Enter to continue.");        sleep(2);    }}int go(){    double op1,ed1,op2,ed2;    long delay[2];    delay[0]=(100-dex[0])/10.0;    delay[1]=(100-dex[1])/10.0;    op1=0;    ed1=0;    op2=0;    ed2=0;    srand(time(NULL));    status();    do{        ed1+=0.1;        ed2+=0.1;        if(ed1-op1>delay[0]){            status();//Show the status.            fight(0,1);//P1 Fight            ed1=0;            sleep(2);        }        if(!(hp[0]&&hp[1]))            break;        if(ed2-op2>delay[1]){            status();//Show the status.            fight(1,0);//P2 Fight            ed2=0;            sleep(2);        }    }while(hp[0]&&hp[1]);    if(hp[0])        return 0;    if(hp[1])        return 1;}void fight(int a,int b){    int action,delta;    action = rand()%100;    if(action<90){//attack;        delta=damage(a,b);        delta*=crit(a);        miss(b,delta);    }    else{//heal;        delta=heal(a);        lucky(a,delta);    }}//*************************************About attackint damage(int a,int b){    int damg;    damg=(10+rand()%11)*god[a];    if((atk[a]-def[b])>0)    damg=damg+((atk[a]-def[b]>50)?50:(atk[a]-def[b]));    printf("\t%s attacks.",name[a]);    return damg;}int crit(int a){    int rate,rt;    rt=(dex[a]+2*luk[a])/3+1;    if(rt>50)        rt=50;    if(god[a]>1)        rt=75;    rate=rand()%100;    if(rate<rt){        printf("Critical! x2");        return 2;    }    else        return 1;}void miss(int b,int damg){    int rate,rt;    int a;    a=(b+1)%2;    rt=2*dex[b]+luk[b]-dex[a]-luk[a];    if(rt>50)        rt=50;    if(god[a]>1)        rt=50;    rate=rand()%100;    if(rate<rt)        printf(" But missed.");    else{        hp[b]-=damg;        if(hp[0]<0)            hp[0]=0;        if(hp[1]<0)            hp[1]=0;        lvexp[a]+=damg/2;        printf(" %s's HP-%d",name[b],damg);    }}//*************************************About healint heal(int a){    int treat;    treat=20+rand()%11;    treat+=luk[a];    printf("\t%s heals himself.",name[a]);    return treat;}void lucky(int a, int treat){    int rate,rt;    rt=2*luk[a];    if(rt>50)        rt=50;    if(god[a]>1)        rt=100;    rate=rand()%100;    if(rate<rt){        treat*=2;        printf("Good luck! x2 HP+%d",treat);    }    else        printf(" HP+%d",treat);    hp[a]+=treat;    lvexp[a]+=treat/2;    if(hp[a]>maxhp[a])        hp[a]=maxhp[a];}//*************************************About creating datainline int length(char a[20]){    int l;    int i;    for(i=0;i<20;i++)        if(a[i]==0){            l=i;            break;        }    return l;}//Check the length of name.inline int oratk(char a[20]){    int atk;    int i;    for(i=0;i<length(a);i++)        atk+=(i*(int)a[i]);    atk%=11;    atk+=10;    return atk;}//ATK 10~20inline int ordef(char a[20]){    int def;    int i;    for(i=0;i<length(a);i++)        def+=(int)a[i];    def%=11;    def+=10;    return def;}//DEF 10~20inline int ordex(char a[20]){    int dex;    int i;    for(i=0;i<length(a);i++)        dex+=(10000/(int)a[i]);    dex%=11;    dex+=10;    return dex;}//DEX 10~20      Time=(30-DEX)/10  1~2(s)inline int orluk(char a[20]){    int luk;    int i;    for(i=0;i<length(a);i++)        luk+=((int)a[i]*(int)a[i]/100);    luk%=11;    luk+=10;    return luk;}//LUK 10~20       Miss=LUK%inline void status(){    system("cls");    printf("*****Status***********************************************************\n");    printf("\tP1:%19s\t\tP2:%19s\n",name[0],name[1]);    printf("\tHP:%3d\t\tWIN:%2d\t\tHP:%3d\t\tWIN:%2d\n",hp[0],win[0],hp[1],win[1]);    printf("\tATK:%2d\t\tDEF:%2d\t\tATK:%2d\t\tDEF:%2d\n",atk[0],def[0],atk[1],def[1]);    printf("\tDEX:%2d\t\tLUK:%2d\t\tDEX:%2d\t\tLUK:%2d\n",dex[0],luk[0],dex[1],luk[1]);    printf("\tLV:%3d\t\tEXP:%4d\tLV:%3d\t\tEXP:%4d\n",lvl[0],lvexp[0],lvl[1],lvexp[1]);if(god[0]==1&&god[1]==1)    printf("*****fighting*********************************************************\n");else if(god[0]==5&&god[1]==5)    printf("*****fighting*********************************************Hero vs Boss\n");else if(god[0]==5||god[1]==5)    printf("*****fighting**********************************************Legend Mode\n");else    printf("*****fighting*********************************************Creator Mode\n");  //Effect//*****Status***********************************************************          //        P1:xxxxxxxxxxxxxxxxxxx          P2:xxxxxxxxxxxxxxxxxxx          //        HP:000          WIN:00          HP:000          WIN:00                         //        ATK:00          DEF:00          ATK:00          DEF:00          //        DEX:00          LUK:00          DEX:00          LUK:00          //*****fighting*********************************************************}        void sleep(int n){ time_t start,end; volatile long unsigned t;start = time(NULL); end = time(NULL); while(difftime(end,start)<n){ end = time(NULL); } }