Colocar Resposta 
 
Avaliação do Tópico:
  • 0 votos - 0 Média
  • 1
  • 2
  • 3
  • 4
  • 5
Dúvida C# guardar dados em ficheiro de texto
09-03-2012, 20:21 (Esta mensagem foi modificada pela última vez a: 09-03-2012 20:30 por al41007.)
Mensagem: #1
Windows Dúvida C# guardar dados em ficheiro de texto
Boa tarde. Num projecto de um jogo tenho uma classe game que é a base de todo o model, e nessa classe tenho um método para guardar os dados do jogo num ficheiro de texto. Acontece que a única coisa que ele está a escrever no ficheiro é "false 8 false 8" (separados por linhas) e isto não era suposto acontecer. Podem-me ajudar dizendo o que está mal e porquê? Em baixo está o código que tenho na classe.

Código:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.IO;

namespace jogo
{
    class game
    {
        private tabuleiro tabuleiro;
        private players jogador1=new players();//ou definir 1 lista d jogadores
        private players jogador2=new players(); //os jogadors possuem peças
        private histórico historico;


        public game()
        {
            tabuleiro = new tabuleiro();
            arbitro = new arbitro();
            historico = new histórico();
        }

        public void instanciaJogadores()
        {
            //jogador1 = new players();
            //jogador2 = new players();

            jogador1.Nome = "Player 1";
            jogador2.Nome = "Player 2";
        }

        internal histórico Historico
        {
            get { return historico; }
            set { historico = value; }
        }

        internal players Jogador1
        {  get { return jogador1; } }

        
        internal players Jogador2
        {  get { return jogador2; } }    
    
        public void guardaJogo() //algo está mal
        {
            //preciso guardar:
            //-celulas/tabuleiro
            //-dados dos Jogadores
            //-peças n mesa
            //-histórico
            //-jogador a jogar

            FileInfo t = new FileInfo("jogoGuardado.txt");
            StreamWriter Txt =t.CreateText();
            
            Txt.WriteLine(jogador1.Nome);
            Txt.WriteLine(jogador1.NumeroPeças.ToString());
            Txt.WriteLine(jogador1.Estado.ToString());
            foreach (peças pedra in jogador1.Peças)
            {
                Txt.WriteLine(pedra.PosiçaoAtual.PosicaoX.ToString());
                Txt.WriteLine(pedra.PosiçaoAtual.PosicaoY.ToString());
                Txt.WriteLine(pedra.PosiçaoDestino.PosicaoX.ToString());
                Txt.WriteLine(pedra.PosiçaoDestino.PosicaoX.ToString());
                Txt.WriteLine(pedra.Estado.ToString());
                Txt.WriteLine(pedra.Cor.ToString());
                Txt.WriteLine(pedra.DireçaoAnterior.ToString());
                Txt.WriteLine(pedra.DireçaoAtual.ToString());
                Txt.Write(Txt.NewLine);
            }

            Txt.WriteLine(jogador2.Nome);
            Txt.WriteLine(jogador2.NumeroPeças.ToString());
            Txt.WriteLine(jogador2.Estado.ToString());
            foreach (peças pedra in jogador2.Peças)
            {
                Txt.WriteLine(pedra.PosiçaoAtual.PosicaoX.ToString());
                Txt.WriteLine(pedra.PosiçaoAtual.PosicaoY.ToString());
                Txt.WriteLine(pedra.PosiçaoDestino.PosicaoX.ToString());
                Txt.WriteLine(pedra.PosiçaoDestino.PosicaoX.ToString());
                Txt.WriteLine(pedra.Estado.ToString());
                Txt.WriteLine(pedra.Cor.ToString());
                Txt.WriteLine(pedra.DireçaoAnterior.ToString());
                Txt.WriteLine(pedra.DireçaoAtual.ToString());
                Txt.Write(Txt.NewLine);
            }

            foreach (string line in historico.History)
            {
                Txt.WriteLine(line);
                Txt.Write(Txt.NewLine);
            }
            
            Txt.Close();
       }
    }
}
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
10-03-2012, 20:53
Mensagem: #2
RE: Dúvida C# guardar dados em ficheiro de texto
Boas,

Sem o código todo não dá para testar grande coisa, visto que usas classes as quais não apresentas o código.

No entanto, assim numa vista rápida vejo muitos erros de programação que podem (ou não) estar a influenciar o sistema de gravar.

1º) Declaras um objecto ao qual lhe atribuis o nome do mesmo:

private tabuleiro tabuleiro;

Como podemos ver aqui neste exemplo chamas à variável do tipo tabuleiro o próprio nome tabuleiro. Por vezes não percebo como é que os compiladores não acusam este tipo de erros.

2º) Usas caracteres especiais para dar nomes aos objectos:

private histórico historico;

Declaraste uma variável do tipo histórico em que histórico tem um acento. Por vezes (ou quase sempre) isto dá asneira.

Não duvido nada de que o que eu referi no ponto 1 e 2 sejam os causadores do problema de gravar.

Na própria função de gravar nos foreach tens o problema dos caracteres especiais

foreach (peças pedra in jogador1.Peças)

Como podes ver colocaste peças com o próprio 'ç'.

Uma coisa que o C# é muito, mas mesmo muito sensível, são os nomes das classes iniciados por letra minúscula.

As classes tabuleiro, players e historico deviam ser Tabuleiro, Players e Historico.

Uma outra coisa que te deves habituar a fazer, não é que te traga problemas, mas torna o código mais coerente, é utilizar o nome que se atribui aos objectos, classes e afins numa única linguagem. Repara que tens a classe tabuleiro e a classe players. A uma classe deste o nome em português e outra deste o nome em Inglês.

Mas o que eu te chamo à atenção mesmo, só neste pedaço de código, é:
- Para o nome das classes em letra minúscula (a primeira letra deve ser sempre em Maiúscula), ex.: tabuleiro deveria ser Tabuleiro, game deveria ser Game, players deveria ser Players, etc. Este problema já me fez perder dois dias de trabalho académico só porque nunca ninguém me avisou de tal situação, e o programa estava a gerar mal as coisas por causa da classe estar com a primeira letra minúscula.

- Cuidado com os caracteres especiais no nome de classes e variáveis. Por exemplo, tens histórico quando deveria ser só historico. Quando for assim dá nomes em Inglês que resolves logo o problema.

Espero ter ajudado, mas sem o projecto todo não te posso dar grande ajuda.

Cumps,
Manuel Rocha

[Imagem: pplware_staff.png]
Licenciado em Informática para a Saúde pela ESTG Leiria
Mestrado em Informática - Especialização em Sistemas de Informação na Universidade Portucalense
Especialização em Design Gráfico
Visitar Website de este utilizador Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
11-03-2012, 00:07
Mensagem: #3
RE: Dúvida C# guardar dados em ficheiro de texto
Boa noite,
não tinha noção de que podiam surgir erros por causa disso, o compilador pelo menos devia apontar warnings por causa disso não? O facto de as classes estarem em minúsculas deve ao hábito de programar em C++ sempre em minúsculas até mesmo no que toca a nomes de classes. Não fazia mesmo ideia que o C# fosse assim tão sensível. Em relação aos caracteres especiais, também eu tinha ficado com dúvidas quando comecei a implementar, mas como não deu erro nenhum deixei ficar. Em relação ao nome das classes serem iguais ao dos objectos, até nas aulas o professor disse que não fazia mal porque o compilador sabe diferenciar, devia à ordem em que surgem (digo eu). Para os diferenciar, eu costumo pôr um deles em inglês e o outro (menos usado) em português porque em português normalmente são palavras maiores e para baralhar um pouco quem queira ver o meu código, já que os meus colegas têm muito a mania de copiar por mim ou de me pedir o código. O que interessa é que eu percebo o que lá tenho Smile . Vou alterar o projecto de acordo com as suas dicas, pode ser que dê. Contudo suspeito que tenha haver com a referência dos objectos, porque apesar de serem inicializados noutras classes, nesta eles aparecem quase vazios. A minha dúvida principal era se para guardar dados num ficheiro se seria ou não assim. De qualquer forma agradeço a ajuda Wink
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
11-03-2012, 01:01
Mensagem: #4
RE: Dúvida C# guardar dados em ficheiro de texto
Se tiveres problemas zipa o projecto e adicipna aqui que eu revejo o que tá mal. Sem fazer debug não te consigo dizer grande coisa, nem tão pouco sem o restante código. Se não quiseres disponibilizar por aqui envia por pm.

Cumps,
Manuel Rocha

[Imagem: pplware_staff.png]
Licenciado em Informática para a Saúde pela ESTG Leiria
Mestrado em Informática - Especialização em Sistemas de Informação na Universidade Portucalense
Especialização em Design Gráfico
Visitar Website de este utilizador Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
Colocar Resposta 


Saltar Fórum:


Utilizadores a ver este tópico: 1 Visitante(s)