Pergunta

Estou woking em um jogo de cartas para minha Introdução à OOP papel. O jogo em si atenda às especificações, mas agora estou a brincar com ele para a minha própria gratificação e de aprendizagem.

Eu tenho uma classe cartão que contém e imagem, a sua classificação e suite. Nas caixas de uso de imagem GUI I para exibir a imagem armazenada nos respectivos cartões (que são armazenados em uma matriz de cartão na classe deck) assim,

cardPictureBox1.Image = card1.show();
cardPictureBox2.Image = card2.show();
cardPictureBox3.Image = card3.show();
...
etc

Seria possível fazer o cartão classe uma herdar o controle PictureBox então o que está na tela é "realmente" uma instância do calss cartão (em vez de uma caixa que mantenha o valor da imagem dele) que dramaticall reduzir o montante dos aros um teria que saltar através de atingir os cartões de outras informações relevantes.

Foi útil?

Solução

Em vez de ter uma classe Card, você pode criar um UserControl (chamado cartão ou ucCard ou qualquer outro) que herda de PictureBox (em vez de herdar de UserControl). A maneira mais fácil de fazer isso em C # é adicionar um UserControl com seu nome desejado e, em seguida, na alteração de código a linha superior de

public partial class ucCard : UserControl

para

public partial class ucCard : PictureBox

Seu controle ucCard terá então todas as propriedades de um PictureBox (incluindo Imagem, onde você iria armazenar Bitmap do cartão). Quando você constrói seu projeto, o compilador irá vomitar em uma linha que referências AutoScaleMode -. Simplesmente apagar essa linha e reconstruir

Você pode então adicionar quaisquer propriedades e métodos adicionais os cartões requerem, como terno e classificação e bitmaps para a frente eo verso do cartão (parte de trás poderia ser estático para que todos os cartões iria partilhá-la), e talvez um Flip ( ) para alternar entre as imagens dianteiras e traseiras.

Quanto OOP vai, a parte esquecida da Santíssima Trindade parece ser encapsulamento. Neste caso, uma vez que um cartão é um elemento visual na interface do usuário que o usuário interage com, faz todo o sentido para encapsular-lo como um UserControl. Como você já percebeu, isso vai fazer a aplicação mais simples e sua vida mais fácil.

Outras dicas

Seria possível para fazer o cartão classe um herdar o PictureBox controle para o que está na tela é "Na verdade" uma instância do cartão calss (em vez de uma caixa que mantenha o valor da imagem dele) que dramaticall reduzir ele quantidade de aros um teria que saltar através de atingir a cartões de outras informações relevantes.

Sim, mas você iria querer? Não. Ele casais sua lógica de negócio e modelo muito firmemente a sua camada de GUI.

Se você estiver escrevendo um artigo sobre OOP, você deve incentivar bons hábitos de programação e desencorajar cantos de corte. Seria melhor para você para chicotear um rápido MVC, para que seu GUI automagicamente se atualiza sempre que você fizer uma alteração em seu modelo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top