[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); } }
- [C]名字大战(控制台小游戏)
- C语言控制台小游戏
- c语言控制台输出制作拼图小游戏
- c语言控制台推箱子小游戏
- J2SE小游戏 潜艇大战
- 飞机大战小游戏
- HTML5小游戏飞机大战
- c语言控制台的一个贪吃蛇小游戏
- Java小游戏之控制台小游戏
- 控制台版坦克大战
- 控制台的小游戏
- 简单的控制台小游戏
- 推箱子小游戏--控制台
- 一个控制台类小游戏
- 控制台小游戏之五子棋
- 控制台小游戏之俄罗斯方块
- 小游戏坦克大战游戏设计
- Javascript实现飞机大战小游戏
- 输入的几种实现
- Android入门/EditView(五)
- 成功安装MAC原版--历时5天
- 浅谈oracle中的几个日期函数
- VERIFY( 1 == LoadSkinFile("BlueHorn.smf")) skinmagic加载皮肤出错
- [C]名字大战(控制台小游戏)
- struts2之5--国际化支持
- undo系列学习之undo入门基础知识介绍
- bash shell获取进程的pid
- ASCII中LF与CR区别 ?
- FMDatabase 的使用方法
- ORA-600 [4194] 说明
- ios学习笔记之 类变量与实例变量区别
- C_链表