Ir ao conteúdo
  • Cadastre-se

C# Como usar a clase point para mexer peças de um tabuleiro de damas?


_rsd_17

Posts recomendados

 

Estou a criar o jogo das damas em c# e estou a ter dificuldades a inicializar as imagens nas coordenadas que desejo. Tenho uma funçao na classe Pedras onde criei um point para guardar o x e o y que vão ser inseridos para mover as peças.

public Pedras(bool imagem_, Point _posicao) //imagem é a imagem da peças e a posiçao é a posicao que vão ter no tabuleiro
    {
        Point posicao = new Point();
        imagem = imagem_;
        posicao.X = _posicao.X;
        posicao.Y = _posicao.Y;
    }

 

Agora quero inicializar as imagens das peças no tabuleiro quando ele abre, entao coloquei no construtor do tabuleiro a inicializaçao:

public Jogo() //vamos inicializar as peças no tabuleiro
    {
        tabuleiro = new List<Pedras>();
        //é adicionada a imagem das peças nestas posiçoes quando o tabuleiro é inicializado
        tabuleiro.Add(new Pedras(true,(8,2))); //peças brancas
        tabuleiro.Add(new Pedras(false, (8,4))); //peças pretas

    }

o meu tabuleiro tem os números de 12345678 no topo e de lado tem de 1 a 8 de cima para baixo.

Mas nao funciona, alguem me pode ajudar a corrigir o problema?

Link para o comentário
Compartilhar em outros sites

public Pedras(bool imagem_, Point _posicao) //imagem é a imagem da peças e a posiçao é a posicao que vão ter no tabuleiro
    {
        //Point posicao = new Point(); posição tem que pertencer a classe (um campo da classe). 
		//Todas as variaveis declaradas dentro do método são removidas da memória após o fim do mesmo.
        imagem = imagem_;
        posicao.X = _posicao.X;
        posicao.Y = _posicao.Y;
    }


public Jogo() //vamos inicializar as peças no tabuleiro
    {
        tabuleiro = new List<Pedras>(); //essa lista vai sumir no fim do método ok? tem que ser membro da classe...
        //é adicionada a imagem das peças nestas posiçoes quando o tabuleiro é inicializado
        tabuleiro.Add(new Pedras(true,new Point(8,2))); //peças brancas
        tabuleiro.Add(new Pedras(false, new Point(8,4))); //peças pretas

    }

 

Link para o comentário
Compartilhar em outros sites

@Flávio Pedroza Entao na classe Dama onde estou a implementar o 1º bloco de codigo tenho


    public class Pedras
    {
        public bool comerdama{ get; set; }

        public bool imagem{ get; set;}

        //usamos point porque a classe ja esta feita vamos reutilizar codigo
        public Point posicao{ get; set; }

        public bool dama {get; set;}

        public Casas ponto { get; set; }


        public Pedras(bool imagem_, Point _posicao) //imagem é a imagem da peças e a posiçao é a posicao que vão ter no tabuleiro
        {
            //Point posicao = new Point(); 
            imagem = imagem_;
            posicao.X = _posicao.X;
            posicao.Y = _posicao.Y;
        }
    }

E o segundo bloco implemento na classe tabuleiro:


    public class Jogo
    {
        List< Pedras > tabuleiro;//usamos pedras porque vamos usar a classe Pedras de Dama

        public Jogador jog1 { get; set; }

        public Utilizador jog2 { get; set; }

        public int numderrotas_jog1{ get; set; }

        public int numderrotas_jog2 { get; set;}

        public int numempates{ get; set; }

        public int numvitorias_jog1 {get; set; }

        public int numvitorias_jog2 {get; set; }

        public int pontuacao{ get; set;}

        public float tempo { get; set; }

        public Tabuleiro Tab { get; set; }

        public Utilizador user { get; set; }

        
        public Jogo() //vamos inicializar as peças no tabuleiro
        {
            tabuleiro = new List<Pedras>();
            //é adicionada a imagem das peças nestas posiçoes quando o tabuleiro é inicializado
            tabuleiro.Add(new Pedras(true,new Point(8,2))); //peças brancas
            tabuleiro.Add(new Pedras(false, new Point(8,4))); //peças pretas
         
        }

      



        internal List<Pedras> Tabuleiro { get => tabuleiro; set => tabuleiro = value; } //internal é como os membros public mas é apenas visivel dentro do modulo corrente
    }
}

Mas nao funciona, porque? o que tenho errado? 

Link para o comentário
Compartilhar em outros sites

@Flávio Pedroza Eu ja tinha mencionado essa bibliote na classe Pedras pensei que as bibliotecas nao eram preciso mencionar sempre que usava a classe Point noutra classe, mas funcionou obrigada !!

Agora tenho outro erro, eu tenho a imagem das peças a abrir diretamente da localizaçao no tabuleiro mas nao funciona

Ja pus a localizaçao como o diretorio, ja coloquei so o nome da imagem mas nada funciona.

Eu estou a usar essa pequena funçao de outro codigo

private void MostraPedraTabuleiro(Pedra pedra)
        {
            PictureBox pp = this.Controls.Find(pedra.Posicao, false)[0] as PictureBox;

            if (pedra.Branca)
                pp.Image = Image.FromFile("Imagens//DamaBranca.png");
            else
                pp.Image = Image.FromFile("Imagens//DamaPreta.png");
        }

E funciona, mas implementando a com  o meu codigo nao funciona porque?

Sem Título.png

Link para o comentário
Compartilhar em outros sites

O caminho do arquivo de imagem *.png provavelmente está errado (está dando erro de arquivo não encontrado). 

Onde está está localizada pasta "Imagens"? Tenta colocar na mesma pasta onde está localizado o arquivo "Damas.exe".

Alternativamente, fornece o caminho completo. Ex.: "c:\arquivos de programas\visual studio 2017...", etc.

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...