quinta-feira, 6 de junho de 2019

Alguém se lembra: Battletoads do NES/Mega Drive?

Sabe aquele jogo que é legal, mas não dá vontade de terminar por que é muito difícil...

Então... Este é Battletoads:


Battletoads é um jogo estilo "briga de rua" (tipo Double Dragon), aonde os protagonistas são sapos (???) que precisam salvar seus companheiros (que, também, são sapos) da terrivel Dark Queen (que, acreditem, NÃO é um sapo, mas uma mulher gostosa pra c...aramba).

É legal? É... até perceber que não tão fácil quanto parece. A primeira fase é muito de boa, mas depois, meu amigo, a coisa só piora (e demais, diga-se de passagem).

Dá um pouco de raiva (para não falar outra coisa).

Mas vale pela jogatina... Falando em jogatina, assista uma feita pelo canal Medieval Games BR:



Até mais!

Dicas de Programação: Qual é a diferença entre agregação e composição?

No final, em um diagrama de classes (UML), agregação e composição são a referência que uma classe tem com a outra (uma classe contém uma propriedade de outra classe).

A diferença entre elas, esta no "valor" que uma classe representa para a outra.

Como exemplo, vamos pegar a classe Carro e dizer que ela tem as propriedades arCondicionado e motor (com suas respectivas classes):

public class Carro {
        [Nullable]
        public ArCondicionado arCondicionado { get; set; }
        [NotNull]
        public Motor motor { get; set; }
}

Se um carro comum não tiver arCondicionado, ele ainda funciona, certo?

Se o arCondicionado só "agrega" um valor ao carro (fica mais valorizado, mas o carro não deixa de funcionar), então dizemos que é uma agregação.

Mas se um carro não tem motor, ele não funciona mais, correto? (só se for carro fantasma :P)

Assim, podemos afirmar que um motor "compõe" o carro (sem ele, o carro não funciona), então dizemos que é uma composição.

Bem, espero que a explicação seja útil para alguém... (pelo menos, para mim foi) :P

Até mais!

Dicas de Programação: Como gravar um objeto em um arquivo no C#?

Fácil, é só deixar ele serializavel:

using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

public class Program
{
        //Classe que representa dados de uma pessoa
        [Serializable()]
        public class Pessoa {
                public string Nome { get; set; }
                public int Idade {get; set; }
public static explicit operator String(Pessoa p)
{
return String.Format("Nome: {0} Idade: {1}", p.Nome, p.Idade);
}
        }

public static void Main()
{
          //Se arquivo Data.bin existe...
if (File.Exists("Data.bin"))
{
                  //Leio os dados gravados nele e transformo em um objeto do tipo Pessoa
Stream stream = File.OpenRead("Data.bin");
BinaryFormatter binary = new BinaryFormatter();
Pessoa p = (Pessoa) binary.Deserialize(stream);
stream.Close();
Console.WriteLine(String.Format("Lendo - {0}", (String)p));
}
          //Se o arquivo não existe...
else
{
                  //Crio os dados do objeto do tipo Pessoa e gravo ele no arquivo Data.bin
Pessoa p = new Pessoa();
p.Nome = "Me";
p.Idade = 18;
Stream stream = File.Create("Data.bin");
BinaryFormatter binary = new BinaryFormatter();
binary.Serialize(stream, p);
stream.Close();
Console.WriteLine(String.Format("Escrevendo - {0}", (String)p));
}
}
}

Obs.: Sempre que um objeto precisa ser "gravado"/"transportado", seja na rede ou no arquivo (binário, xml ou json), ele precisa ser serializado.

Até mais!