2001/klr2.r
001 | /* KLR2 versione (no comment) */ |
002 | /* Questo microrobottino � praticamente identico ad sdc2.r */ |
003 | /* con la sola differenza che oscilla in alto e non tenta di */ |
004 | /* tracciare in continuazione l'avversario. */ |
005 | /* Se doveste escludere uno dei due robot */ |
006 | /* vorrei partecipare con sdc2.r */ |
007 | /* Tanti saluti a tutti! */ |
008 | /* Ferraro Salvatore */ |
009 |
010 | /* Non sto a ricommentare il codice! */ |
011 |
012 |
013 | int angx,angy,course,ang,oang,range,orange,spd; |
014 | main() |
015 | { |
016 | ang=180; |
017 | angy=980; |
018 | while (1){ |
019 | angx=30; |
020 | Vai(); |
021 | angx=970; |
022 | Vai(); |
023 | } |
024 | } |
025 | |
026 | Direzione (xx,yy) |
027 | int xx,yy; |
028 | { |
029 | int d; |
030 | int x,y; |
031 | int curx, cury; |
032 | curx=loc_x(); |
033 | cury=loc_y(); |
034 | x=curx-xx; |
035 | y=cury-yy; |
036 | if (!x) |
037 | d=90+(180*(yy<cury)); |
038 | else { |
039 | if (yy<cury) |
040 | d= atan ((100000*y)/x)+180+180*(xx>curx); |
041 | else |
042 | d= atan ((100000*y)/x)+180*(xx<curx); |
043 | } |
044 | return (d); |
045 | } |
046 |
047 |
048 | Distanza (x1,y1,x2,y2) |
049 | int x1,y1,x2,y2; |
050 | { |
051 | int x,y,d; |
052 | x = x1-x2; |
053 | y = y1-y2; |
054 | d = sqrt ((x*x)+(y*y)); |
055 | return (d); |
056 | } |
057 |
058 |
059 | Vai () |
060 | { |
061 | course=Direzione(angx,angy); |
062 | while (Distanza(loc_x(),loc_y(),angx,angy)>270){ |
063 | drive(course,100); |
064 | ang%=180; |
065 | ang+=180; |
066 | Fuoco(); |
067 | } |
068 | } |
069 |
070 | Combatti() |
071 | { |
072 | int r1,r2,r; |
073 | if (((r1=scan(ang,5))>50)&&((r2=scan(ang+6,5))>50)) |
074 | { |
075 | if (((r=scan(ang+3,2))>50)) |
076 | { |
077 | if (r<350) cannon(ang+3,r+(r-r2)); |
078 | else |
079 | { |
080 | if (((r=scan(ang+2,1))>50)) cannon(ang+2,r+(r-r2)); |
081 | else |
082 | if (((r=scan(ang+4,1))>50)) cannon(ang+4,r+(r-r2)); |
083 | } |
084 | } |
085 | } |
086 | ang+=20; |
087 | } |
088 |
089 |
090 |
091 | scan_() |
092 | { |
093 | if (scan(ang+354,1)) ang+=354; |
094 | if (scan(ang+6, 1)) ang+=6; |
095 | if (scan(ang+356,1)) ang+=356; |
096 | if (scan(ang+4, 1)) ang+=4; |
097 | if (scan(ang+358,1)) ang+=358; |
098 | if (scan(ang+2, 1)) ang+=2; |
099 | } |
100 |
101 |
102 |
103 | Fuoco() |
104 | { |
105 | if (orange=scan(ang,10)) { |
106 | if (orange>850) return ; |
107 | else { |
108 | scan_(); |
109 | if (orange=scan(oang=ang,5)) |
110 | { |
111 | scan_(); |
112 | if (range=scan(ang,10)) |
113 | { |
114 | spd=speed()>0; |
115 | return cannon(ang+(ang-oang)*((1200+range)>>9)-(spd* sin (ang-course)>>14), |
116 | range*172/(172+orange-range-(spd* cos (ang-course)>>12))); |
117 | } |
118 | } |
119 | } |
120 | } |
121 | Combatti(); |
122 | } |