去年刚进专业时做的东东...
当时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 Val
int 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 attack
int 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 heal
int 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 data
inline 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~20
inline 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~20
inline 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);
}
}