hpp-lang 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +29 -0
  3. package/dist/ast.d.ts +89 -0
  4. package/dist/ast.d.ts.map +1 -0
  5. package/dist/ast.js +2 -0
  6. package/dist/ast.js.map +1 -0
  7. package/dist/capabilities.d.ts +75 -0
  8. package/dist/capabilities.d.ts.map +1 -0
  9. package/dist/capabilities.js +181 -0
  10. package/dist/capabilities.js.map +1 -0
  11. package/dist/errors.d.ts +21 -0
  12. package/dist/errors.d.ts.map +1 -0
  13. package/dist/errors.js +27 -0
  14. package/dist/errors.js.map +1 -0
  15. package/dist/examples.d.ts +9 -0
  16. package/dist/examples.d.ts.map +1 -0
  17. package/dist/examples.js +780 -0
  18. package/dist/examples.js.map +1 -0
  19. package/dist/extensions/line/index.d.ts +45 -0
  20. package/dist/extensions/line/index.d.ts.map +1 -0
  21. package/dist/extensions/line/index.js +99 -0
  22. package/dist/extensions/line/index.js.map +1 -0
  23. package/dist/extensions/maze/index.d.ts +37 -0
  24. package/dist/extensions/maze/index.d.ts.map +1 -0
  25. package/dist/extensions/maze/index.js +43 -0
  26. package/dist/extensions/maze/index.js.map +1 -0
  27. package/dist/extensions/soccer/index.d.ts +8 -0
  28. package/dist/extensions/soccer/index.d.ts.map +1 -0
  29. package/dist/extensions/soccer/index.js +93 -0
  30. package/dist/extensions/soccer/index.js.map +1 -0
  31. package/dist/hardware.d.ts +44 -0
  32. package/dist/hardware.d.ts.map +1 -0
  33. package/dist/hardware.js +2 -0
  34. package/dist/hardware.js.map +1 -0
  35. package/dist/index.d.ts +59 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +69 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/interpreter.d.ts +88 -0
  40. package/dist/interpreter.d.ts.map +1 -0
  41. package/dist/interpreter.js +795 -0
  42. package/dist/interpreter.js.map +1 -0
  43. package/dist/lexer.d.ts +21 -0
  44. package/dist/lexer.d.ts.map +1 -0
  45. package/dist/lexer.js +175 -0
  46. package/dist/lexer.js.map +1 -0
  47. package/dist/parser.d.ts +60 -0
  48. package/dist/parser.d.ts.map +1 -0
  49. package/dist/parser.js +569 -0
  50. package/dist/parser.js.map +1 -0
  51. package/dist/robotics/actions.d.ts +13 -0
  52. package/dist/robotics/actions.d.ts.map +1 -0
  53. package/dist/robotics/actions.js +38 -0
  54. package/dist/robotics/actions.js.map +1 -0
  55. package/dist/robotics/contracts.d.ts +88 -0
  56. package/dist/robotics/contracts.d.ts.map +1 -0
  57. package/dist/robotics/contracts.js +31 -0
  58. package/dist/robotics/contracts.js.map +1 -0
  59. package/dist/robotics/index.d.ts +21 -0
  60. package/dist/robotics/index.d.ts.map +1 -0
  61. package/dist/robotics/index.js +19 -0
  62. package/dist/robotics/index.js.map +1 -0
  63. package/dist/robotics/motion.d.ts +139 -0
  64. package/dist/robotics/motion.d.ts.map +1 -0
  65. package/dist/robotics/motion.js +248 -0
  66. package/dist/robotics/motion.js.map +1 -0
  67. package/dist/robotics/sensors.d.ts +15 -0
  68. package/dist/robotics/sensors.d.ts.map +1 -0
  69. package/dist/robotics/sensors.js +12 -0
  70. package/dist/robotics/sensors.js.map +1 -0
  71. package/dist/robotics/snapshot.d.ts +12 -0
  72. package/dist/robotics/snapshot.d.ts.map +1 -0
  73. package/dist/robotics/snapshot.js +9 -0
  74. package/dist/robotics/snapshot.js.map +1 -0
  75. package/dist/robotics/types.d.ts +12 -0
  76. package/dist/robotics/types.d.ts.map +1 -0
  77. package/dist/robotics/types.js +9 -0
  78. package/dist/robotics/types.js.map +1 -0
  79. package/dist/runtime.d.ts +81 -0
  80. package/dist/runtime.d.ts.map +1 -0
  81. package/dist/runtime.js +150 -0
  82. package/dist/runtime.js.map +1 -0
  83. package/dist/tokens.d.ts +33 -0
  84. package/dist/tokens.d.ts.map +1 -0
  85. package/dist/tokens.js +97 -0
  86. package/dist/tokens.js.map +1 -0
  87. package/dist/version.d.ts +14 -0
  88. package/dist/version.d.ts.map +1 -0
  89. package/dist/version.js +6 -0
  90. package/dist/version.js.map +1 -0
  91. package/package.json +49 -0
@@ -0,0 +1,780 @@
1
+ /** Programas-exemplo H++ (PT) — do primeiro passo ao goleiro. */
2
+ export const EXAMPLES = [
3
+ {
4
+ id: 'danca',
5
+ name: '1 · Dança do robô',
6
+ level: 'Fundamental 1 — primeira execução',
7
+ code: `# Meu primeiro programa: o robô dança sem parar!
8
+ # O SEMPRE roda um pouquinho a cada ciclo.
9
+ SEMPRE
10
+ ANDAR 0.5
11
+ GIRAR 0.8
12
+ FIM
13
+ `
14
+ },
15
+ {
16
+ id: 'perseguidor',
17
+ name: '2 · Perseguidor de bola',
18
+ level: 'Fundamental 1 — sensores',
19
+ code: `# Se vejo a bola, miro e ando. Perto e de frente: CHUTO!
20
+ SE ver_bola ENTAO
21
+ MIRAR_BOLA
22
+ ANDAR 0.7
23
+ SE dist_bola < 0.2 E abs(direcao_bola) < 15 ENTAO
24
+ CHUTAR
25
+ FIM
26
+ SENAO
27
+ GIRAR 0.5
28
+ FIM
29
+ `
30
+ },
31
+ {
32
+ id: 'goleiro',
33
+ name: '3 · Goleiro esperto',
34
+ level: 'Fundamental 2 — variáveis e lógica',
35
+ code: `# Guarda a linha do gol e afasta o perigo.
36
+ # memoria: conta quantas vezes afastei a bola.
37
+ afastadas = 0
38
+
39
+ SE ver_bola ENTAO
40
+ SE dist_bola < 0.35 ENTAO
41
+ MIRAR_GOL
42
+ CHUTAR
43
+ afastadas = afastadas + 1
44
+ SENAO
45
+ MIRAR_BOLA
46
+ SE abs(direcao_bola) > 90 ENTAO
47
+ GIRAR 0.6
48
+ SENAO
49
+ ANDAR 0.4
50
+ FIM
51
+ FIM
52
+ SENAO
53
+ PARAR
54
+ FIM
55
+ `
56
+ },
57
+ {
58
+ id: 'patrulha',
59
+ name: '4 · Patrulha com função',
60
+ level: 'Fundamental 2 — funções e repetição',
61
+ code: `# Minha função: gira para procurar a bola.
62
+ FUNCAO procurar()
63
+ GIRAR 0.7
64
+ FIM
65
+
66
+ SE ver_bola ENTAO
67
+ MIRAR_BOLA
68
+ ANDAR 0.6
69
+ SE dist_bola < 0.25 ENTAO
70
+ CHUTAR
71
+ FIM
72
+ SENAO
73
+ procurar()
74
+ FIM
75
+ `
76
+ },
77
+ {
78
+ id: 'dupla',
79
+ name: '5 · Dupla pelo rádio',
80
+ level: 'Fundamental 2 — equipe e linha',
81
+ code: `# Fujo da linha branca, persigo a bola e aviso a equipe.
82
+ SE linha_frente ENTAO
83
+ GIRAR 0.8
84
+ SENAO
85
+ SE ver_bola ENTAO
86
+ MIRAR_BOLA
87
+ ANDAR 0.6
88
+ SE dist_bola < 0.25 ENTAO
89
+ CHUTAR
90
+ ENVIAR_RADIO 1
91
+ FIM
92
+ SENAO
93
+ GIRAR 0.4
94
+ FIM
95
+ FIM
96
+ `
97
+ },
98
+ {
99
+ id: 'cola',
100
+ name: '6 · Cola na bola (dribbler)',
101
+ level: 'Fundamental 2 — condução',
102
+ code: `# Liga o rolete para grudar a bola e leva até o gol.
103
+ SE ver_bola ENTAO
104
+ MIRAR_BOLA
105
+ DRIBLAR 1
106
+ ANDAR 0.7
107
+ SE dist_bola < 0.2 ENTAO
108
+ MIRAR_GOL
109
+ SE direcao_bola > -10 E direcao_bola < 10 ENTAO
110
+ DRIBLAR 0
111
+ CHUTAR
112
+ FIM
113
+ FIM
114
+ SENAO
115
+ DRIBLAR 0
116
+ GIRAR 0.5
117
+ FIM
118
+ `
119
+ },
120
+ {
121
+ id: 'linha',
122
+ name: '7 · Respeita a linha',
123
+ level: 'Fundamental 1 — regras do jogo',
124
+ code: `# A regra proíbe cruzar a linha branca com mais da metade do corpo:
125
+ # quem cruza sai do campo por 60 segundos! Vendo a linha na frente,
126
+ # dou ré fazendo meia-volta; vendo atrás, paro. A bola pode estar
127
+ # do outro lado — eu NÃO atravesso, procuro de dentro do campo.
128
+ SE linha_frente ENTAO
129
+ ANDAR -0.5
130
+ GIRAR 0.8
131
+ SENAO
132
+ SE linha_tras ENTAO
133
+ PARAR
134
+ SENAO
135
+ SE ver_bola ENTAO
136
+ MIRAR_BOLA
137
+ ANDAR 0.6
138
+ SENAO
139
+ GIRAR 0.4
140
+ FIM
141
+ FIM
142
+ FIM
143
+ `
144
+ },
145
+ {
146
+ id: 'segura',
147
+ name: '8 · Finalização segura',
148
+ level: 'Fundamental 2 — sem gol contra',
149
+ code: `# Chutar de qualquer jeito pode dar gol contra! Perto da bola,
150
+ # miro o gol de ataque e só chuto bem de frente; se não,
151
+ # conduzo com o drible até a posição certa.
152
+ SE ver_bola ENTAO
153
+ SE dist_bola < 0.25 ENTAO
154
+ MIRAR_GOL
155
+ DRIBLAR 1
156
+ SE abs(direcao_bola) < 12 ENTAO
157
+ DRIBLAR 0
158
+ CHUTAR
159
+ FIM
160
+ SENAO
161
+ MIRAR_BOLA
162
+ DRIBLAR 1
163
+ ANDAR 0.6
164
+ FIM
165
+ SENAO
166
+ DRIBLAR 0
167
+ GIRAR 0.4
168
+ FIM
169
+ `
170
+ },
171
+ {
172
+ id: 'atacante_v2',
173
+ name: '9 · Atacante inteligente V2',
174
+ level: 'Fundamental 2 — estratégia completa',
175
+ code: `# H++ SOCCER — ATACANTE INTELIGENTE V2
176
+ #
177
+ # Estratégia:
178
+ #
179
+ # 1. Proteger o campo
180
+ # 2. Procurar a bola
181
+ # 3. Perseguir a bola
182
+ # 4. Controlar a bola
183
+ # 5. Alinhar para o gol
184
+ # 6. Finalizar
185
+ #
186
+ # O programa trabalha somente com percepção relativa.
187
+ # Não utiliza posição absoluta da bola.
188
+
189
+ # MEMÓRIA
190
+ chutes = 0
191
+ afastadas = 0
192
+ perdidas = 0
193
+ procurando = 0
194
+
195
+ # PROCURAR: executado quando a bola não está visível.
196
+ FUNCAO procurar()
197
+ DRIBLAR 0
198
+ GIRAR 0.45
199
+ procurando = procurando + 1
200
+ FIM
201
+
202
+ # PERSEGUIR: bola distante. Corrige o ângulo, depois avança.
203
+ FUNCAO perseguir()
204
+ DRIBLAR 0
205
+ MIRAR_BOLA
206
+ SE abs(direcao_bola) > 60 ENTAO
207
+ SE direcao_bola < 0 ENTAO
208
+ GIRAR -0.55
209
+ SENAO
210
+ GIRAR 0.55
211
+ FIM
212
+ SENAO
213
+ ANDAR 0.8
214
+ FIM
215
+ FIM
216
+
217
+ # APROXIMAR: bola a distância intermediária.
218
+ FUNCAO aproximar()
219
+ DRIBLAR 0
220
+ MIRAR_BOLA
221
+ SE abs(direcao_bola) > 35 ENTAO
222
+ SE direcao_bola < 0 ENTAO
223
+ GIRAR -0.40
224
+ SENAO
225
+ GIRAR 0.40
226
+ FIM
227
+ SENAO
228
+ ANDAR 0.55
229
+ FIM
230
+ FIM
231
+
232
+ # CONTROLAR: bola próxima e sob controle (dribbler ligado).
233
+ # Na condução, quem orienta a trajetória é o GOL (direcao_gol),
234
+ # não mais a bola — aquisição (MIRAR_BOLA) ficou nas fases anteriores.
235
+ FUNCAO controlar()
236
+ DRIBLAR 1
237
+ MIRAR_GOL
238
+ SE abs(direcao_gol) > 30 ENTAO
239
+ SE direcao_gol < 0 ENTAO
240
+ GIRAR -0.35
241
+ SENAO
242
+ GIRAR 0.35
243
+ FIM
244
+ SENAO
245
+ ANDAR 0.35
246
+ FIM
247
+ FIM
248
+
249
+ # FINALIZAR: o chute depende da orientação para o GOL,
250
+ # nunca da direção da bola (bola ≠ gol).
251
+ FUNCAO finalizar()
252
+ MIRAR_GOL
253
+ SE abs(direcao_gol) < 10 ENTAO
254
+ DRIBLAR 0
255
+ CHUTAR
256
+ chutes = chutes + 1
257
+ ENVIAR_RADIO 1
258
+ SENAO
259
+ DRIBLAR 1
260
+ SE direcao_gol < 0 ENTAO
261
+ GIRAR -0.30
262
+ SENAO
263
+ GIRAR 0.30
264
+ FIM
265
+ FIM
266
+ FIM
267
+
268
+ # RECUAR: a linha branca tem prioridade máxima.
269
+ FUNCAO recuar()
270
+ DRIBLAR 0
271
+ ANDAR -0.6
272
+ GIRAR 0.8
273
+ afastadas = afastadas + 1
274
+ FIM
275
+
276
+ # PARAR: usado quando a linha traseira é detectada.
277
+ FUNCAO parar_seguro()
278
+ DRIBLAR 0
279
+ PARAR
280
+ FIM
281
+
282
+ # CICLO PRINCIPAL: segurança, percepção, decisão por distância.
283
+ SEMPRE
284
+ SE linha_frente ENTAO
285
+ recuar()
286
+ SENAO
287
+ SE linha_tras ENTAO
288
+ parar_seguro()
289
+ SENAO
290
+ SE ver_bola ENTAO
291
+ procurando = 0
292
+ perdidas = 0
293
+ SE dist_bola > 0.60 ENTAO
294
+ perseguir()
295
+ SENAO
296
+ SE dist_bola > 0.30 ENTAO
297
+ aproximar()
298
+ SENAO
299
+ SE dist_bola < 0.22 ENTAO
300
+ finalizar()
301
+ SENAO
302
+ controlar()
303
+ FIM
304
+ FIM
305
+ FIM
306
+ SENAO
307
+ perdidas = perdidas + 1
308
+ procurar()
309
+ FIM
310
+ FIM
311
+ FIM
312
+ FIM
313
+ `
314
+ },
315
+ {
316
+ id: 'atacante_v3',
317
+ name: '10 . Atacante inteligente V3',
318
+ level: 'Fundamental 2 — estratégia completa',
319
+ code: `# H++ SOCCER — ATACANTE INTELIGENTE V3
320
+ #
321
+ # Estratégia:
322
+ #
323
+ # 1. Proteger o campo
324
+ # 2. Procurar a bola
325
+ # 3. Perseguir a bola
326
+ # 4. Controlar a bola
327
+ # 5. Alinhar para o gol
328
+ # 6. Finalizar
329
+ #
330
+ # O programa trabalha somente com percepção relativa.
331
+ # Não utiliza posição absoluta da bola.
332
+
333
+ # MEMÓRIA
334
+ chutes = 0
335
+ afastadas = 0
336
+ perdidas = 0
337
+ procurando = 0
338
+
339
+ # PROCURAR: executado quando a bola não está visível.
340
+ FUNCAO procurar()
341
+ DRIBLAR 0
342
+ GIRAR 0.40
343
+ procurando = procurando + 1
344
+ FIM
345
+
346
+ # PERSEGUIR: bola distante. Corrige o ângulo, depois avança.
347
+ FUNCAO perseguir()
348
+ DRIBLAR 0
349
+ MIRAR_BOLA
350
+ SE abs(direcao_bola) > 55 ENTAO
351
+ SE direcao_bola < 0 ENTAO
352
+ GIRAR -0.59
353
+ SENAO
354
+ GIRAR 0.5
355
+ FIM
356
+ SENAO
357
+ ANDAR 0.7
358
+ FIM
359
+ FIM
360
+
361
+ # APROXIMAR: bola a distância intermediária.
362
+ FUNCAO aproximar()
363
+ DRIBLAR 0
364
+ MIRAR_BOLA
365
+ SE abs(direcao_bola) > 35 ENTAO
366
+ SE direcao_bola < 0 ENTAO
367
+ GIRAR -0.42
368
+ SENAO
369
+ GIRAR 0.45
370
+ FIM
371
+ SENAO
372
+ ANDAR 0.57
373
+ FIM
374
+ FIM
375
+
376
+ # CONTROLAR: bola próxima e sob controle (dribbler ligado).
377
+ # Na condução, quem orienta a trajetória é o GOL (direcao_gol),
378
+ # não mais a bola — aquisição (MIRAR_BOLA) ficou nas fases anteriores.
379
+ FUNCAO controlar()
380
+ DRIBLAR 1
381
+ MIRAR_GOL
382
+ SE abs(direcao_gol) > 32 ENTAO
383
+ SE direcao_gol < 0 ENTAO
384
+ GIRAR -0.34
385
+ SENAO
386
+ GIRAR 0.32
387
+ FIM
388
+ SENAO
389
+ ANDAR 0.37
390
+ FIM
391
+ FIM
392
+
393
+ # FINALIZAR: o chute depende da orientação para o GOL,
394
+ # nunca da direção da bola (bola ≠ gol).
395
+ FUNCAO finalizar()
396
+ MIRAR_GOL
397
+ SE abs(direcao_gol) < 10 ENTAO
398
+ DRIBLAR 0
399
+ CHUTAR
400
+ chutes = chutes + 1
401
+ ENVIAR_RADIO 1
402
+ SENAO
403
+ DRIBLAR 1
404
+ SE direcao_gol < 0 ENTAO
405
+ GIRAR -0.30
406
+ SENAO
407
+ GIRAR 0.30
408
+ FIM
409
+ FIM
410
+ FIM
411
+
412
+ # RECUAR: a linha branca tem prioridade máxima.
413
+ FUNCAO recuar()
414
+ DRIBLAR 0
415
+ ANDAR -0.6
416
+ GIRAR 0.8
417
+ afastadas = afastadas + 1
418
+ FIM
419
+
420
+ # PARAR: usado quando a linha traseira é detectada.
421
+ FUNCAO parar_seguro()
422
+ DRIBLAR 0
423
+ PARAR
424
+ FIM
425
+
426
+ # CICLO PRINCIPAL: segurança, percepção, decisão por distância.
427
+ SEMPRE
428
+ SE linha_frente ENTAO
429
+ recuar()
430
+ SENAO
431
+ SE linha_tras ENTAO
432
+ parar_seguro()
433
+ SENAO
434
+ SE ver_bola ENTAO
435
+ procurando = 0
436
+ perdidas = 0
437
+ SE dist_bola > 0.60 ENTAO
438
+ perseguir()
439
+ SENAO
440
+ SE dist_bola > 0.30 ENTAO
441
+ aproximar()
442
+ SENAO
443
+ SE dist_bola < 0.22 ENTAO
444
+ finalizar()
445
+ SENAO
446
+ controlar()
447
+ FIM
448
+ FIM
449
+ FIM
450
+ SENAO
451
+ perdidas = perdidas + 1
452
+ procurar()
453
+ FIM
454
+ FIM
455
+ FIM
456
+ FIM
457
+ `
458
+ },
459
+ {
460
+ id: 'predicados',
461
+ name: '11 · Predicados (perguntas)',
462
+ level: 'Fundamental 2 — funções que respondem',
463
+ code: `# Predicados: FUNCAO + RETORNAR transformam medidas em perguntas.
464
+ # A função enxerga os sensores, as entradas e as variáveis globais.
465
+ FUNCAO gol_alinhado()
466
+ RETORNAR abs(direcao_gol) < 10
467
+ FIM
468
+
469
+ FUNCAO bola_perto()
470
+ RETORNAR dist_bola < 0.25
471
+ FIM
472
+
473
+ SEMPRE
474
+ SE ver_bola ENTAO
475
+ MIRAR_BOLA
476
+ ANDAR 0.6
477
+ SE bola_perto() ENTAO
478
+ MIRAR_GOL
479
+ SE gol_alinhado() ENTAO
480
+ CHUTAR
481
+ FIM
482
+ FIM
483
+ SENAO
484
+ GIRAR 0.4
485
+ FIM
486
+ FIM
487
+ `
488
+ },
489
+ {
490
+ id: 'atacante_v4',
491
+ name: '12 · Atacante inteligente V4',
492
+ level: 'Fundamental 2 — funções que respondem',
493
+ code: `#
494
+ # Estratégia:
495
+ #
496
+ # 1. Respeitar o jogo (parar no fim e no intervalo)
497
+ # 2. Proteger o campo (linhas têm prioridade máxima)
498
+ # 3. Procurar a bola (giro alternado pelo relógio do jogo)
499
+ # 4. Perseguir a bola (longe: corrige o ângulo, depois avança)
500
+ # 5. Aproximar (distância intermediária, chegada suave)
501
+ # 6. Controlar a bola (perto: conduz orientado pelo GOL)
502
+ # 7. Alinhar para o gol
503
+ # 8. Finalizar (só com bola dominada E gol alinhado)
504
+ #
505
+ # O programa trabalha somente com percepção relativa.
506
+ # Não utiliza posição absoluta da bola.
507
+ #
508
+ # NOTA DE MEMÓRIA (importante): no H++ o programa inteiro roda a cada
509
+ # ciclo, então "x = 0" no topo zeraria todo ciclo. Por isso este programa
510
+ # NÃO usa contadores entre ciclos: toda decisão sai só dos sensores do
511
+ # ciclo atual. A alternância da busca usa o relógio do jogo (tempo).
512
+ #
513
+
514
+ # PROCURAR: bola fora de vista. Gira no próprio eixo alternando o lado
515
+ # a cada 5 s de jogo (tempo % 10); sem avançar, para não atravessar
516
+ # a linha durante a busca cega.
517
+ FUNCAO procurar()
518
+ DRIBLAR 0
519
+ SE tempo % 10 < 5 ENTAO
520
+ GIRAR 0.40
521
+ SENAO
522
+ GIRAR -0.40
523
+ FIM
524
+ FIM
525
+
526
+ # PERSEGUIR: bola distante. Primeiro corrige o ângulo, só avança
527
+ # quando já está apontado - evita correr em curva e perder a bola de vista.
528
+ FUNCAO perseguir()
529
+ DRIBLAR 0
530
+ MIRAR_BOLA
531
+ SE abs(direcao_bola) > 55 ENTAO
532
+ SE direcao_bola < 0 ENTAO
533
+ GIRAR -0.59
534
+ SENAO
535
+ GIRAR 0.5
536
+ FIM
537
+ SENAO
538
+ ANDAR 0.7
539
+ FIM
540
+ FIM
541
+
542
+ # APROXIMAR: distância intermediária. Mesma lógica do perseguir,
543
+ # com janela de ângulo e passo menores (chegada suave, sem atropelar).
544
+ FUNCAO aproximar()
545
+ DRIBLAR 0
546
+ MIRAR_BOLA
547
+ SE abs(direcao_bola) > 35 ENTAO
548
+ SE direcao_bola < 0 ENTAO
549
+ GIRAR -0.42
550
+ SENAO
551
+ GIRAR 0.45
552
+ FIM
553
+ SENAO
554
+ ANDAR 0.57
555
+ FIM
556
+ FIM
557
+
558
+ # CONTROLAR: bola próxima e sob controle (dribbler ligado).
559
+ # Na condução, quem orienta a trajetória é o GOL (direcao_gol),
560
+ # não mais a bola - aquisição (MIRAR_BOLA) ficou nas fases anteriores.
561
+ # Se a bola escapa para trás (fora do dribbler), volta a mirar a bola.
562
+ FUNCAO controlar()
563
+ DRIBLAR 1
564
+ SE abs(direcao_bola) > 60 ENTAO
565
+ MIRAR_BOLA
566
+ SE direcao_bola < 0 ENTAO
567
+ GIRAR -0.40
568
+ SENAO
569
+ GIRAR 0.40
570
+ FIM
571
+ SENAO
572
+ MIRAR_GOL
573
+ SE abs(direcao_gol) > 32 ENTAO
574
+ SE direcao_gol < 0 ENTAO
575
+ GIRAR -0.34
576
+ SENAO
577
+ GIRAR 0.32
578
+ FIM
579
+ SENAO
580
+ ANDAR 0.37
581
+ FIM
582
+ FIM
583
+ FIM
584
+
585
+ # FINALIZAR: o chute exige bola dominada (à frente) E gol alinhado,
586
+ # nunca só um dos dois (bola desalinhada = chute para fora).
587
+ # Se a bola escapou do dribbler, readquire antes de pensar no gol.
588
+ FUNCAO finalizar()
589
+ SE abs(direcao_bola) > 35 ENTAO
590
+ DRIBLAR 1
591
+ MIRAR_BOLA
592
+ ANDAR 0.30
593
+ SENAO
594
+ MIRAR_GOL
595
+ SE abs(direcao_bola) < 30 E abs(direcao_gol) < 12 ENTAO
596
+ DRIBLAR 0
597
+ CHUTAR
598
+ ENVIAR_RADIO 1
599
+ SENAO
600
+ DRIBLAR 1
601
+ SE direcao_gol < 0 ENTAO
602
+ GIRAR -0.30
603
+ SENAO
604
+ GIRAR 0.30
605
+ FIM
606
+ FIM
607
+ FIM
608
+ FIM
609
+
610
+ # RECUAR: a linha da frente tem prioridade máxima. Solta o dribbler
611
+ # (não puxa a bola para fora junto) e avisa a equipe pelo rádio.
612
+ FUNCAO recuar()
613
+ DRIBLAR 0
614
+ ANDAR -0.6
615
+ GIRAR 0.8
616
+ ENVIAR_RADIO 2
617
+ FIM
618
+
619
+ # PARAR: fim de jogo, intervalo ou emergência - desliga tudo.
620
+ FUNCAO parar_seguro()
621
+ DRIBLAR 0
622
+ PARAR
623
+ FIM
624
+
625
+ # VOLTAR_PARA_DEFESA: linha traseira detectada - sai de ré girando
626
+ # para dentro do campo sem atravessar a linha com a frente.
627
+ FUNCAO voltar_para_defesa()
628
+ DRIBLAR 0
629
+ ANDAR -0.4
630
+ GIRAR 0.6
631
+ FIM
632
+
633
+ # CICLO PRINCIPAL: relógio do jogo, segurança, percepção, decisão.
634
+ SEMPRE
635
+ SE fase == "fim" OU fase == "intervalo" ENTAO
636
+ parar_seguro()
637
+ SENAO
638
+ SE linha_frente ENTAO
639
+ recuar()
640
+ SENAO
641
+ SE linha_tras ENTAO
642
+ voltar_para_defesa()
643
+ SENAO
644
+ SE linha_esq ENTAO
645
+ DRIBLAR 0
646
+ ANDAR -0.4
647
+ GIRAR -0.6
648
+ SENAO
649
+ SE linha_dir ENTAO
650
+ DRIBLAR 0
651
+ ANDAR -0.4
652
+ GIRAR 0.6
653
+ SENAO
654
+ SE ver_bola ENTAO
655
+ SE dist_bola > 0.60 ENTAO
656
+ perseguir()
657
+ SENAO
658
+ SE dist_bola > 0.30 ENTAO
659
+ aproximar()
660
+ SENAO
661
+ SE dist_bola < 0.22 ENTAO
662
+ finalizar()
663
+ SENAO
664
+ controlar()
665
+ FIM
666
+ FIM
667
+ FIM
668
+ SENAO
669
+ procurar()
670
+ FIM
671
+ FIM
672
+ FIM
673
+ FIM
674
+ FIM
675
+ FIM
676
+ FIM
677
+ `
678
+ },
679
+ // --- Primitivas de movimento (§29) -------------------------------------
680
+ {
681
+ id: 'danca_tempo',
682
+ name: '13 · Dança com tempo',
683
+ level: 'Fundamental 1 — movimento temporal',
684
+ code: `# O temporal NÃO trava o simulador: cada instrução dura o seu tempo
685
+ # e o restante do programa segue rodando em paralelo.
686
+ REPETIR 4 VEZES
687
+ ANDAR_POR 0.5, 1
688
+ GIRAR_POR 0.5, 1
689
+ VOLTAR_POR 0.5, 1
690
+ FIM
691
+ PARAR
692
+ `
693
+ },
694
+ {
695
+ id: 'simples',
696
+ name: '14 · Andar, esperar e parar',
697
+ level: 'Fundamental 1 — movimento básico',
698
+ code: `# Três primitivas: anda, espera sem mexer no motor, para.
699
+ ANDAR 0.5
700
+ ESPERAR 2
701
+ PARAR
702
+ `
703
+ },
704
+ {
705
+ id: 'diferencial',
706
+ name: '15 · Robô diferencial',
707
+ level: 'Fundamental 1 — controle de motores',
708
+ code: `# MOTORES recebe o par (esquerda, direita). Valores iguais andam
709
+ # em linha reta; valores opostos giram no próprio eixo.
710
+ MOTORES 0.5, 0.5
711
+ ESPERAR 2
712
+ MOTORES -0.5, 0.5
713
+ ESPERAR 1
714
+ PARAR
715
+ `
716
+ },
717
+ {
718
+ id: 'linha_robotics',
719
+ name: '16 · Seguidor de linha (primitivas)',
720
+ level: 'Fundamental 1 — sensores de linha + tempo',
721
+ code: `# Seguidor de linha usando só primitivas Robotics temporais:
722
+ # cada correção dura um tempo e sozinha já para o robô.
723
+ SE linha_frente ENTAO
724
+ VOLTAR_POR 0.5, 0.4
725
+ GIRAR_POR 0.6, 0.3
726
+ SENAO
727
+ SE linha_dir ENTAO
728
+ GIRAR_POR 0.5, 0.3
729
+ SENAO
730
+ SE linha_esq ENTAO
731
+ GIRAR_POR -0.5, 0.3
732
+ SENAO
733
+ ANDAR 0.5
734
+ FIM
735
+ FIM
736
+ FIM
737
+ `
738
+ },
739
+ {
740
+ id: 'maze_robotics',
741
+ name: '17 · Labirinto com distância real',
742
+ level: 'Fundamental 2 — espacial + estado do movimento',
743
+ code: `# Labirinto: só dá um comando novo quando o anterior terminou
744
+ # (movimento_ativo) e mede a parede de verdade antes de decidir.
745
+ ENQUANTO movimento_ativo FACA
746
+ ESPERAR 0.05
747
+ FIM
748
+
749
+ SE dist_frente < 0.30 ENTAO
750
+ GIRAR_POR 0.6, 0.5
751
+ SENAO
752
+ ANDAR_METROS 0.25
753
+ FIM
754
+ `
755
+ },
756
+ {
757
+ id: 'soccer_robotics',
758
+ name: '18 · Soccer com primitivas explícitas',
759
+ level: 'Fundamental 2 — tempo, distância e chute',
760
+ code: `# O perseguidor de bola, agora com as primitivas novas:
761
+ # GIRAR_POR/ANDAR_POR quando é só aproximar, ANDAR_METROS quando
762
+ # a bola está ao alcance e o encoder mede a chegada de verdade.
763
+ SE ver_bola ENTAO
764
+ MIRAR_BOLA
765
+ SE dist_bola > 0.35 ENTAO
766
+ ANDAR_POR 0.7, 0.5
767
+ SENAO
768
+ SE abs(direcao_bola) < 15 ENTAO
769
+ CHUTAR
770
+ SENAO
771
+ ANDAR_METROS 0.15
772
+ FIM
773
+ FIM
774
+ SENAO
775
+ GIRAR_POR 0.4, 0.3
776
+ FIM
777
+ `
778
+ }
779
+ ];
780
+ //# sourceMappingURL=examples.js.map