sexta-feira, 16 de março de 2007

Começando a interagir com o DS


Chegou a hora de fazer os programas interagirem com o DS, obedecerem comandos. A primeira coisa é entender os comandos que a PAlib tem para fazer isso.

O objeto Pad é o encarregado de ler os comandos dos controles do DS. O formato é Pad.Ação.Botão
  • Ação pode ser Held ou Newpress
  • Botão pode ser Up, Down, Left, Right, A, B, X, Y, L, R, Start ou Select
Para verificar se foi pressionado o botão A, usa-se if (Pad.Newpress.A) { ...
Para verificar se a seta para a esquerda está sendo pressionada, usa-se if (Pad.Held.Left) { ...
E assim por diante.

Vamos analizar, então o programa do cálculo das cores:
  • Fazer um programa que utilize os botões Left, Right, A, B, L e R para alterar os valores de Red, Green e Blue das cores, calculando o valor decimal resultante e mostrar os valores individuais, o resultante e desenhar um quadrado na tela com a cor calculada
  • Fórmula: RGB podem variar cada um entre 0 e 31. O valor resultante é composto de 16 bits. O bit mais significativo sempre é 1, os 5 seguintes são o azul, os 5 seguintes o verde e os últimos 5 são o vermelho. Então a fórmula é 32768+azul*1024+verde*32+vermelho.
Fonte do programa (main.c - acho que não preciso mais ensinar como usar a template da PAlib):

// Includes
#include // Include for PA_Lib

// Function: main()
int main(int argc, char ** argv)
{
  u8 vermelho=0;
  u8 verde=0;
  u8 azul=0;
  u16 soma=0;

  PA_Init(); // Initializes PA_Lib
  PA_InitVBL(); // Initializes a standard VBL

  PA_Init16bitBg(1,0);

  PA_InitText(0,0);
  PA_SetTextCol(0,31,31,31);

  // Infinite loop to keep the program running
  while (1)
  {
    PA_Draw16bitRect(1,0,0,255,191,soma);
    PA_OutputSimpleText(0,0,0,"B / A => Vermelho");
    PA_OutputSimpleText(0,0,1,"Esq / Dir => Verde");
    PA_OutputSimpleText(0,0,2,"L / R => Azul");
    PA_OutputText(0,0,4,"Vermelho: %d ",vermelho);
    PA_OutputText(0,0,5,"Verde : %d ",verde);
    PA_OutputText(0,0,6,"Azul : %d ",azul);
    PA_OutputText(0,0,7,"16 bits : %d ",soma);
    if (Pad.Newpress.B&&vermelho>0) { vermelho--; }
    if (Pad.Newpress.A&&vermelho<31) { vermelho++; }
    if (Pad.Newpress.Left&&verde>0) { verde--; }
    if (Pad.Newpress.Right&&verde<31) { verde++; }
    if (Pad.Newpress.L&&azul>0) { azul--; }
    if (Pad.Newpress.R&&azul<31) { azul++; }
    soma=32768+azul*1024+verde*32+vermelho;
    PA_WaitForVBL();
  }

  return 0;
} // End of main()

Um comentário:

Leonardo Zimbres disse...

formidável, e bem simples. O divertido é imaginar que no pc são várias teclas, mas estar fazendo um aplicativo para um hardware com tão poucos botões. Legal.