void jen::Place(int minR,int maxR,int minC,int maxC, SitRep sitrep){ sideOfBoard loca = findSide(minR, maxR, minC, maxC); dir=up; Strat(minR, maxR, minC, maxC, sitrep); if(loca == bup) { dir=dn; } else if(loca == bdn) { dir=up; } else if(loca == brt) { dir=lt; } else if(loca == blt) { dir=rt; } return; bool done=false; int tr,tc; Dir td; while(!done){ tr=minR+rand()%(maxR-minR); tc=minC+rand()%(maxC-minC); if(sitrep.thing[tr][tc].what==space)done=true; } int rdist=ROWS/2-tr; int cdist=COLS/2-tc; if(abs(rdist)<abs(cdist)){ if(cdist>0)td=rt; else td=lt; }else{ if(rdist>0)td=up; else td=dn; } r=tr; c=tc; dir=td; }
int main(int argc , char *argv[]) { long double error = .00000000001; long double error1 = 1.0; long double error2 = 0.0001; int debug = 0; char *NOT = "not a triangle\n"; if(argc != 7) { printf(NOT); return 0; } long double x1 = readIn(1 , argv); long double y1 = readIn(2 , argv); long double x2 = readIn(3 , argv); long double y2 = readIn(4 , argv); long double x3 = readIn(5 , argv); long double y3 = readIn(6 , argv); long double s1 = findSide(x1 , y1 , x2 , y2 , debug); long double s2 = findSide(x2 , y2 , x3 , y3 , debug); long double s3 = findSide(x3 , y3 , x1 , y1 , debug); double angleS1 = acos(((s2 * s2) + (s3 * s3) - (s1 * s1))/(2 * s2 * s3)); double angleS2 = acos(((s3 * s3) + (s1 * s1) - (s2 * s2))/(2 * s3 * s1)); double angleS3 = M_PI - angleS1 - angleS2; if(debug) { printf("angles = %f , %f , %f, %f\n" , angleS1 , angleS2 , angleS3 , (M_PI/2)); } char *toPrint1 = ""; char *toPrint2 = ""; if(debug) { printf("side lengths: %Lf, %Lf , %Lf\n", s1 , s2 , s3); } if(s1 == 0 || s2 == 0 || s3 == 0) { printf(NOT); return 0; } else if(eq(s1 + s2 , s3, error) || eq(s1 + s3 , s2 , error) || eq(s2 + s3 , s1 , error)) { printf(NOT); return 0; } else if(s1 == s2 && s2 == s3) { toPrint1 = "equilateral"; } else if(eq(s1 , s2 , error) || eq(s2 , s3 , error)|| eq(s3 , s1 , error)) { toPrint1 = "isosceles"; } else { toPrint1 = "scalene"; } if(eq((M_PI / 2) , angleS1 , error) || eq((M_PI / 2) , angleS2 , error) || eq((M_PI / 2) , angleS3 , error)) { toPrint2 = "right"; } else if((angleS1 < ((M_PI / 2) + error2)) && (angleS2 < ((M_PI / 2) + error2)) && (angleS3 < ((M_PI / 2) + error2))) { toPrint2 = "acute"; } else if((angleS1 > (M_PI / 2)) || (angleS2 > (M_PI / 2)) || (angleS3 > (M_PI / 2))) { toPrint2 = "obtuse"; } printf("%s %s\n" , toPrint1 , toPrint2); return 0; }
void jen::Strat(int minR,int maxR,int minC,int maxC, SitRep sitrep) { dir = lt; if(rank == crown) { r = ((maxR -minR)/2 + minR); c = ((maxC -minC)/2 + minC); return; } if(rank == knight) { if(sitrep.thing[(((maxR -minR)/2 + minR))+1][((maxC -minC)/2 + minC)].rank!=knight) { r = (((maxR -minR)/2 + minR))+1; c = ((maxC -minC)/2 + minC); return; } else if(sitrep.thing[(((maxR -minR)/2 + minR))-1][((maxC -minC)/2 + minC)].rank!=knight) { r = (((maxR -minR)/2 + minR))-1; c = ((maxC -minC)/2 + minC); return; } else if(sitrep.thing[(((maxR -minR)/2 + minR))][(((maxC -minC)/2 + minC))+1].rank!=knight) { r = (((maxR -minR)/2 + minR)); c = (((maxC -minC)/2 + minC))+1; return; } else if(sitrep.thing[(((maxR -minR)/2 + minR))][(((maxC -minC)/2 + minC))-1].rank!=knight) { r = (((maxR -minR)/2 + minR)); c = (((maxC -minC)/2 + minC))-1; return; } else { setRand(minR, maxR, minC, maxC, sitrep); return; } } else if(rank == archer) { if(sitrep.thing[(((maxR -minR)/2 + minR))+1][(((maxC -minC)/2 + minC))+1].rank!=archer) { r = (((maxR -minR)/2 + minR))+1; c = (((maxC -minC)/2 + minC))+1; return; } else if(sitrep.thing[(((maxR -minR)/2 + minR))+1][(((maxC -minC)/2 + minC))-1].rank!=archer) { r = (((maxR -minR)/2 + minR))+1; c = (((maxC -minC)/2 + minC))-1; return; } else if(sitrep.thing[(((maxR -minR)/2 + minR))-1][(((maxC -minC)/2 + minC))-1].rank!=archer) { r = (((maxR -minR)/2 + minR))-1; c = (((maxC -minC)/2 + minC))-1; return; } else if(sitrep.thing[(((maxR -minR)/2 + minR))-1][(((maxC -minC)/2 + minC))+1].rank!=archer) { r = (((maxR -minR)/2 + minR))-1; c = (((maxC -minC)/2 + minC))+1; return; } if(sitrep.thing[(((maxR -minR)/2 + minR))+2][(((maxC -minC)/2 + minC))+1].rank!=archer) { r = (((maxR -minR)/2 + minR))+2; c = (((maxC -minC)/2 + minC))+1; return; } else if(sitrep.thing[(((maxR -minR)/2 + minR))+2][(((maxC -minC)/2 + minC))-1].rank!=archer) { r = (((maxR -minR)/2 + minR))+2; c = (((maxC -minC)/2 + minC))-1; return; } else if(sitrep.thing[(((maxR -minR)/2 + minR))-2][(((maxC -minC)/2 + minC))-1].rank!=archer) { r = (((maxR -minR)/2 + minR))-2; c = (((maxC -minC)/2 + minC))-1; return; } else if(sitrep.thing[(((maxR -minR)/2 + minR))-2][(((maxC -minC)/2 + minC))-1].rank!=archer) { r = (((maxR -minR)/2 + minR))-2; c = (((maxC -minC)/2 + minC))+1; return; } else { setRand(minR, maxR, minC, maxC, sitrep); return; } } else if (rank==infantry) { sideOfBoard loca = findSide(minR, maxR, minC, maxC); if(loca==brt) { int i, j; for(j=minC; j<maxC;j++) { for(i=minR; i<maxR; i++) { if(sitrep.thing[i][j].what==space) { r=i; c=j; return; } } } } if(loca==blt) { int i, j; for(j=maxC; j>minC;j--) { for(i=maxR; i>minR; i--) { if(sitrep.thing[i][j].what==space) { r=i; c=j; return; } } } } } }