PROGRAM (BASIC) PENTRU SIMULAREA CURSELOR DE VITEZĂ LA AUTOMODELE RADIOCOMANDATE ÎN SCOPUL ANTRENAMENTELOR
PROGRAM (BASIC) PENTRU SIMULAREA CURSELOR DE VITEZĂ LA AUTOMODELE RADIOCOMANDATE ÎN SCOPUL ANTRENAMENTELOR Dr. LIVIU MIHAIL BALOIU
5 CLS 10 GO SUB 9200 20 GO SUB 9400 25 RESTORE 30 CLS: GO SUB 9000 40 LET v=4: LET x1=115: LET y1=55: LET dx=1: LET dy=1: LET s=1: LET b=0: LET t=0 45 PLOT x1,y1 50 PRINT AT 21,0;"Apasati orice tasta pt. start -" 60 PAUSE 0: PRINT AT 21,0;"" 65 LET t0=65536*PEEK 23674+256*PEEK 23673+PEEK 23672 70 LET c$=INKEY$ 80 IF c$="" THEN GO TO 130 85 IF c$="a" AND v>0 THEN LET v=v-1: GO TO 120 90 IF c$="d" AND v<6 THEN LET v=v+1: GO TO 130 100 IF c$="j" THEN GO TO 1000 110 IF c$="l" THEN GO TO 1100 120 IF c$="0" THEN GO TO 900 130 LET x2=x1+v*dx: LET y2=y1+v*dy 140 PLOT OVER 1,x1,y1: PLOT x2,y2: LET x1=x2: LET y1=y2 150 IF s=1 AND x1>172 THEN LET s=2: GO TO 240 151 IF s=1 AND y1<60 THEN GO TO 250 152 IF s=1 AND y1>(270-x1) THEN LET s=2: GO TO 260 153 IF s=1 THEN GO TO 250 160 IF s=2 AND x1>102 THEN LET s=3: GO TO 270 162 IF s=2 THEN GO TO 260 165 IF s=3 AND x1>200 THEN LET s=4: GO TO 280 166 IF s=3 THEN GO TO 270 170 IF s=4 AND x1<200 THEN LET s=5: GO TO 290 171 IF s=4 THEN GO TO 280 175 IF s=5 AND x1>200 THEN LET s=6: GO TO 300 176 IF s=5 THEN GO TO 290 180 IF s=6 AND x1>218 THEN LET s=7: GO TO 310 181 IF s=6 THEN GO TO 300 185 IF s=7 AND y1>64 THEN LET s=8: GO TO 320 186 IF s=7 THEN GO TO 310 190 IF s=8 AND y1>120 THEN LET s=9: GO TO 330 191 IF s=8 THEN GO TO 320 195 IF s=9 AND x1<216 THEN LET s=10: GO TO 340 196 IF s=9 THEN GO TO 330 200 IF s=10 AND x1<32 THEN LET s=11: GO TO 350 201 IF s=10 THEN GO TO 340 205 IF s=11 AND x1>32 THEN LET s=12: GO TO 360 206 IF s=11 AND x1<78 THEN LET s=13: GO TO 370 210 IF s=12 AND x1<78 THEN LET s=13: GO TO 370 211 IF s=12 THEN GO TO 360 220 IF s=13 AND y1>90 THEN GO TO 370 221 IF s=13 AND y1<76 THEN LET s=14: GO TO 380 225 IF s=13 AND y1<(x1-12) THEN LET s=14: GO TO 390 227 IF s=13 THEN GO TO 370 230 IF s=14 AND y1>78 THEN GO TO 390 232 IF s=14 AND y1>64 THEN LET s=15: GO TO 390 235 IF s=14 AND y1<(x1+8) THEN LET s=15: GO TO 390 237 IF s=14 THEN GO TO 390 240 IF s=15 AND x1>102 THEN GO TO 390 242 IF s=15 AND x1>114 THEN LET s=16: GO TO 250 243 IF s=15 AND y1<(x1-62) THEN GO TO 390 244 IF s=15 THEN LET s=16: GO TO 250 245 IF s=16 AND x1>133 THEN LET s=1: LET b=b+1: GO TO 250 246 IF s=16 AND x1>121 THEN GO TO 250 247 IF s=16 AND y1<(x1-74) THEN GO TO 250 248 LET s=1: LET b=b+1 250 IF y1>(x1-74) AND y1<(x1-50) THEN GO TO 400 255 GO TO 9300 260 LET d=(x1-182)*(x1-182)+(y1-88)*(y1-88) 261 IF d<265 OR d>1024 THEN GO TO 9300 262 GO TO 400 270 IF y1<104 OR y1>120 THEN GO TO 9300 271 GO TO 400 280 LET d=(x1-200)*(x1-200)+(y1-96)*(y1-96) 281 IF d<64 OR d>576 THEN GO TO 9300 282 GO TO 400 290 LET d=(x1-200)*(x1-200)+(y1-60)*(y1-60) 291 IF d<144 OR d>784 THEN GO TO 9300 295 GO TO 400 300 IF y1>48 OR y1<32 THEN GO TO 9300 301 GO TO 400 310 LET d=(x1-216)*(x1-216)+(y1-64)*(y1-64) 311 GO TO 261 320 IF x1<232 OR x1>248 THEN GO TO 9300 321 GO TO 400 330 LET d=(x1-216)*(x1-216)+(y1-120)*(y1-120) 331 GO TO 261 340 IF y1<136 OR y1>152 THEN GO TO 9300 341 LET d=(x1-32)*(x1-32)+(y1-132)*(y1-132) 350 GO TO 400 351 IF d<16 OR d>2441 THEN GO TO 9300 352 GO TO 400 360 IF y1<112 OR y1>128 THEN GO TO 9300 361 GO TO 400 370 LET d=(x1-78)*(x1-78)+(y1-98)*(y1-98) 371 IF d<144 OR d>704 THEN GO TO 9300 372 GO TO 400 380 IF y1>(x1-12) OR y1<(x1+8) THEN GO TO 400 381 GO TO 9300 390 LET d=(x1-95)*(x1-95)+(y1-60)*(y1-60) 391 IF d<121 OR d>784 THEN GO TO 9300 400 LET t1=65536*PEEK 23674+256*PEEK 23673+PEEK 23672 401 LET t=(INT((t1-t0)/50))/10 402 PRINT AT 1,27;t;AT 1,7;v;AT 1,17;b 405 IF t<g THEN GO TO 425 410 IF v=1 THEN PAUSE 5: GO TO 425 415 IF v=2 THEN PAUSE 10: GO TO 425 420 IF v=3 THEN PAUSE 15: GO TO 425 424 PAUSE 20 425 IF t<g AND t<>0 THEN GO TO 70 430 IF t<g THEN GO TO 450 435 IF s=1 AND s<16 THEN LET f=2: GO TO 70 437 IF f=1 THEN GO TO 70 440 IF f=2 AND s=1 THEN PRINT AT 21,0;FLASH 1;"GATA": PRINT "Apasati o tasta !": PAUSE 0: GO TO 900 445 GO TO 70 450 LET f=1: PRINT AT 1,27;"";AT 1,27;t 452 BEEP 0.2,25 454 LET t=0: GO TO 70 900 INPUT "Reluati ? ((d)=DA,(n)=NU)";c$ 905 IF c$="n" THEN STOP 910 PLOT OVER 1,x1,y1: PRINT AT 1,27;"";AT 1,7;"";AT 1,17;"" 700 GO TO 40 1000 IF v>4 THEN GO TO 1200 1010 IF v<2 THEN GO TO 1050 1015 LET dx=INT(dx+.5): LET dy=INT(dy+.5) 1020 IF dx=1 AND dy<1 THEN LET dy=dy+1: GO TO 130 1025 IF dx=1 THEN LET dx=0: GO TO 130 1030 IF dx=-1 AND dy>-1 THEN LET dy=dy-1: GO TO 130 1035 IF dx=-1 THEN LET dx=0: GO TO 130 1040 LET dx=-dy: GO TO 130 1050 IF v>3 THEN LET dx=(INT(dx*3+.5))/3: LET dy=(INT(dy*3+.5))/3: GO TO 1060 1055 LET dx=(INT(dx*4+.5))/4: LET dy=(INT(dy*4+.5))/4 1060 IF dx=1 AND dy<1 THEN LET dy=dy+1/v: GO TO 130 1065 IF dy=1 AND dx>-1 THEN LET dx=dx-1/v: GO TO 130 1070 IF dx=-1 AND dy>-1 THEN LET dy=dy-1/v: GO TO 130 1075 LET dx=dx+1/v: GO TO 130 1100 IF v>4 THEN GO TO 1200 1110 IF v<2 THEN GO TO 1150 1115 LET dx=INT(dx+.5): LET dy=INT(dy+.5) 1120 IF dx=1 AND dy>-1 THEN LET dy=dy-1: GO TO 130 1125 IF dx=1 THEN LET dx=0: GO TO 130 1130 IF dx=-1 AND dy<1 THEN LET dy=dy+1: GO TO 130 1135 IF dx=-1 THEN LET dx=0: GO TO 130 1140 LET dx=dy: GO TO 130 1150 IF v>3 THEN LET dx=(INT(dx*3+.5))/3: LET dy=(INT(dy*3+.5))/3: GO TO 1160 1155 LET dx=(INT(dx*4+.5))/4: LET dy=(INT(dy*4+.5))/4 1160 IF dx=1 AND dy>-1 THEN LET dy=dy-1/v: GO TO 130 1165 IF dy=1 AND dx>-1 THEN LET dx=dx-1/v: GO TO 130 1170 IF dx=-1 AND dy<1 THEN LET dy=dy+1/v: GO TO 130 1175 LET dx=dx+1/v: GO TO 130 1200 PRINT AT 21,1;FLASH 1;"V-ati rasturnat!": GO TO 9305 9000 PLOT 32,152: DRAW 184,0: DRAW 32,-32,-PI/2: DRAW 0,-56 9005 DRAW -32,-32,-PI/2: DRAW -16,0: DRAW 0,56,-PI: DRAW 0,16,PI 9010 DRAW -16,0: DRAW -11,-5,PI/4: DRAW -60,-60 9015 DRAW -40,40,-PI: DRAW 12,12 9020 DRAW -4,20,3*PI/4: DRAW -50,0: DRAW 0,40,-PI 9050 PLOT 32,136: DRAW 184,0: DRAW 16,-16,-PI/2: DRAW 0,-56 9055 DRAW -16,-16,-PI/2: DRAW -16,0: DRAW 0,24,-PI: DRAW 0,48,PI 9060 DRAW -16,0: DRAW -23,-9,PI/4: DRAW -60,-60 9063 DRAW -14,14,-PI: DRAW 12,12 9070 DRAW -24,50,3*PI/4: DRAW -44,0: DRAW 0,8,-PI 9075 PLOT 123,49: DRAW -12,12 9080 PRINT AT 15,17;"S";AT 16,17;"T";AT 17,17;"A";AT 18,17;"R";AT 19,17;"T" 9085 FOR I=USR "A" TO USR "B"+7: READ J: POKE I,J: NEXT I 9090 DATA 3,7,14,28,56,112,224,192 9091 DATA 31,15,15,31,57,112,224,192 9093 PRINT AT 11,15;"A";AT 10,16;"A";AT 9,17;"B" 9098 PRINT AT 1,0;"Viteza=";AT 1,10;"Nr.ture=";AT 1,20;"Timpul=" 9099 RETURN 9200 PRINT AT 0,7;"SIMULATOR";AT 2,11;"pentru antrenamentele curselor de viteza cu automodele telecomandate" 9203 PRINT AT 6,15;"L.M. Baloiu 1989" 9205 PRINT AT 8,3;"Tastele de comanda sint:";AT 9,10;"(a) pt.frinare";AT 10,10;"(d) pt.accelerare";AT 11,10;"(j) pt. la stinga";AT 12,10;"(l) pt. la dreapta" 9210 PRINT AT 14,5;"ATENTIE ";AT 15,1;"cursa se opreste daca parasiti pista " 9215 PRINT AT 20,11;"Apasati orice tasta !" 9220 PAUSE 0: RETURN 9300 PRINT AT 21,0;"Ati iesit din traseu !" 9305 FOR I=1 TO 10: BEEP .2,15+3*I: NEXT I 9310 GO TO 900 9400 CLS: PRINT "Alegeti gradul de dificultate astfel:" 9405 PRINT: PRINT: PRINT "1-dificil","2-mediu","3-uşor" 9410 INPUT "Ce ati ales?";d 9412 IF d<1 OR d>5 THEN GO TO 9400 9420 INPUT "Cite minute dureaza cursa?";g: LET g=g*60 9430 RETURN
Cine crede că în București nu au loc curse de formula 1 se înșeală. Tot la fel și cine crede că în toată lumea sunt mai puțin de 100 de piloți pentru asemenea curse. Autorul acestor rânduri, care până de curând se numara și el printre cei care se "înșeală", a asistat la o asemenea cursă. Unde? În curtea Liceului Industrial Semănătoarea! Ce-i drept, mașinile de concurs erau cam de mărimea unei cutii de pantofi, parcursul măsura, cu totul, vreo 280 de metri, iar piloții stăteau cu toții pe o platformă ridicată deasupra poligonului, de unde dirijau vehiculele prin intermediul unor radioemiţătoare. Dar circuitul se parcurgea în circa 23 de secunde pe tur, adică cu o viteză medie de 45 km/oră, ceea ce însemna peste 80 km/oră pe porțiunile drepte și aceasta conferea probei o spectaculozitate cu totul aparte. Micile mașini își ambalau motoarele asemenea surorilor lor mai mari, pe care de altfel le reproduceau în miniatură cu fidelitate, făceau tot atâta gălăgie și fum, derapau în virajele strânse, accelerau și frânau fulgerător. Mai des, mult mai des însă, decât cele adevărate, loveau mantinela care delimita traseul și ricoșau mârâind.
Dacă stai să te gândești, este aproape normal să se întâmple așa! Să faci în 23 de secunde 7 viraje, cu întoarceri între 90 și 180 de grade, să frânezi și să accelerezi de cel puțin tot atâtea ori, să decizi în timpi de ordinul fracțiunilor de secundă ce comenzi să transmiți micului bolid și să le și execuți, toate acestea presupun o mare putere de concentrare, reflexe uluitor de prompte, nervi de oțel și, mai mult ca sigur, multe, foarte multe ore de antrenament la „volanul" de la stația de radio comandă (era să zic de la volan, deși greșeala nu ar fi fost prea mare).
Iar oamenii de la stația de radio comandă, vreo câteva sute numai în România, își iau aceste multe ore din timpul lor liber, atunci când nu împart cu construcția, reglarea sau întreținerea motorului și angrenajelor, foarte sofisticate și pretențioase, ale automodelului. Deci până la urmă, regula jocului este clară: cu cât mai multe ore de antrenament, cu atât mai multe zecimi de secundă câștiga-te în ziua competiției oficiale. La fel ca la cei mari.
De aici s-a născut ideea unui simulator pe calculator, simulator care să reproducă cât mai fidel condițiile poligonului real fără însă să ne intereseze dacă e zi sau noapte, soare sau ninsoare, dacă motorul s-a încins prea tare sau dacă nu mai avem destul combustibil la dispoziție.
Concretizarea ideii este prezentată în cele de mai jos printr-un program scris în limbaj BASIC pentru calculatoarele personale compatibile SPECTRUM (adică TIM-S, HC-85, COBRA), calculatoare care au intrat de acum în dotarea tuturor caselor pionierilor, a numeroase școli generale și licee, a centrelor de creație și cultură socialistă „Cântarea României" pentru tineret.
Nu vom pretinde că un sportiv care se antrenează, să zicem, 50 de ore pe simulator îi va învinge pe un altul care a alergat 10 ore pe pistă, dar suntem convinși că folosirea simulatorului în primele etape ale antrenamentului sau pentru menținerea tonusului reflexelor poate aduce foloase notabile. Iar în ceea ce îi privește pe începători, faptul că pot învăța fără a uza modelele și motoarele, atât de fragile, că la lovirea mantinelei nu se strică și nu se sparge nimic, constituie avantaje deloc neglijabile.
Să vedem cum arată simulatorul.
La încărcarea programului, după comanda RUN, ni se prezintă tastele de comandă: două situate în stânga tastaturii calculatorului (a și d) pentru frânare și respectiv accelerare și alte două în dreapta tastaturii (j și l) pentru „la stânga" și respectiv „la dreapta".
Ni se cere apoi să dăm gradul de dificultate al cursei, printr-un număr. Cu cât numărul va fi mai mare, cu atât punctul care simulează automodelul se va mișca mai lent pe ecran, va fi deci mai ușor de condus. Mai suntem întrebați care este timpul de concurs, pe care îl vom da în minute. La fiecare din cele două întrebări se va răspunde apăsând tasta cifrei corespunzătoare, urmată de apăsarea tastei ENTER (CR).
Pe ecranul televizorului ne va apărea traseul, având marcate linia de start și sensul de parcurgere. În partea de sus, trei poziții: viteza, numărul de ture parcurse și timpul. Viteza poate lua 7 valori, de la 0 (zero) la 6. Viteza zero nu implică oprirea motorului, automodelul poate fi pornit din nou prin accelerare. La vitezele 1 și 2 virajele se iau normal, la vitezele 3 și 4 sunt considerabil mai largi, iar la vitezele 5 și 6 încercarea de a vira duce la „răsturnarea" modelului și implicit la oprirea cursei, care se va relua de la început. Numărul de ture se socotește în mod normal, fiecare trecere peste linia de start însemnând o tură în plus. Timpul afișat este, inițial, timpul în secunde și zecimi scurs de la start. După încheierea timpului planificat pentru cursă, marcat de simulator printr-un bip scurt, cronometrul repornește de la zero pentru a măsura timpul necesar încheierii ultimului tur, conform regulamentului de concurs.
Cursa se încheie la terminarea ultimului tur după scurgerea timpului planificat inițial (cazul ideal), la răsturnare sau la părăsirea traseului marcat. Simulatorul se mai poate opri și prin apăsarea tastei 0 (zero). Întrucât simulatorul a fost conceput pentru antrenament, nu am considerat necesar să ținem cont de prevederea conform căreia un automodel se poate repune în cursă din locul unde s-a oprit accidental, astfel că, indiferent de motivul întreruperii traseului, acesta se reia de la start.
La gradul de dificultate 1 programul este suficient de rapid (pentru autorul său, chiar prea rapid). Supercampionii pot încerca să introducă la gradul de dificultate și valoarea 0 (zero), pe care calculatorul o acceptă și face ca mișcarea să fie și mai rapidă, iar dacă nici așa nu sunt satisfăcuți pot face apel la compilatorul prezentat în nr. 2/1988 al revistei MODELISM, la pag. 17.