Intersecções, Novo Jogo
Aqui estou de novo e pronto para continuar o desenvolvimento da interface do nosso pequeno jogo. Antes de mais, vamos recordar o que se está a fazer. Neste momento, o objectivo é criar a janela para um novo jogo utilizado o designer do Visual Studio. Com isto fugimos um pouco à filosofia de desenvolvimento orientado por testes mas ganhamos na facilidade de criação de interfaces. A filosofia que vamos utilizar para esta parte da aplicação é mais “desenvolve e testa depois”. Em princípio não irá correr mal. Vamos ver como corre e depois tirar conclusões sobre isso. A interface que se temos agora corresponde à última imagem desta mensagem: http://mundodotnet.blogspot.com/2005/03/interseces.html. Lembro-me que já editámos as opções para o formulário, faltando agora para os restantes elementos. Falta o GroupBox, as Labels, os Buttons, os NumericUpDowns e o ComboBox.
GroupBox
Para este controlo não há muitas opções interessantes para alterar. A mais importante é a propriedade Text que refere o texto que aparece no ecrã. Vou alterar para “Configuração”, já que as opções que este controlo agrupa são configurações do jogo. Além desta, existe outra opção a considerar que também é importante – a propriedade (Name). Esta propriedade refere o nome que o controlo vai ter no código. Dei-lhe o nome de configurationGroup. Para termos uma noção do que é que a inserção de novos controlos no formulário ou a modificação de propriedades significa em termos de código, vamos espreitar o ficheiro gerado, NewGame.cs. Para isso falta pressionar com o botão direito do rato em cima do formulário, no editor, e escolher a opção View Code. É aberta outra janela na qual podemos ver o código do formulário. Começando pelo inicio do ficheiro, podemos fixar logo a declaração do tipo:
// …
public class NewGame : System.Windows.Forms.Form
{
// …
Um formulário é um tipo que estende a funcionalidade do tipo Form. Este tipo oferece já a base de desenvolvimento de uma janela. Logo a seguir temos a lista de todos os controlos.
private System.Windows.Forms.Button button1;
private System.Windows.Forms.Button button2;
private System.Windows.Forms.NumericUpDown numericUpDown2;
private System.Windows.Forms.ComboBox comboBox1;
private System.Windows.Forms.NumericUpDown numericUpDown1;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.GroupBox configurationGroup;
O editor coloca cada controlo como campo privado do formulário. Conseguimos ver aqui de que tipo é cada controlo. A abordagem que o editor utiliza é estender a funcionalidade apenas do formulário, utilizando todos os outros controlos como são e alterando apenas as suas propriedades. Se a interface for desenhada manualmente, pode ser utilizada outra abordagem, na qual se estendem também as funcionalidades dos controlos. E qual das técnicas é melhor? A minha opinião é que cada caso é um caso diferente. No entanto é de notar que a segunda abordagem tem a desvantagem de não se utilizar o designer do Visual Studio, que oferece grande facilidade de desenho de interfaces.
Sobre a mudança da propriedade (Name) do GroupBox, podemos ver qual a alteração que provoca. Todos os controlos têm o seu nome por omissão à excepção desse.Sim, até agora vimos o que são e onde estão os controlos. Mas e então onde se reflectem as alterações das propriedades? Não sei se repararam, mas sempre que se altera a propriedade de um controlo, essa propriedade fica a negrito. Isso significa que houve alteração e que isso se irá reflectir no código. E a alteração do código ocorre no método InitializeComponent que o Visual Studio cria e que é chamado no construtor. Se não encontrarem o método, se faz favor, pressionar com o cursor no pequeno sinal + ao lado do texto “Windows Form Designer generated code”. Já agora é interessante referir um pormenor do editor e da linguagem. É possível envolver partes do código entre marcas #region texto e #endregion e o editor permite esconder essas partes, mostrando apenas o texto indicado em #region.
Labels
Continuando com as labels, também o que mais interessa é o texto que aparece no ecrã e o nome dos controlos. Para o primeiro vou colocar “White Original Position” no texto e “whiteLabel” no nome. Para o segundo, para ficar em acordo com o primeiro, vou colocar “Black Original Position” e “blackLabel”. Já para o terceiro vou colocar “Starter Player” e “starterLabel”. Já temos uma janela mais agradável, mas as labels ficariam melhor se estivessem mais próximas dos controlos correspondentes, isto é, o texto não deveria estar alinhado a partir do canto superior esquerdo mas devia estar alinhado a partir do centro e à direita. Como fazer? Nada mais simples. Basta mudar a propriedade TextAlign. Já agora ficaria mais simples mudar essa propriedade ao mesmo tempo para os três controlos. Também é possível. Basta ter a tecla ctrl pressionada enquanto se escolhem os três controlos. Pronto, já está um pouco melhor.
Buttons
Para os botões temos exactamente a mesma coisa. O principal é alterar o nome e o texto do botão. As propriedades têm exactamente o mesmo nome que nos outros controlos – Text e (Name). Alterei para “Iniciar Jogo”/startGameButton e “Cancelar”/cancelButton. Mas já que aqui estamos, vamos mudar mais algumas coisas. Proponho duas alterações: A primeira é a propriedade FlatStyle que mudei para Flat. Retira-se assim o aspecto tridimensional do botão. A outra alteração é a propriedade BackColor, que mudei para SteelBlue. São gostos, apenas.
NumericUpDowns
E para estes? O que é necessário mudar? Essencial é mudar os limites mínimo e máximo dos controlos. Segundo as regras do jogo, só se podem ter coordenadas de 0 a 4. Então vão ser esses limites, correcto? Mais ou menos. Não digo que esteja errado, mas acho que em termos de interface não faz tanto sentido começar do zero. Vamos colocar de 1 a 5 e colar um post-it ao monitor a dizer que temos de ter em atenção os ajustes com o motor do jogo. Secalhar até é melhor ver melhor esta parte no motor do jogo. Parece-me a mim que tem alguns erros por lá. Mas fica agendado para outra altura. Os limites podem ser alterados com as propriedades Minimum e Maximum. Também é interessante de notar, embora não seja necessário alterar nada, as propriedades Increment e DecimalPlaces. A primeira define, como o nome indica, o incremento. Está por omissão em 1 e é isso que se pretende – percorrer os números de 1 em 1 desde 1 até 5. Com um incremento de, por exemplo, 2 e os mesmos limites, teríamos hipótese de escolher os valores 1, 3 e 5. A propriedade DecimalPlaces indica o número de casas decimais. Também não se pretendem casas decimais e, como tal, o valor zero está correcto. Para terminar com as propriedades importantes, falta mudar o (Name). Coloquei whiteOriginalPosition e blackOriginalPosition.
Podemos agora brincar com as restantes propriedades. Mudei também a propriedade BorderStyle para FixedSingle, para me dar um aspecto Flat tal como os botões.
E pronto, já temos mais algumas alterações. No entanto esta janela não está terminada. Há ainda algumas coisas para fazer. Mas ficamos por aqui e continua-se na próxima mensagem.


0 Comments:
Enviar um comentário
<< Home