Ok, isto pode ser um desafio, mas felizmente o excelente Jonathan Cauldwell, o programador do AGD, publicou um vídeo no YouTube sobre como criar barras de energia e de tempo, etc. no MPAGD que vou usar descaradamente como base para este tutorial.
Para o Stinky Dog, quero um “Medidor de toxicidade do ar” que meça quão tóxico o ar da sala se tornou por causa dos peidos do Stinky Dog. A pureza do ar tem de poder subir e descer, e quero mostrá-la como um medidor.
Para começar, vamos precisar de uma variável que meça o nível atual de pureza do ar; vamos usar “P”.
Para desenhar o medidor, vamos também precisar de uma variável que guarde a coordenada y. Não podemos usar “Y” porque está reservada, por isso vamos usar Q.
Depois vamos usar o comando PLOT para desenhar uma série de píxeis que formarão o medidor. PLOT P Q desenha um píxel na coordenada do ecrã em que x = P e y = Q.
Agora vamos ampliar a rotina para que altere os valores de P e Q e desenhe o medidor:
Como de cada vez que começamos um ecrã queremos que o ar esteja a 100% de pureza, o melhor sítio para o inicializar será o evento RESTART SCREEN. Coloca este código...
LET P = 0 ; initial air purity level
WHILE P < 100 ; has P reached 100 yet?
LET Q = 178 ; starting y co-ord for meter
WHILE Q < 182 ; ending y co-ord for meter
PLOT P Q ; put a dot at P Q
ADD 1 TO Q ; increment Q
ENDWHILE ; keep doing this until weve drawn 4px
ADD 1 TO P ; increment P
ENDWHILE ; keep doing this until P reaches 100Assim, começamos com P (a coordenada x) a 0 e Q a 178.
Porquê 178? Lembra-te de que o valor y num ecrã do Spectrum vai de cima para baixo, de 0 a 191. Quero que a barra tenha 4 píxeis de altura, começando em y = 178
O ciclo WHILE...ENDWHILE exterior garante que desenhamos uma barra com 100px de largura; o ciclo END...WHILE interior garante que a barra tem 4px de altura.
Ok, isto deve desenhar o medidor de pureza do ar quando o ecrã começar.
Como fazemos o medidor subir e descer?
Vamos fazer o medidor descer (ou seja, o ar tornar-se mais tóxico) quando o Stinky Dog peidar.
Se te lembras, na Parte 16 usámos uma variável (F) para indicar que havia um peido (Fart) no ecrã. Por isso, se testarmos se F = 1 ficamos a saber que há um peido em jogo e, nesse caso, executamos código que reduz a pureza do ar.
Vamos colocar este código no nosso Main Loop 2, para que seja executado no fim de cada ciclo. Talvez o mudemos mais tarde, mas isto deve funcionar...
IF F = 1 ; is there a fart in play?
SUBTRACT 1 FROM P ; if so, reduce air purity by 1
LET Q = 178 ; y co-ord start at 178
WHILE Q < 182 ; run this 4 times
PLOT P Q ; plot a pixel at P Q
ADD 1 TO Q ; increment Q (the y value)
ENDWHILE
ENDIFVamos também acrescentar código ao PLAYER EVENT que mata o Stinky Dog se o ar se tornar demasiado tóxico...
IF P <= 0 ; if air purity is 0
KILL ; kill stinky dog
ENDIFE que tal fazer o medidor subir?
Vou criar um novo OBJECT, uma lata de ambientador, que melhora a pureza do ar se o Stinky Dog a apanhar. Algo como isto deve servir por agora:

Também coloquei a posição inicial deste objeto no Screen 0 (clica na caixa branca para passar à Room 0, prime P para ir para a sala e clica na sala onde queres que fique a sua posição inicial.
Tal como fizemos na PARTE 17, vamos acrescentar código ao evento Player que controla o que deve acontecer se o Stinky Dog apanhar este Object:
DETECTOBJ ; is sprite touching an object?
IF OBJ <> 255 ; did we detect an object?
GET OBJ ; automatically pick it up.
IF OBJ = 0 ; is it the Dog Bowl
AT 10 4 ; at line 10 column 4
COLOUR 13 ; green ink on blue paper
PRINT "you got the dog food bowl!" ; display a message
DELAY 50 ; wait a couple of seconds
WAITKEY ; then wait for a key press
REDRAW ; redraw the screen & remove the message
ENDIF
IF OBJ = 2 ; air freshner
REPEAT 20 ; do this 20 times
IF P < 100 ; prevent P from exceeding 100
LET Q = 178 ; starting y-co-ord
WHILE Q < 182 ; do this 4 times
PLOT P Q ; plot a pixel
ADD 1 TO Q ; increment the y co-ord
ENDWHILE
ADD 1 TO P ; increment the x co-ord
ENDIF
ENDREPEAT
ENDIF
ENDIFHora de testar...
Espero que tenhas reparado que o medidor desce quando o peido está em jogo e subiu 20px quando apanhámos o ambientador.
Por agora chega. Não me vou prender à quantidade que sobe e desce; agora que as mecânicas básicas funcionam, podemos sempre afiná-lo mais tarde. Também vamos redesenhar a barra para ficar com melhor aspeto. Isso é só cosmética, o trabalho difícil já está feito!
Além disso, quando o medidor chegou ao limite esquerdo, o Stinky Dog morreu.
Já há algumas formas de o matar, por isso provavelmente é boa ideia melhorar a rotina de morte, porque neste momento ele reaparece instantaneamente se ainda tivermos vidas.
