Ejemplo n.º 1
0
static
void
dowaterdemon() /* Water demon */
{
	register struct monst *mtmp;

	if(mons[PM_WATER_DEMON].geno & (G_GENOD | G_EXTINCT)) return;
	if((mtmp = makemon(&mons[PM_WATER_DEMON],u.ux,u.uy))) {
	    if (!Blind)
		You("unleash %s!", a_monnam(mtmp));
	    else
		You("feel the presence of evil.");

	/* Give those on low levels a (slightly) better chance of survival */
	    if (rnd(100) > (80 + level_difficulty())) {
		pline("Grateful for %s release, %s grants you a wish!",
		      his[pronoun_gender(mtmp)], he[pronoun_gender(mtmp)]);
		makewish();
		mongone(mtmp);
	    } else if (t_at(mtmp->mx, mtmp->my))
		(void) mintrap(mtmp);
	}
}
Ejemplo n.º 2
0
int gen_report(clparse *clinput)
{
 
 FILE *fgrades, *freport, *fbank;
 char bank_record[MAX_LINE_LENGTH];
 char pupil_record[MAX_LINE_LENGTH];
 char comment_all[MAX_LINE_LENGTH][MAX_NUM_COMMENTS];
 char *pch;
 int grade, grade_all[MAX_NUM_COMMENTS], criteria_all[MAX_NUM_COMMENTS];
 int i, j, k, total_num_comments, selected_comment;
 char surname[MAX_NAME_LENGTH];
 char firstname[MAX_NAME_LENGTH];
 char gender[MAX_NAME_LENGTH];
 int marks[MAX_NUM_CRITERIA];
 int comments_num[NUM_GRADES+1][MAX_NUM_CRITERIA+1];
 int comment_index[NUM_GRADES+1][MAX_NUM_CRITERIA+1];
 char *dest;
 char str[MAX_LINE_LENGTH];
 int num_criteria=0;
 char gradeName[MAX_LINE_LENGTH][MAX_NUM_CRITERIA];

 
 
 fgrades = openfile(clinput->gradesfile, "r");
 freport = openfile(clinput->reportfile, "w");
 fbank = openfile(clinput->bankfile, "r");
 
 /* Read in comments bank*/
  
 i=0;
 while (fgets(bank_record, MAX_LINE_LENGTH, fbank) != NULL){
 
  if (!strncasecmp(strtrim(bank_record),"<comment>",4)){
    strRemoveAll(bank_record,"<comment>");
    strcpy(comment_all[i],strtrim(bank_record));
    grade_all[i]=grade;
    criteria_all[i]=num_criteria;
    i=i+1;   
   }
   
  else if (!strncasecmp(strtrim(bank_record),"<criteria=",4)){ 
   strRemoveAll(bank_record,"<criteria=\"");
   strRemoveAll(bank_record,"\">");
   sscanf(strtrim(bank_record),"%s",gradeName[num_criteria]); 
   num_criteria=num_criteria+1;
  }
   
  else if (!strncasecmp(strtrim(bank_record),"<grade=",4)){
    strRemoveAll(bank_record,"<grade=\"");
    strRemoveAll(bank_record,"\">");
    sscanf(strtrim(bank_record),"%d",&grade); 
   } 
 }

 /* calculate how many comments there are per
    grade and per criteria.  This is needed for 
    input into the random function.  */
 
 total_num_comments=i;

 for (i=0; i<NUM_GRADES+1; i++){ 
  for (j=0; j<num_criteria+1; j++){
    comments_num[i][j]=0;
    comment_index[i][j]=-999;
  }
 }

 for (k=0;k<total_num_comments;k++){
  comments_num[grade_all[k]][criteria_all[k]]++; 
  if (comment_index[grade_all[k]][criteria_all[k]] == -999)
    comment_index[grade_all[k]][criteria_all[k]]=k;
 }
 
 

 while (fgets(pupil_record, MAX_LINE_LENGTH, fgrades) != NULL){
  
 /* Read in pupil grades */
 
 pch = strtok (pupil_record," \t");
  i=0;
  j=0;
  while (pch != NULL)
  {
    if (i==0) strcpy(firstname,pch);
    if (i==1) strcpy(surname,pch);
    if (i==2) strcpy(gender,pch);

    if (i==j+3){
     marks[j]=atoi(pch);
     j++;
    }

    pch = strtok (NULL, " \t");
    i++; 
  }
  
 

  fprintf(freport,"%s %s %s",firstname, surname, gender);
  for(k=0;k<num_criteria;k++) fprintf(freport," %s:%d ", gradeName[k], marks[k]);
  fprintf(freport,"\n");

  /* look at pupils grades then allocate 
     random but relevant comment */
  
  
  for (j=0; j<num_criteria; j++){
  
   if( comments_num[marks[j]][j+1] != 0 ){
   
    selected_comment=rnd(comments_num[marks[j]][j+1]);      
    strcpy(str,comment_all[comment_index[marks[j]][j+1]+selected_comment-1]);
    dest=pronoun_gender(gender,firstname,str); 
    fprintf(freport,"%s ",dest);
       
   } 
     
  }
 

  fprintf(freport,"\n\n");
   
 }
 



 fclose(fgrades);
 fclose(freport);
 fclose(fbank);
  

 return (EXIT_SUCCESS);

}