c語言 自動戰鬥小程式
阿新 • • 發佈:2018-11-10
c語言 自動戰鬥小程式
#include<stdio.h> #include<time.h> #include<stdlib.h> #include<windows.h> int main() {char name1[10],name2[10]; //名字 int a1,b1,c1,a2,b2,c2; //角色12的攻擊防禦回覆數值 int xue1,xue2,c,jia1=0,jia2=0; //血量,護甲 xue1=100;//玩家的基礎血量 xue2=100; printf("請輸入角色1的名字,按回車確認\n"); gets(name1);//獲得玩家的名字 t1:printf("好,請輸入您的攻擊力,防禦力,恢復力 格式為 數字空格數字空格數字,如6 2 2,注意三個數值相加必須為10\n"); scanf("%d %d %d",&a1,&b1,&c1);//獲得玩家的能力值 if(a1+b1+c1!=10)//判斷能力值輸入是否符合規則 {printf("錯誤,請重新輸入\n"); goto t1; } printf("請輸入角色2的名字,按回車確認\n"); while((c=getchar())!=EOF&&c!='\n'); gets(name2); t2:printf("好,請輸入您的攻擊力,防禦力,恢復力 格式為 數字空格數字空格數字,如6 2 2,注意三個數值相加必須為10\n"); scanf("%d %d %d",&a2,&b2,&c2); if(a2+b2+c2!=10) {printf("錯誤,請重新輸入\n"); goto t2; } srand(time(0));//隨機先手 c=rand()%2+1; printf("現在基本屬性如下\n");//顯示基本資訊 puts(name1); printf("攻擊=%d 防禦=%d 回覆=%d\n",a1,b1,c1); puts(name2); printf("攻擊=%d 防禦=%d 回覆=%d\n",a2,b2,c2); k:puts(name1); printf("HP %d/100 ",xue1); if(jia1==0) printf("無護甲\n");//判斷有無護甲 else printf("有護甲\n"); puts(name2); printf("HP %d/100 ",xue2); if(jia2==0) printf("無護甲\n"); else printf("有護甲\n"); if(c==1)//角色行動方轉換 c=2; else c=1; Sleep(1000); printf("行動階段\n"); if(c==1)//判斷行動方 { int p; srand(time(0));//根據玩家輸入的能力值隨機行動方式 p=rand()%10+1; if(p>=1&&p<=a1) goto ta1;// 攻擊 if(p>a1&&p<=a1+b1) goto tb1;//防禦 if(p>a1+b1&&p<=10) goto tc1;//加血 Sleep(1000); } if(c==2) { int p; srand(time(0)); p=rand()%10+1; if(p>=1&&p<=a2) goto ta2; if(p>a2&&p<=a2+b2) goto tb2; if(p>a2+b2&&p<=10) goto tc2; Sleep(1000); } ta1: if(jia2==0)//判斷有無護甲 { srand(time(0)); xue2-=rand()%15+10;//隨機造成傷害 puts(name1); printf("攻擊了\n"); puts(name2); printf("造成 %d 的傷害\n",rand()%15+10); if(xue1<0||xue2<0) goto f;//判斷是否死亡 Sleep(1000); system("cls"); goto k; //回到顯示資訊階段,迴圈行動 } else//如果有護甲 { srand(time(0)); if(rand()%10+1>=1&&rand()%10+1<4)//判斷概率 { puts(name1); printf("攻擊了\n"); puts(name2); puts(name2); printf("完全抵擋了攻擊\n");//40%概率抵擋傷害 jia2=0;//護甲消失 Sleep(1000); system("cls"); goto k; } else { xue2-=(rand()%15); puts(name1); printf("攻擊了\n"); //60%概率抵擋部分傷害 puts(name2); puts(name2); printf("格擋了部分攻擊,但仍受到 %d 的傷害\n",(rand()%15)); jia2=0; if(xue1<0||xue2<0) goto f;//判斷死亡 Sleep(1000); system("cls"); goto k; } } ta2: if(jia1==0)//相同,角色2的攻擊階段 { srand(time(0)); xue1-=rand()%15+10; puts(name2); printf("攻擊了\n"); puts(name1); printf("造成 %d 的傷害\n",rand()%15+10); if(xue1<0||xue2<0) goto f; Sleep(1000); system("cls"); goto k; } else { srand(time(0)); if((rand()%10+1)>=1&&(rand()%10+1)<4) { puts(name2); printf("攻擊了\n"); puts(name1); puts(name1); printf("完全抵擋了攻擊\n"); jia1=0; Sleep(1000); system("cls"); goto k; } else { xue1-=(rand()%15); puts(name2); printf("攻擊了\n"); puts(name1); puts(name1); printf("格擋了部分攻擊,但仍受到 %d 的傷害\n",(rand()%15)); jia1=0; if(xue1<0||xue2<0) goto f; Sleep(1000); system("cls"); goto k; } } tb1://防禦 { jia1=1;//有護甲 puts(name1); printf("獲得了護甲\n"); Sleep(1000); system("cls"); goto k; } tb2: { jia2=1; puts(name2); printf("獲得了護甲\n"); Sleep(1000); system("cls"); goto k; } tc1://角色2的護甲階段 { xue1+=10; puts(name1); printf("使用了回覆藥,回覆18點生命。\n"); Sleep(1000); system("cls"); goto k; } tc2: { xue2+=10; puts(name2); printf("使用了回覆藥,回覆18點生命。\n"); Sleep(1000); system("cls"); goto k; } f:printf("結束戰鬥\n");//結束戰鬥階段 if(xue1<0)//角色1死亡 { puts(name1); printf("落敗\n"); system("pause"); } if(xue2<0)//角色2死亡 { puts(name2); printf("落敗\n"); system("pause"); } }
就看著能簡化下不