POJ--3760 魔兽世界(修订版)

原题地址

http://poj.org/problem?id=3760

 

这个题目,我去年2011/06/25 21:44:50提交了一份C代码,当时写的粗糙,完成了提交,注释和命名不详,现在我都看得不懂!所以决定重新写一个看起来舒服点的C code

下面两个是代码

 

原来的代码:

Problem: 3760 User: huangchang9001
Memory: 184K Time: 0MS
Language: C Result: Accepted

 

#include<stdio.h>
#include<string.h>
#include<memory.h>
// 1 , 2 ,3 , 4, 5 dragon 、ninja、iceman、lion、wolf 
int test,casen;
int M,N,T;//valid need scaned first
int losob[5];//life_of_solider_on_born: dragon、ninja、iceman、lion、wolf
int aosob[5];//attack_of_solider_on_born:dragon 、ninja、iceman、lion、wolf
int rcl,re,lre;//red_command_life,
int bcl,be,lbe;
int rsbs[5]={3,4,5,2,1};//red_solider_born_sequence
int bsbs[5]={4,1,2,3,5};
int ct;//current_time
int rbs,rbn;//red_born_sequenc,r_born_numbers
int bbs,bbn;
int city[22][2];
int ele[22][2],aele[22][2];
int force[22][2],aforce[22][2];
int number[22][2];
int kill[22][2];
int win[22][2];
int flag[22];
int life[22];
int db[22];
int pl[22];
int hpy[22];
int rw,bw;
char nos[5][8]={"dragon","ninja","iceman","lion","wolf"};
char color[2][6]={"red","blue"};
void dt(){//display time
	printf("%03d:%02d ",ct/60,ct%60);
}
void w_zero()
{
	if(rcl>=losob[rsbs[rbs]-1])
	{
		rcl-=losob[rsbs[rbs]-1];
		dt();
		printf("red %s %d born\n",nos[rsbs[rbs]-1],++rbn);
		city[0][0]=rsbs[rbs];
		ele[0][0]=losob[rsbs[rbs]-1];
		force[0][0]=aosob[rsbs[rbs]-1];
		kill[0][0]=0;
		number[0][0]=rbn;
		if(rbs==4) rbs=0;
		else rbs++;
	}
    if(bcl>=losob[bsbs[bbs]-1])
	{
		bcl-=losob[bsbs[bbs]-1];
		dt();
		printf("blue %s %d born\n",nos[bsbs[bbs]-1],++bbn);
		city[N+1][1]=bsbs[bbs];
		ele[N+1][1]=losob[bsbs[bbs]-1];
		force[N+1][1]=aosob[bsbs[bbs]-1];
		kill[N+1][1]=0;
		number[N+1][1]=bbn;
		if(bbs==4) bbs=0;
		else bbs++;
	}
}
void w_one()
{
	int i;
	i=N+1;
	while(i>0)
	{
		city[i][0]=city[i-1][0];
		city[i-1][0]=0;
		if(i==N+1&&city[i][0]>0){
			lbe=be;
			be++;
		}
		ele[i][0]=ele[i-1][0];
		ele[i-1][0]=0;
		force[i][0]=force[i-1][0];
		force[i-1][0]=0;
		number[i][0]=number[i-1][0];
		number[i-1][0]=0;
	    kill[i][0]=kill[i-1][0];
		kill[i-1][0]=0;
		if(i%2==0&&city[i][0]==3)
		{
			if(ele[i][0]<=9)
				ele[i][0]=1;
			else
				ele[i][0]-=9;
			force[i][0]+=20;
		}
		i--;
	}
	i=0;

	while(i<=N)
	{
		city[i][1]=city[i+1][1];
		city[i+1][1]=0;
		if(i==0&&city[i][1]>0){
			lre=re;
			re++;
		}
		ele[i][1]=ele[i+1][1];
		ele[i+1][1]=0;
		force[i][1]=force[i+1][1];
		force[i+1][1]=0;
		number[i][1]=number[i+1][1];
		number[i+1][1]=0;
		kill[i][1]=kill[i+1][1];
		kill[i+1][1]=0;
		if((N+1-i)%2==0&&city[i][1]==3)
		{
			if(ele[i][1]<=9)
				ele[i][1]=1;
			else
				ele[i][1]-=9;
			force[i][1]+=20;
		}
		i++;
	}
	if(city[0][1]>0)
	{
		dt();
		printf("blue %s %d reached red headquarter with %d elements and force %d\n",
			nos[city[0][1]-1],number[0][1],ele[0][1],force[0][1]);
	}
    if(re==2)
	{
		dt();
		printf("red headquarter was taken\n");
	}
	i=1;
	while(i<=N)
	{
		if(city[i][0]>0)
		{
			dt();
			printf("red %s %d marched to city %d with %d elements and force %d\n",
				nos[city[i][0]-1],number[i][0],i,ele[i][0],force[i][0]);
		}
		if(city[i][1]>0)
		{
			dt();
			printf("blue %s %d marched to city %d with %d elements and force %d\n",
				nos[city[i][1]-1],number[i][1],i,ele[i][1],force[i][1]);
		}
		i++;
	}
	if(city[N+1][0]>0)
	{
		dt();
		printf("red %s %d reached blue headquarter with %d elements and force %d\n",
			nos[city[N+1][0]-1],number[N+1][0],ele[N+1][0],force[N+1][0]);
	}
	if(be==2)
	{
		dt();
		printf("blue headquarter was taken\n");
	}
		//printf();
}
void w_two()
{
	int i;
	i=1;
	while(i<=N) life[i++]+=10;
}
void dgetlife(int i,int rb)
{
	dt();
	printf("%s %s %d earned %d elements for his headquarter\n",color[rb],nos[city[i][rb]-1],number[i][rb],life[i]);
}
void w_three()
{
	int i;
	i=1;
	while(i<=N)
	{
		if(city[i][0]>0&&city[i][1]==0)
		{
			rcl+=life[i];
			dgetlife(i,0);
			life[i]=0;
		}
		else if(city[i][0]==0&&city[i][1]>0)
		{
			bcl+=life[i];
			dgetlife(i,1);
			life[i]=0;
		}
		i++;
	}
}
void death(int i,int rb)
{
//	dt();
//	printf("%s %s %d was killed int city %d\n",color[rb],nos[city[i][rb]-1],number[i][rb],i);
//	city[i][rb]=0;
	force[i][rb]=0;
	ele[i][rb]=0;
	kill[i][rb]=0;
//	number[i][0]=0;
}
void ddeath(int i ,int rb)
{
	dt();
	printf("%s %s %d was killed in city %d\n",color[rb],nos[city[i][rb]-1],number[i][rb],i);
}
void happy(int i,int rb)
{
	dt();
	printf("%s %s %d yelled in city %d\n",color[rb],nos[city[i][rb]-1],number[i][rb],i);
}
void dreattack(int i,int rb1,int rb2)
{
	dt();
   	printf("%s %s %d fought back ",color[rb1],nos[city[i][rb1]-1],number[i][rb1]);
   	printf("against %s %s %d in city %d\n",color[rb2],nos[city[i][rb2]-1],number[i][rb2],i);

}
void reattack(int i,int rb1,int rb2)
{
	int dead;
	dead=0;
	if(city[i][rb1]!=2)
	{
		if(ele[i][rb2]<=force[i][rb1]/2){
			if(city[i][rb2]==4){
				pl[i]=ele[i][rb2];
			}
			dead=1;
			if(rb1==0) rw++;
			else bw++;
		}
	}
	if(dead==0&&city[i][rb2]==1)
		hpy[i]=1;
	if(dead==1)
		death(i,rb2);
}
void adattack(int i,int rb1,int rb2)
{
	dt();
	printf("%s %s %d attacked ",color[rb1],nos[city[i][rb1]-1],number[i][rb1]);
    printf("%s %s %d in city %d ",color[rb2],nos[city[i][rb2]-1],number[i][rb2],i);
	printf("with %d elements and force %d\n",aele[i][rb1],aforce[i][rb1]);
}
void attack(int i,int rb1,int rb2)
{
	if(ele[i][rb2]<=force[i][rb1])
	{
		kill[i][rb1]++;
		if(city[i][rb1]==5&&kill[i][rb1]%2==0){
			db[i]=2;
		}
		if(city[i][rb2]==4){
			pl[i]=ele[i][rb2];
		}
		death(i,rb2);
		if(city[i][rb1]==1)
			hpy[i]=1;
		if(rb1==0) rw++;
		else bw++;
	}
	else 
		reattack(i,rb2,rb1);
}
void fight(int i)
{
	if(flag[i]==1)
		attack(i,0,1);
	else if(flag[i]==2)
		attack(i,1,0);
	else{
		if(i%2==1) attack(i,0,1);
		else attack(i,1,0);
	}
}
void getlife(int i,int rb)
{
	if(rb==0)
	{
		if(rcl>=8*rw)
		{
			rcl-=8;
			ele[i][0]+=8;

		}
		dgetlife(i,rb);
		rw--;
	}
	else
	{
		if(bcl>=8)
		{
			bcl-=8;
			ele[i][1]+=8;
		}
		dgetlife(i,rb);
	}
}
void raisflag(int i,int rb)
{
	dt();
	printf("%s flag raised in city %d\n",color[rb],i);
}
void dfour(int i,int rb1,int rb2)
{
	adattack(i,rb1,rb2);
	ele[i][rb2]-=aforce[i][rb1];
	if(ele[i][rb2]<0)
		ele[i][rb2]=0;
	if(ele[i][rb2]==0)
	{
		ele[i][rb1]*=db[i];
		force[i][rb1]*=db[i];
		ele[i][rb1]+=pl[i];
		ddeath(i,rb2);
		if(hpy[i]==1)
			happy(i,rb1);
		getlife(i,rb1);
	}
	else
	{
		if(city[i][rb2]!=2)
		{
			dreattack(i,rb2,rb1);
			ele[i][rb1]-=(aforce[i][rb2]/2);
			if(ele[i][rb1]<0)
	        	ele[i][rb1]=0;
		}
		if(ele[i][rb1]==0){
			ddeath(i,rb1);
			ele[i][rb2]+=pl[i];
		}
		if(hpy[i]==1)
			happy(i,rb1);
		if(ele[i][rb1]==0)
			getlife(i,rb2);
	}
	if(ele[i][0]>0&&ele[i][1]==0)
	{
		win[i][1]=0;
		win[i][0]++;
		if(flag[i]==2)
			flag[i]=0;
		else if(flag[i]==0&&win[i][0]==2)
		{
			flag[i]=1;
			raisflag(i,0);
		}
	}
	else if(ele[i][0]==0&&ele[i][1]>0)
	{
		win[i][0]=0;
		win[i][1]++;
		if(flag[i]==1)
			flag[i]=0;
		else if(flag[i]==0&&win[i][1]==2)
		{
			flag[i]=2;
			raisflag(i,1);
		}
	}
	else
	{
		win[i][0]=0;
		win[i][1]=0;
	}
}
void w_four()
{
	int i;
	rw=0;
	bw=0;
	i=1;
	while(i<=N)
	{
		db[i]=1;
		pl[i]=0;
		hpy[i]=0;
		if(city[i][0]>0&&city[i][1]>0){
			aele[i][0]=ele[i][0];
			aele[i][1]=ele[i][1];
			aforce[i][1]=force[i][1];
			aforce[i][0]=force[i][0];
			fight(i);
		}
		i++;
	}
	i=1;
	while(i<=N)
	{
		if(city[i][0]>0&&city[i][1]>0)
		{
			if(flag[i]==1)
			{
				dfour(i,0,1);
			}
			else if(flag[i]==2)
			{ 
				dfour(i,1,0);
			}
			else
			{
				if(i%2==1) dfour(i,0,1);
				else dfour(i,1,0);
			}
		//	if()
		}
		i++;
	}
	i=1;
	while(i<=N)
	{
		if(ele[i][0]>0&&ele[i][1]==0)
		{
			rcl+=life[i];
			//force[i][1]=0;
			city[i][1]=0;
			number[i][1]=0;
			life[i]=0;
		}
		else if(ele[i][0]==0&&ele[i][1]>0)
		{
			bcl+=life[i];
			city[i][0]=0;
			number[i][0]=0;
			life[i]=0;
		}
		i++;
	}
}
void w_five(){
	dt();
	printf("%d elements in red headquarter\n",rcl);
	dt();
	printf("%d elements in blue headquarter\n",bcl);
}
void wot()//work_on_(the)time
{
	int work;
	work=(ct%60)/10;
	if(work==0)
		w_zero();
	else if(work==1)
		w_one();
	else if(work==2)
		w_two();
	else if(work==3)
		w_three();
	else if(work==4)
		w_four();
	else
		w_five();
}
void output()
{
	printf("Case:%d\n",casen++);
	while(ct<=T)
	{
		wot();
		if(re==2||be==2) break;
		ct+=10;
	}
}
void input()
{
	int i;
	scanf("%d%d%d",&M,&N,&T);
	i=0;
	while(i<5) scanf("%d",&losob[i++]);
	i=0;
	while(i<5) scanf("%d",&aosob[i++]);
}
void init()
{
	ct=0;
	memset(city,0,sizeof(city));
	memset(flag,0,sizeof(flag));
	memset(life,0,sizeof(life));
	memset(ele,0,sizeof(ele));
	memset(force,0,sizeof(force));
	memset(number,0,sizeof(number));
	memset(kill,0,sizeof(kill));
	memset(win,0,sizeof(win));
	rcl=M;
	bcl=M;
	rbs=0;
	rbn=0;
	bbs=0;
	bbn=0;
	re=0;
	lre=0;
	be=0;
	lbe=0;
}
void main()
{
	scanf("%d",&test);
	casen=1;
	while(test--)
	{
		input();
		init();
		output();
	}
}

 

刚提交通过的代码:

 

Problem: 3760 User: huangchang9001
Memory: 156K Time: 0MS
Language: C Result: Accepted


 

/*
	This C code is programed to solve the problem 3760 of POJ
	(http://poj.org/problem?id=3760).I had ever submit a first
	accepted C code of the problem on the time 2011/06/25 21:44:50
	But when I continued to study c language deeply, I had a look
	at my C code which I thought ugly and tedious. So I want to 
	edit a graceful and simple C code.
	
	date:  2012/8/23 15:24
	author:huangchang9001
*/
#include<stdio.h>

/*<- predefined area */
// CITY_MAX
#define CM 22
// WARRIOR_SPECIES
#define WAS 5
//STRING_LENGTH
#define SL 10


/* predefined area ->*/

/* */
struct headquarters{
	int element;
	int nxtwr;//next_warrior 
	int NO;
	int taken;
	int start;
	int walk;
	int end;
//	int 
};

struct City{
	int element;
	int wr[2];//warrior
	int hp[2];
	int atk[2];
	int NO[2];
	int stc[2];//step_count
	int kln[2];//kill number;
	int flc[3];//flag_color;
};

enum Warrior{dragon,ninja,iceman,lion,wolf,null,dead};
enum Color{red,blue,none};

struct headquarters hq[2];
struct City city[CM];
/* */

/*<- variable area */

// below is the variable need scan
int M,N,T;
int hp_of_born[WAS];
int atk_of_born[WAS];

// below is the variable used by other function
// ct:current_time which called by the function dt(); 
int ct;
// warrior_to_string
char wtostr[WAS][SL]={"dragon","ninja","iceman","lion","wolf"};
char ctostr[2][SL]={"red","blue"};
//	warriot born of sequence
int wbos[2][WAS]={{iceman,lion,wolf,ninja,dragon},{lion,dragon,ninja,iceman,wolf}}; 

/* variable area ->*/


/*<- function area */

//dt():display_time()
void dt();
//dw():display_warrior();
void dw(int cn,int clr);
//
void dha(int cn,int clr);
//
void dd(int cn,int clr);
//initall function
void init();
void init_city();
void init_headquarter();
// input() function is used to scan the variable
void input();

// output funciton is used to display the outcome
void output();

// time 00 functions
void born();
void born_c(int clr);//clr: color

// time 10 functions
void march();
void march_c(int clr);
void march_o(int i,int clr);

// time 20 functions
void product();

// time 30 functions
void get_element();
void get_ele(int cn,int clr);

// time 40 functions;
void fight();
void attack(int cn);
void reattack(int cn);
void yell(int cn,int clr);

// time 50 functions;
void report();
void report_c(int clr);


/* function area ->*/

void main(){
	int test,casen=1;
//	printf("%d\n",iceman);
	scanf("%d",&test);
	while(test--){
		input();
		init();
//		printf("%d %d\n",hq[red].end,hq[blue].end);
		printf("Case:%d\n",casen++);
		output();
	}
}

void dt(){
	printf("%03d:%d0 ",ct/6,ct%6);
}
void dw(int cn,int clr){
	printf("%s %s %d ",ctostr[clr],wtostr[city[cn].wr[clr]],city[cn].NO[clr]);
}
void dha(int cn,int clr){
	printf("with %d elements and force %d\n",city[cn].hp[clr],city[cn].atk[clr]);
}
void dd(int cn,int clr){
	dt();
	dw(cn,clr);
	printf("was killed in city %d\n",cn);
}
void init(){
	init_city();
	init_headquarter();
}

void init_city(){
	int i=0;
	while(i<=N+1){
		city[i].element=0;
		city[i].wr[red]=null;
		city[i].wr[blue]=null;
		city[i].flc[red]=0;
		city[i].flc[blue]=0;
		city[i].flc[2]=none;
		if(i%2==1) city[i].flc[2]=red;
		//else city[i].flc[2]=blue;
		i++;
	}
}

void init_headquarter(){
	hq[red].element=M;
	hq[red].end=N+1;
	hq[red].NO=1;
	hq[red].nxtwr=0;
	hq[red].start=0;
	hq[red].taken=0;
	hq[red].walk=1;
	hq[blue].element=M;
	hq[blue].end=0;
	hq[blue].NO=1;
	hq[blue].nxtwr=0;
	hq[blue].start=N+1;
	hq[blue].taken=0;
	hq[blue].walk=-1;
}

void input(){
	int i;
	scanf("%d%d%d",&M,&N,&T);
	i=0;
	while(i<WAS) scanf("%d",&hp_of_born[i++]);
	i=0;
	while(i<WAS) scanf("%d",&atk_of_born[i++]);
}

void output(){
	T/=10;
	ct=0;
	while(ct<=T){
		int work=ct%6;
		switch(work){
			case 0:born();break;
			case 1:march();break;
			case 2:product();break;
			case 3:get_element();break;
			case 4:fight();break;
			case 5:report();break;
			default:break;
		}
		if(hq[red].taken==2||hq[blue].taken==2) break;
		ct++;
	}
//	over: ct=1;
}
void born(){
	born_c(red);	
	born_c(blue);
}
void born_c(int clr){
	int wr=wbos[clr][hq[clr].nxtwr];
	int start=hq[clr].start;
	if(hq[clr].element>=hp_of_born[wr]){
		hq[clr].element-=hp_of_born[wr];

		city[start].wr[clr]=wr;
		city[start].atk[clr]=atk_of_born[wr];
		city[start].hp[clr]=hp_of_born[wr];
		city[start].NO[clr]=hq[clr].NO;
		city[start].stc[clr]=0;
		city[start].kln[clr]=0;

		dt();
		printf("%s %s %d born\n",ctostr[clr],wtostr[wr],hq[clr].NO);
		if(hq[clr].nxtwr==4) hq[clr].nxtwr=0;
		else hq[clr].nxtwr++;
		hq[clr].NO++;
	}
	else
		city[start].wr[clr]=null;
}

void product(){
	int i=1;
	while(i<=N) city[i++].element+=10;
}

void march(){
	int i;
	march_c(red);
	march_c(blue);
	if(city[0].wr[blue]<null){
		dt();
		dw(0,blue);
		printf("reached %s headquarter ",ctostr[red]);
		dha(0,blue);
		hq[red].taken++;
		city[0].wr[blue]=null;
	}
	if(hq[red].taken==2){
		dt();
		printf("red headquarter was taken\n");
	}
	i=1;
	while(i<=N){
		if(city[i].wr[red]<null){
			march_o(i,red);
		}
		if(city[i].wr[blue]<null){
			march_o(i,blue);
		}
		i++;
	}
	
	if(city[N+1].wr[red]<null){
		dt();
		dw(N+1,red);
		printf("reached %s headquarter ",ctostr[blue]);
		dha(N+1,red);
		hq[blue].taken++;
		city[N+1].wr[red]=null;
	}
	if(hq[blue].taken==2){
		dt();
		printf("blue headquarter was taken\n");
	}
	//if(city[hq[red].end].)
}
void march_c(int clr){
	int start=hq[clr].end;
	int end=hq[clr].start;
	int walk=-hq[clr].walk;
	while(start!=end){
	
		city[start].hp[clr]=city[start+walk].hp[clr];
		city[start].atk[clr]=city[start+walk].atk[clr];
		city[start].NO[clr]=city[start+walk].NO[clr];
		city[start].stc[clr]=city[start+walk].stc[clr]+1;
		city[start].kln[clr]=city[start+walk].kln[clr];
		city[start].wr[clr]=city[start+walk].wr[clr];
		if(city[start].wr[clr]==iceman&&city[start].stc[clr]%2==0){
			if(city[start].hp[clr]>9)
				city[start].hp[clr]-=9;
			else
				city[start].hp[clr]=1;
			city[start].atk[clr]+=20;
			
		}
		start+=walk;
	}
}

void march_o(int i,int clr){
	dt();
	dw(i,clr);
	//printf("%s %s %d ",ctostr[clr],wtostr[city[i].wr[clr]],city[i].NO[clr]);
	printf("marched to city %d with ",i);
	printf("%d elements and force %d\n",city[i].hp[clr],city[i].atk[clr]);
}

void get_element(){
	int i=1;
	while(i<=N){
		if((city[i].wr[red]<null&&city[i].wr[blue]>=null)||
			(city[i].wr[red]>=null&&city[i].wr[blue]<null)){
			int clr=city[i].wr[red]<null?red:blue;
			get_ele(i,clr);
			hq[clr].element+=city[i].element;
			city[i].element=0;
		}
		i++;
	}
}

void get_ele(int cn,int clr){
	dt();
	dw(cn,clr);
	printf("earned %d elements for his headquarter\n",city[cn].element);
}
void fight(){
//	int hpbf[2];//hp_before_fight
//	int wrbf[2];
	int ele[2];
	int clr;
	int rasc=none;
	int i=1;
	ele[red]=0;
	ele[blue]=0;
	while(i<=N){
		if(city[i].wr[red]<null&&city[i].wr[blue]<null){
			if(city[i].flc[2]==none) clr=1-(i%2);
			else clr=city[i].flc[2];
			rasc=none;
			//hpbf[red]=city[i].hp[red];
		//	hpbf[blue]=city[i].hp[blue];
			//wrbf[red]=city[i].wr[red];
			//wrbf[red]=city[i].wr[blue];
			attack(i);
			if(city[i].wr[1-clr]==dead){
				ele[clr]+=city[i].element;
				if(city[i].wr[clr]==dragon) yell(i,clr);
				get_ele(i,clr);
				city[i].element=0;
				city[i].flc[clr]++;
				city[i].flc[1-clr]=0;
				if(city[i].flc[2]==none&&city[i].flc[clr]==2){
					rasc=clr;
				//	dt();
				//	printf("%s flag raised in city %d\n",ctostr[clr],i);
					city[i].flc[2]=clr;
					city[i].flc[clr]=0;
				}
			}
			else{
				reattack(i);
				if(city[i].wr[clr]==dead){
					ele[1-clr]+=city[i].element;
					get_ele(i,1-clr);
					city[i].element=0;
					city[i].flc[1-clr]++;
					city[i].flc[clr]=0;
					if(city[i].flc[1-clr]==2){
						rasc=1-clr;
						//dt();
						//printf("%s flag raised in city %d\n",ctostr[1-clr],i);
						city[i].flc[1-clr]=0;
						city[i].flc[2]=1-clr;
					}
				}
				else{
					if(city[i].wr[clr]==dragon) yell(i,clr);
					city[i].flc[red]=0;
					city[i].flc[blue]=0;
				}
			}
		//	if(city[i].wr[clr]==dragon) yell(i,clr);
		//	if(city[i].wr[blue]==dragon) yell(i,blue);
			if(rasc!=none){
				dt();
				printf("%s flag raised in city %d\n",ctostr[rasc],i);
			}
		}
		i++;
	}
	clr=red;
	while(clr<none){
		i=hq[clr].end-hq[clr].walk;
		while(i!=hq[clr].start){
			if(city[i].wr[1-clr]==dead){
				if(city[i].wr[clr]<null&&hq[clr].element>=8){
					city[i].hp[clr]+=8;
					hq[clr].element-=8;
				}
				city[i].wr[1-clr]=null;
			}
			i-=hq[clr].walk;
		}
		clr++;
	}
	hq[red].element+=ele[red];
	hq[blue].element+=ele[blue];
	//hp_before_fight[red]=city[]
}
void attack(int cn){
	int clr;
	if(city[cn].flc[2]==none) clr=1-(cn%2);
	else clr=city[cn].flc[2];
	dt();
	dw(cn,clr);
	printf("attacked ");
	dw(cn,1-clr);
	printf("in city %d ",cn);
	dha(cn,clr);
	city[cn].hp[1-clr]-=city[cn].atk[clr];
	if(city[cn].hp[1-clr]<=0){
		dd(cn,1-clr);
		city[cn].kln[clr]++;
		/*if(city[cn].wr[clr]==dragon){
			dt();
			dw(cn,clr);
			printf("yelled in city %d\n",cn);
		}*/
		if(city[cn].wr[clr]==wolf&&city[cn].kln[clr]%2==0){
			city[cn].hp[clr]<<=1;
			city[cn].atk[clr]<<=1;
		}
		if(city[cn].wr[1-clr]==lion){
			city[cn].hp[clr]+=city[cn].hp[1-clr]+city[cn].atk[clr];
		}
		city[cn].wr[1-clr]=dead;
	}
}
void reattack(int cn){
	int clr;
	if(city[cn].flc[2]==none) clr=cn%2;
	else clr=1-city[cn].flc[2];
	if(city[cn].wr[clr]==ninja) return;
	dt();
	dw(cn,clr);
	printf("fought back against ");
	dw(cn,1-clr);
	printf("in city %d\n",cn);
	city[cn].hp[1-clr]-=city[cn].atk[clr]/2;
	if(city[cn].hp[1-clr]<=0){
		dd(cn,1-clr);	
		//city[cn].kln[clr]++;
		/*if(city[cn].wr[clr]==dragon){
			dt();
			dw(cn,clr);
			printf("yelled in city %d\n",cn);
		}*/
		if(city[cn].wr[1-clr]==lion){
			city[cn].hp[clr]+=city[cn].hp[1-clr]+city[cn].atk[clr]/2;
		}
		city[cn].wr[1-clr]=dead;
	}
	else{
		
	}
}

void yell(int cn,int clr){
	dt();
	dw(cn,clr);
	printf("yelled in city %d\n",cn);
}
void report(){
	report_c(red);
	report_c(blue);
	//printf("%d elements in");
}
void report_c(int clr){
	dt();
	printf("%d elements in %s headquarter\n",hq[clr].element,ctostr[clr]);
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值