1. 程式人生 > >c語言 自動戰鬥小程式

c語言 自動戰鬥小程式

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");
 }
}

就看著能簡化下不