1998/traker1.r

001/*
002        T r a k e r
003          ver. 1
004 
005    di
006        Antonio Gallo
007 
008TATTICA:
009    L'autore di !.r diceva che il suo robot era invincibile.
010    Tracker e' il frutto di 2 giorni (gli unici che purtroppo ho
011    potuto dedicare a cRobots durante tutta l'estate) per dimostrare
012    il contrario.
013 
014    TRACKER1 si muove sulle diagonali cercando di colpire !.r nell'angolo.
015    In combattimenti a due (TRACKER1 contro !), tracker ha la meglio nel
016    60% dei casi.
017 
018    TRACKER non ha paura dei robot basati su !.r
019    TRACKER ha molta paura dei robor che si muovono lungo i bordi.
020*/
021 
022/* Dichiarezione variabili*/
023int dir, dx, dy, an1, an2, ap;
024int deg, rng, r, dam;
025 
026main()
027{
028  /* Inizializziazione variabili */
029  dam = 0;
030  deg = 0;
031  rng=0;
032  r=0;
033  an1 = 0;
034  an2 = 0;
035  ap  = 10;
036  dx  = 1;
037  dy  = 1;
038 
039  /* Inizializziazione direzione di movimento */
040  change();
041 
042  while(1) {
043    if (loc_y()<150) {
044      dy=1;
045      change();
046    } else {
047      if (loc_y()>850) {
048        dy=-1;
049    change();
050      }
051    }
052    if (loc_x()<150) {
053      dx=1;
054      change();
055    } else {
056      if (loc_x()>850) {
057        dx=-1;
058    change();
059      }
060    }
061 
062    /* Cerca il bersaglio */
063    track();
064 
065    /* Se viene colpito cambia leggermente direzione */
066    if (dam != damage() ) {
067      dam=damage();
068      dir = dir + ( rand(90)-45 );
069    }
070 
071    drive(dir,100);
072  
073}
074 
075 
076/*
077    CHANGE:
078    Effettua un cambio di direzione se ci stiamo
079    avvicinando troppo al bordo del campo
080*/
081change()
082{
083  if (dx==1) {
084    if (dy==1) dir=45;
085    else
086    if (dy==-1) dir=315;
087    else
088    dir=0;
089  } else {
090    if (dx==-1) {
091      if (dy==1) dir=135;
092      else
093      if (dy==-1) dir=225;
094      else
095      dir=180;
096    } else {
097      if (dy==1) dir=90;
098      else
099      if (dy==-1) dir=270;
100    }
101  }
102}
103 
104/*
105    TRACK :
106    Cerca un bersaglio e spara
107    La routine e stata presa da !.r (se ricordo bene)
108*/
109track()
110{
111  if (!(rng=scan(deg,10)))
112    while (!(rng=scan(deg+=20,10)));
113  if (!scan(deg+=5,5)) deg-=10;
114  if (!scan(deg+=3,3)) deg-=6;
115  if (r=scan(deg,10)) {
116    cannon(deg,r+r-rng);
117    deg-=40;
118  };
119 
120}
121