  <?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Athanazio &#187; C</title>
	<atom:link href="http://www.athanazio.com/tag/c/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.athanazio.com</link>
	<description>Nada é Simples, Mas Tudo é Possível</description>
	<lastBuildDate>Thu, 01 Dec 2011 03:47:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>bitmap em C</title>
		<link>http://www.athanazio.com/2009/09/21/bitmap-em-c/</link>
		<comments>http://www.athanazio.com/2009/09/21/bitmap-em-c/#comments</comments>
		<pubDate>Tue, 22 Sep 2009 01:40:44 +0000</pubDate>
		<dc:creator>athanazio</dc:creator>
				<category><![CDATA[trecos]]></category>
		<category><![CDATA[biblioteca]]></category>
		<category><![CDATA[bitmap]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[image processing]]></category>
		<category><![CDATA[processamento de imagens]]></category>

		<guid isPermaLink="false">http://www.athanazio.com/2009/09/21/bitmap-em-c/</guid>
		<description><![CDATA[ok vc acordou com um mal humor da molestia, e acha que para resolver seu problema basta escrever uns codigos em C++ para ler arquivos bitmap e converter em seja lah o que for ??? nao foi isto que aconteceu ? ahhh entao alguem resolveu que vc deveria ler arquivos BMP e calcular seja lah [...]]]></description>
			<content:encoded><![CDATA[<div id="HOTWordsTxt" name="HOTWordsTxt"><p>ok vc acordou com um mal humor da molestia, e acha que para resolver seu problema basta escrever uns codigos em C++ para ler arquivos bitmap e converter em seja lah o que for ??? nao foi isto que aconteceu ?<br />
ahhh entao alguem resolveu que vc deveria ler arquivos BMP e calcular seja lah o que for baseado nos valores de cores dos pixels impares ?? naooooo ??? seja lah o que for use :<br />
<a href="http://easybmp.sourceforge.net/">easybmp.sourceforge.net</a></p>
<p>A biblioteca C para ler bitmap que nao deixa vc na mao !</p>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.athanazio.com/2009/09/21/bitmap-em-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jogo feito em SDL &#8211; timetris</title>
		<link>http://www.athanazio.com/2009/05/24/jogo-feito-em-sdl-timetris/</link>
		<comments>http://www.athanazio.com/2009/05/24/jogo-feito-em-sdl-timetris/#comments</comments>
		<pubDate>Mon, 25 May 2009 00:56:31 +0000</pubDate>
		<dc:creator>athanazio</dc:creator>
				<category><![CDATA[games]]></category>
		<category><![CDATA[trecos]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[free]]></category>
		<category><![CDATA[gratis]]></category>
		<category><![CDATA[jogo]]></category>
		<category><![CDATA[sdl]]></category>
		<category><![CDATA[tetris clone]]></category>

		<guid isPermaLink="false">http://www.athanazio.com/2009/05/24/jogo-feito-em-sdl-timetris/</guid>
		<description><![CDATA[Olas ! em minhas aventuras de jogos, desenvolvi mais um para a competição ludum dare, agora na versão mini. O tema desta competição era &#8220;tempo&#8221;, e era necessário usar as trilhas sonoras fornecidas pela competição. fiz um tetris que usa relógios como os elementos gráficos do jogo. baixe aqui o jogo !timetris_minild9_20090524]]></description>
			<content:encoded><![CDATA[<div id="HOTWordsTxt" name="HOTWordsTxt"><p>Olas ! em minhas aventuras de jogos, desenvolvi mais um para a competição ludum dare, agora na versão mini.<br />
O tema desta competição era &#8220;tempo&#8221;, e era necessário usar as trilhas sonoras fornecidas pela competição. fiz um tetris que usa relógios como os elementos gráficos do jogo.</p>
<p>baixe aqui o jogo !<a href='http://www.athanazio.com/wp-content/uploads/2009/05/timetris_minild9_20090524.zip'>timetris_minild9_20090524</a></p>
<p><a href="http://www.athanazio.com/wp-content/uploads/2009/05/screenshot_timetris1.png"><img src="http://www.athanazio.com/wp-content/uploads/2009/05/screenshot_timetris1-383x300.png" alt="screenshot_timetris1" title="screenshot_timetris1" width="383" height="300" class="alignnone size-medium wp-image-1920" /></a></p>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.athanazio.com/2009/05/24/jogo-feito-em-sdl-timetris/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>c# xna lendo mapas</title>
		<link>http://www.athanazio.com/2009/01/15/c-xna-lendo-mapas/</link>
		<comments>http://www.athanazio.com/2009/01/15/c-xna-lendo-mapas/#comments</comments>
		<pubDate>Fri, 16 Jan 2009 02:55:48 +0000</pubDate>
		<dc:creator>athanazio</dc:creator>
				<category><![CDATA[games]]></category>
		<category><![CDATA[programacao]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[contentmanager]]></category>
		<category><![CDATA[contentpipeline]]></category>
		<category><![CDATA[maps]]></category>
		<category><![CDATA[xna]]></category>

		<guid isPermaLink="false">http://www.athanazio.com/?p=1576</guid>
		<description><![CDATA[Pelo que estou estudando, entendi que ateh consigo ler arquivos externos ao programa usando a classe StreamReader, mas quando o build do projeto for feito vai ter dependência que o arquivo exista fora do executável e não tenho a menor idéia de como referenciar o sistema de arquivo do Xbox por exemplo. Assim sendo tem [...]]]></description>
			<content:encoded><![CDATA[<div id="HOTWordsTxt" name="HOTWordsTxt"><p>Pelo que estou estudando, entendi que ateh consigo ler arquivos externos ao programa usando a classe StreamReader, mas quando o build do projeto for feito vai ter dependência que o arquivo exista fora do executável e não tenho a menor idéia de como referenciar o sistema de arquivo do Xbox por exemplo.</p>
<p>Assim sendo tem a tal da pasta content no projeto do jogo, dando add em itens nesta pasta, eles podem ser carregados pelo ContentManager !! mor legal.</p>
<p>No meu caso preciso carregar arquivos de mapa que gerei que contém um monte de zeros e uns, algo do tipo :</p>
<p><code>111111111111111111111111111111<br />
100000000001100000000000000001<br />
101111111111101111111111111101<br />
101111111111101111111111111101<br />
100000000001100001100001100001<br />
101111111101111101101101101111<br />
101111111101111101101101101111<br />
100000001101100001101101100001<br />
</code></p>
<p>entaum seguindo alguns tutoriais, entendi que precisava escrever um contentimporter, para que o xna soubesse como transformar meu belo arquivo em objetos usaveis.</p>
<p>segui o tutorial e criei um Content PipeLine Extension Library dentro da mesma solution do jogo<br />
<img src="http://www.athanazio.com/wp-content/uploads/2009/01/content-pipeline.jpg" alt="" title="content-pipeline" width="272" height="247" class="alignnone size-full wp-image-1577" /></p>
<p>e criei a classe MapFilesImporter</p>
<p>using System;<br />
using System.Collections.Generic;<br />
using System.Linq;<br />
using Microsoft.Xna.Framework;<br />
using Microsoft.Xna.Framework.Graphics;<br />
using Microsoft.Xna.Framework.Content.Pipeline;<br />
using Microsoft.Xna.Framework.Content.Pipeline.Graphics;<br />
using Microsoft.Xna.Framework.Content.Pipeline.Processors;</p>
<p>using Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler;<br />
using Microsoft.Xna.Framework.Content;</p>
<p>using System.IO;</p>
<p>namespace MapFilesContentPipeLine<br />
{<br />
    [ContentImporter(".maze", DisplayName = "Map Files - ChikenMaze")]<br />
    public class MapFilesImporter : ContentImporter<Boolean[,]><br />
    {</p>
<p>        public override Boolean[,] Import(string filename,<br />
                                             ContentImporterContext context)<br />
        {<br />
            FileStream stream = File.OpenRead(filename);<br />
            StreamReader reader = new StreamReader(stream);<br />
            List<List<Boolean>> buffer = new List<List<bool>>();</p>
<p>            string line = reader.ReadLine();<br />
            while (line != null)<br />
            {</p>
<p>                List<Boolean> bufferLine = new List<bool>();<br />
                foreach (char one in line)<br />
                {<br />
                    bufferLine.Add(one == &#8217;1&#8242; ? true : false);<br />
                }<br />
                buffer.Add(bufferLine);<br />
                line = reader.ReadLine();<br />
            }</p>
<p>            Boolean[,] result = new Boolean[buffer.Count, buffer[0].Count];<br />
            int row = 0;<br />
            int col = 0;</p>
<p>            // copy data to the matrix<br />
            foreach (List<bool> onelist in buffer)<br />
            {<br />
                foreach (Boolean spot in onelist)<br />
                {<br />
                    result[row, col] = spot;<br />
                    col++;<br />
                }<br />
                row++;<br />
                col = 0;<br />
            }</p>
<p>            return result;<br />
        }</p>
<p>    }<br />
}</p>
<p>Lembrando é claro de fazer referência ao projeto to content pipeline tanto no projeto do jogo, quanto nas referências da pasta content, isto me rendeu um tempão para perceber &#8230; hehehehe</p>
<p><img src="http://www.athanazio.com/wp-content/uploads/2009/01/references-to-the-content-pipe-line.jpg" alt="" title="references-to-the-content-pipe-line" width="500" height="530" class="alignnone size-full wp-image-1578" /></p>
<p>dai tive a surpresa legal &#8230;<br />
<strong>Error	1	Building content threw RankException: Cannot serialize multidimensional arrays.<br />
</strong>po custava saber serializar arrays multidimensionais ?? =)</p>
<p>bem vou ter que mudar um pouco a estratégia de carregar os mapas, jah vi que vou precisar de um tipo de dados mais simplim que um array multidimensional de booleanos, pow mais simples que isso !! hehehehe, vou criar algo do tipo MapDefinition com as strings das linhas e um método para transformar na famigerada matriz de booleanos.</p>
<p>então refiz a classe de importar o formato de arquivo que tenho, novinha em folha !<br />
comparando com a anterior, nesta mudei o display name para poder verificar se estava usando a nova implementação (danado desconfiado huahuahuuah) e passei a retornar List<string> para os intimos conhecida como lista de tamanho variável de string.</p>
<p>using System;<br />
using System.Collections.Generic;<br />
using System.Linq;<br />
using Microsoft.Xna.Framework;<br />
using Microsoft.Xna.Framework.Graphics;<br />
using Microsoft.Xna.Framework.Content.Pipeline;<br />
using Microsoft.Xna.Framework.Content.Pipeline.Graphics;<br />
using Microsoft.Xna.Framework.Content.Pipeline.Processors;</p>
<p>using Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler;<br />
using Microsoft.Xna.Framework.Content;</p>
<p>using System.IO;</p>
<p>namespace MapFilesContentPipeLine<br />
{<br />
    [ContentImporter(".maze", DisplayName = "Map Files - ChikenMaze (List<string>)")]<br />
    public class MapFilesImporter : ContentImporter<List<string>><br />
    {</p>
<p>        public override List<string> Import(string filename,<br />
                                             ContentImporterContext context)<br />
        {<br />
            FileStream stream = File.OpenRead(filename);<br />
            StreamReader reader = new StreamReader(stream);<br />
            List<string> buffer = new List<string>();</p>
<p>            string line = reader.ReadLine();<br />
            while (line != null)<br />
            {<br />
                buffer.Add(line);<br />
                line = reader.ReadLine();<br />
            }</p>
<p>            return buffer;<br />
        }</p>
<p>    }<br />
}</p>
<p>com esta novidade precisei alterar um pouco a classe que gerencia os mapas para poder converter de List<string> para Boolean[,] olha como ficou o trecho que carrega o mapa e o conversor de um tipo para o outro.</p>
<p>        public Map getMap(int level)<br />
        {<br />
            // ok ok in one line would be cooler =)<br />
            // Boolean[,] map = ListString2MatrixBoolean(scene.game.Content.Load<List<string>>(getMapName(level)));<br />
            //<br />
            // but this way we can read easily at 4:30AM<br />
            //<br />
            string filename = getMapName(level);<br />
            List<string> buffer = scene.game.Content.Load<List<string>>(filename);<br />
            Boolean[,] map = ListString2MatrixBoolean(buffer);<br />
            return new Map(this.scene, map);<br />
        }</p>
<p>        public Boolean[,] ListString2MatrixBoolean(List<string> list)<br />
        {<br />
            Boolean[,] result = new Boolean[list.Count, list[0].Length];<br />
            int row = 0;<br />
            int col = 0;</p>
<p>            foreach (string line in list) {<br />
                foreach (char one in line)<br />
                {<br />
                    result[row, col] = (one == &#8217;1&#8242; ? true : false);<br />
                    col++;<br />
                }<br />
                row++;<br />
                col = 0;<br />
            }</p>
<p>            return result;<br />
        }</p>
<p>ultimo comentario para os desesperados que leram até o final, uma pena que minha mãe não programa em c# !! ela estaria lendo tudinho !! huahuahuhua</p>
<p>quando fizer referência ao arquivo a ser carregado nao inclua a extensão, eu estava buscando por maze_10_10.maze e recebendo o erro de &#8220;file not found&#8221;, resolvi fazer do mesmo jeito que estava fazendo com os arquivos de imagens e todos ficaram felizes, basta uasr o nome sem extensão.</p>
<p>olha que bela imagem da galinha andando num mapa carregado do arquivo !!<br />
<a href="http://www.athanazio.com/wp-content/uploads/2009/01/galinha-no-mapa-carregado-do-arquivo.jpg"><img src="http://www.athanazio.com/wp-content/uploads/2009/01/galinha-no-mapa-carregado-do-arquivo-386x300.jpg" alt="" title="galinha-no-mapa-carregado-do-arquivo" width="386" height="300" class="alignnone size-medium wp-image-1581" /></a></p>
<p>link para os tutoriais</p>
<p>Custom Content Importer with XNA 2.0<br />
<a href="http://www.ziggyware.com/readarticle.php?article_id=166">http://www.ziggyware.com/readarticle.php?article_id=166</a></p>
<p>Using a Custom Importer or Content Processor<br />
<a href="http://msdn.microsoft.com/en-us/library/bb447743(XNAGameStudio.20).aspx">http://msdn.microsoft.com/en-us/library/bb447743(XNAGameStudio.20).aspx</a></p>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.athanazio.com/2009/01/15/c-xna-lendo-mapas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>c# criando labirinto parte 2 &#8211; explicando as conexões</title>
		<link>http://www.athanazio.com/2009/01/11/c-criando-labirinto-parte-2-explicando-as-conexoes/</link>
		<comments>http://www.athanazio.com/2009/01/11/c-criando-labirinto-parte-2-explicando-as-conexoes/#comments</comments>
		<pubDate>Mon, 12 Jan 2009 02:47:46 +0000</pubDate>
		<dc:creator>athanazio</dc:creator>
				<category><![CDATA[games]]></category>
		<category><![CDATA[programacao]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[conexões]]></category>
		<category><![CDATA[connections]]></category>
		<category><![CDATA[generation]]></category>
		<category><![CDATA[labirinto]]></category>
		<category><![CDATA[maze]]></category>

		<guid isPermaLink="false">http://www.athanazio.com/?p=1570</guid>
		<description><![CDATA[este post eh continuação de http://www.athanazio.com/2009/01/11/c-criando-um-labirinto-v1/ Fazer as conexões entre os elementos do labirinto foi uma coisa interessante, porque eu preciso de uma representação onde cada posição, seja parede ou celula vazia tenha a mesma largura para representar isto para cada item do labirinto criei uma matriz 3&#215;3 onde a posição do centro representa a [...]]]></description>
			<content:encoded><![CDATA[<div id="HOTWordsTxt" name="HOTWordsTxt"><p>este post eh continuação de <a href=" http://www.athanazio.com/2009/01/11/c-criando-um-labirinto-v1/"></p>
<p>http://www.athanazio.com/2009/01/11/c-criando-um-labirinto-v1/</a></p>
<p>Fazer as conexões entre os elementos do labirinto foi uma coisa interessante, porque eu preciso de uma representação onde cada posição, seja parede ou celula vazia tenha a mesma largura para representar isto para cada item do labirinto criei uma matriz 3&#215;3 onde a posição do centro representa a celula em si e as posições ao redor são as possiveis conexões com as proximas células, veja o desenho abaixo</p>
<p><img src="http://www.athanazio.com/wp-content/uploads/2009/01/explicando-as-conexoes-do-labirinto.jpg" alt="" title="explicando-as-conexoes-do-labirinto" width="382" height="333" class="alignnone size-full wp-image-1571" /></p>
<p>o centro do quadro eh a celula atual sendo processada, e as caixa ao redor sao os possiveis vizinhos, note que para cara vizinho existe uma combinacao de modificadores para x e y, por exemplo o vizinho ao norte é 0 e -1 o do leste 1 e 0 e assim por diante.</p>
<p>alem disto para conectar ao vizinho armazenei tambem que coordenada na matriz de conexões é necessário atualizar para realizar a conexão, por exemplo para o norte a conexão é feita em 1,2 da matriz de conexões.</p>
<p>a matriz com estas definições está na classe de geração do maze </p>
<p>int[,] SearchNeighBorNumbers = { { 0, -1, 1, 2 }, { 1, 0, 0, 1 }, { 0, 1, 1, 0 }, { -1, 0, 2, 1 } };</p>
<p>desta forma preciso sortear somente que linha desta matriz vou usar para manipular o vizinho, e assim realizo as conexões. Antes que eu me esqueça ! além de mudar a matriz de conexões do vizinho é necessário fazer o mesmo na célula corrente e para encontrar a célula correta basta usar o mesmo deslocamento usado para encontrar o vizinho, dentro da matriz de conexões da celula atual, a partir da posicao 1,1 conforme este treco abaixo</p>
<p>                    current.conections[<br />
                        1 + SearchNeighBorNumbers[neighborRow, NEIGHBOR_X],<br />
                        1 + SearchNeighBorNumbers[neighborRow, NEIGHBOR_Y]] = OPEN;</p>
<p>algumas referencias para labirintos</p>
<p>tutorial sobre a geração do labirinto<br />
<a href="http://www.mazeworks.com/mazegen/mazetut/index.htm">http://www.mazeworks.com/mazegen/mazetut/index.htm</a></p>
<p>mais comentarios sobre o algoritmo<br />
<a href="http://en.wikipedia.org/wiki/Maze#Generating_mazes">http://en.wikipedia.org/wiki/Maze#Generating_mazes</a></p>
<p>uma visao mais detalhada do Deep-first<br />
<a href="http://en.wikipedia.org/wiki/Depth-first_search">http://en.wikipedia.org/wiki/Depth-first_search</a></p>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.athanazio.com/2009/01/11/c-criando-labirinto-parte-2-explicando-as-conexoes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>c# criando um labirinto v1</title>
		<link>http://www.athanazio.com/2009/01/11/c-criando-um-labirinto-v1/</link>
		<comments>http://www.athanazio.com/2009/01/11/c-criando-um-labirinto-v1/#comments</comments>
		<pubDate>Mon, 12 Jan 2009 02:11:14 +0000</pubDate>
		<dc:creator>athanazio</dc:creator>
				<category><![CDATA[games]]></category>
		<category><![CDATA[programacao]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[generator]]></category>
		<category><![CDATA[gerador]]></category>
		<category><![CDATA[labirinto]]></category>
		<category><![CDATA[maze]]></category>

		<guid isPermaLink="false">http://www.athanazio.com/?p=1563</guid>
		<description><![CDATA[Para o jogo que estou criando preciso de uns labirintos e como não achei algo que pudesse gerar para um arquivo texto, estou implementando o meu mesmo, com algumas leituras vi que o algoritmo mais fácil para este caso seria a através de uma pilha assim eu garanto que percorri todos os elementos do labirinto. [...]]]></description>
			<content:encoded><![CDATA[<div id="HOTWordsTxt" name="HOTWordsTxt"><p>Para o jogo que estou criando preciso de uns labirintos e como não achei algo que pudesse gerar para um arquivo texto, estou implementando o meu mesmo, com algumas leituras vi que o algoritmo mais fácil para este caso seria a através de uma pilha assim eu garanto que percorri todos os elementos do labirinto.</p>
<p>o algortimo consiste em escolher uma posicao aleatoria, e buscar os vizinhos nao visitados ao redor, encontrando um abre caminho ateh ele e empilha o mesmo, e vai fazendo isto até que não existam vizinhos não visitados, assim vai desempilhando para voltar no caminho e tentando achar vizinhos não visitados no caminho de volta.<br />
Assim percorremos todo o mapa mas ainda ficam uns becos sem saída, como pode ver marcado neste desenho que fiz quando estava testando manualmente o algoritmo<br />
<img src="http://www.athanazio.com/wp-content/uploads/2009/01/conferindo-o-gerador-de-maze.jpg" alt="" title="conferindo-o-gerador-de-maze" width="332" height="297" class="alignnone size-full wp-image-1564" /></p>
<p>o teste foi de 5&#215;5 e marquei com bolinhas abobora os becos sem saída, na próxima versão do algoritmo vou guardar os becos sem saída e conectar com algum vizinho =) eh melhor fazzer andar em círculos do que encontrar um beco em saída, hehehe</p>
<p>Seguem os códigos fonte, do gerador e do programa que esta gravando num arquivo texto o maze gerado, que por sinal esta com algum problema ainda &#8230;</p>
<p>Program.cs</p>
<p>using System;<br />
using System.Collections.Generic;<br />
using System.Linq;<br />
using System.Text;<br />
using System.IO;</p>
<p>namespace MazeGenerator<br />
{<br />
    class Program<br />
    {<br />
        static void Main(string[] args)<br />
        {<br />
            MazeGen mazeGen = new MazeGen();<br />
            MazeGen.MazeCell[,] maze = mazeGen.generateMaze(5,5);</p>
<p>            string fileName = &#8220;c:/work/maze&#8221; + DateTime.Now.ToBinary() + &#8220;.txt&#8221;;<br />
            FileStream stream = File.Open(fileName, FileMode.OpenOrCreate);<br />
            StreamWriter writer = new StreamWriter(stream);</p>
<p>            for (int n = 0; n < maze.GetLength(0); n++)<br />
            {<br />
                for (int conn = 0; conn < 3; conn++)<br />
                {<br />
                    for (int m = 0; m < maze.GetLength(1); m++)<br />
                    {<br />
                        writer.Write(maze[n, m].conections[conn, 0] == MazeGen.OPEN ? "_" : "*");<br />
                        writer.Write(maze[n, m].conections[conn, 1] == MazeGen.OPEN ? "_" : "*");<br />
                        writer.Write(maze[n, m].conections[conn, 2] == MazeGen.OPEN ? "_" : "*");<br />
                    }<br />
                    writer.WriteLine();<br />
                }<br />
            }<br />
            writer.Close();<br />
        }<br />
    }<br />
}</p>
<p>MazeGen,cs</p>
<p>using System;<br />
using System.Collections.Generic;<br />
using System.Linq;<br />
using System.Text;<br />
using System.Collections;</p>
<p>namespace MazeGenerator<br />
{<br />
    public class MazeGen<br />
    {<br />
        public const Boolean DEBUG = true;<br />
        public const int CLOSED = 0;<br />
        public const int OPEN = 1;</p>
<p>        public const int NEIGHBOR_X = 0;<br />
        public const int NEIGHBOR_Y = 1;<br />
        public const int NEIGHBOR_CONNECTION_2OPEN_X = 2;<br />
        public const int NEIGHBOR_CONNECTION_2OPEN_Y = 3;<br />
        public const int POSSIBLE_NEIGHBORS = 4;</p>
<p>        public static Random random = new Random();</p>
<p>        public class MazeCell<br />
        {<br />
            public MazeCell(int X, int Y)<br />
            {<br />
                this.X = X;<br />
                this.Y = Y;<br />
                this.Visited = false;<br />
            }</p>
<p>            public Boolean Visited = false;<br />
            public int X;<br />
            public int Y;<br />
            // north, east, south, west<br />
            public byte[,] conections = { { CLOSED, CLOSED, CLOSED },<br />
                                        { CLOSED, OPEN, CLOSED },<br />
                                        { CLOSED, CLOSED, CLOSED } };</p>
<p>            public override string ToString()<br />
            {<br />
                string buffer = "";<br />
                foreach( byte one in conections){<br />
                    buffer += one.ToString();<br />
                }</p>
<p>                return X + "," + Y + " [" + buffer +"] ";<br />
            }<br />
        }</p>
<p>        // used to random the neighbor cell<br />
        // { increment of X, increment of Y, connection to open in the neighbor }<br />
        int[,] SearchNeighBorNumbers = { { 0, -1, 1, 2 }, { 1, 0, 0, 1 }, { 0, 1, 1, 0 }, { -1, 0, 2, 1 } };</p>
<p>        public MazeCell[,] generateMaze(int rows, int cols)<br />
        {</p>
<p>            // fill the matrix<br />
            MazeCell[,] result = new MazeCell[rows, cols];<br />
            for (int n = 0; n < result.GetLength(0); n++)<br />
            {<br />
                for (int m = 0; m < result.GetLength(1); m++)<br />
                {<br />
                    result[n, m] = new MazeCell(n, m);<br />
                }<br />
            }</p>
<p>            int visited = 1;<br />
            int total = rows * cols;</p>
<p>            Stack path = new Stack();</p>
<p>            int x = random.Next(1, rows - 1);<br />
            int y = random.Next(1, cols - 1);</p>
<p>            result[x, y].Visited = true;</p>
<p>            path.Push(result[x, y]);<br />
            MazeCell current = result[x, y];</p>
<p>            while (visited < total)<br />
            {<br />
                // try the unvisited neighbors<br />
                int neighborRow = random.Next(0, 3);<br />
                MazeCell neighbor = nextRandomUnvisited(result, current, neighborRow);</p>
<p>                int tries = 1;<br />
                while (tries < POSSIBLE_NEIGHBORS &amp;&amp; neighbor == null)<br />
                {<br />
                    neighborRow ++;<br />
                    if( neighborRow >= POSSIBLE_NEIGHBORS ){<br />
                        neighborRow = 0;<br />
                    }<br />
                    neighbor = nextRandomUnvisited(result, current, neighborRow);<br />
                    tries ++;<br />
                }</p>
<p>                if (neighbor == null)<br />
                {<br />
                    current = (MazeCell)path.Pop();<br />
                }<br />
                else<br />
                {<br />
                    current.conections[<br />
                        1 + SearchNeighBorNumbers[neighborRow, NEIGHBOR_X],<br />
                        1 + SearchNeighBorNumbers[neighborRow, NEIGHBOR_Y]] = OPEN;</p>
<p>                    neighbor.Visited = true;<br />
                    neighbor.conections[<br />
                        SearchNeighBorNumbers[neighborRow, NEIGHBOR_CONNECTION_2OPEN_X],<br />
                        SearchNeighBorNumbers[neighborRow, NEIGHBOR_CONNECTION_2OPEN_Y]] = OPEN;</p>
<p>                    if (DEBUG){Console.WriteLine(&#8220;from {0} to {1}&#8221;, current, neighbor);}</p>
<p>                    path.Push(neighbor);<br />
                    current = neighbor;<br />
                    visited++;<br />
                }<br />
            }</p>
<p>            return result;<br />
        }</p>
<p>        public MazeCell nextRandomUnvisited(MazeCell[,] result, MazeCell current, int neighborRow)<br />
        {</p>
<p>            int testX = current.X + SearchNeighBorNumbers[neighborRow, NEIGHBOR_X];<br />
            int testY = current.Y + SearchNeighBorNumbers[neighborRow, NEIGHBOR_Y];</p>
<p>            // check if neighbor exists<br />
            // if not will try again<br />
            if (testX >= 0 &amp;&amp; testX < result.GetLength(0) &amp;&amp; testY >= 0 &amp;&amp; testY < result.GetLength(1))<br />
            {</p>
<p>                if (!result[testX, testY].Visited)<br />
                {<br />
                    return result[testX, testY];<br />
                }<br />
            }</p>
<p>            return null;<br />
        }</p>
<p>    }<br />
}</p>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.athanazio.com/2009/01/11/c-criando-um-labirinto-v1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>c# xna criação de cenas e scroll de mapa</title>
		<link>http://www.athanazio.com/2009/01/11/c-xna-criacao-de-cenas-e-scroll-de-mapa/</link>
		<comments>http://www.athanazio.com/2009/01/11/c-xna-criacao-de-cenas-e-scroll-de-mapa/#comments</comments>
		<pubDate>Sun, 11 Jan 2009 20:00:51 +0000</pubDate>
		<dc:creator>athanazio</dc:creator>
				<category><![CDATA[games]]></category>
		<category><![CDATA[programacao]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[call you dont call me]]></category>
		<category><![CDATA[event]]></category>
		<category><![CDATA[event handler]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[handler]]></category>
		<category><![CDATA[Scene]]></category>
		<category><![CDATA[xna]]></category>

		<guid isPermaLink="false">http://www.athanazio.com/?p=1560</guid>
		<description><![CDATA[Uai ! em ateh map scroll hehehe, bem parte das minhas reflexões sobre a forma de implementar o jogo estão se materalizando, criei o conceito de cena, contendo o gerenciador de eventos e deslocamento da tela para permitir o scroll da tela de fundo. o primeiro detalhe eh a classe Scene em si que em [...]]]></description>
			<content:encoded><![CDATA[<div id="HOTWordsTxt" name="HOTWordsTxt"><p>Uai ! em ateh map scroll hehehe, bem parte das minhas reflexões <a href="http://www.athanazio.com/2009/01/07/ideias-em-game-coding-design/">sobre a forma de implementar o jogo</a> estão se materalizando, criei o conceito de cena, contendo o gerenciador de eventos e deslocamento da tela para permitir o scroll da tela de fundo.</p>
<p>o primeiro detalhe eh a classe Scene em si</p>
<p>using System;<br />
using System.Collections.Generic;<br />
using System.Text;</p>
<p>using Microsoft.Xna.Framework;<br />
using Microsoft.Xna.Framework.Content;<br />
using Microsoft.Xna.Framework.Graphics;</p>
<p>namespace ChickenMaze<br />
{<br />
    public abstract class Scene<br />
    {<br />
        public Game game;<br />
        public EventManager eventManager;<br />
        public int X;<br />
        public int Y;</p>
<p>        public Scene(Game game, EventManager eventManager)<br />
        {<br />
            this.game= game;<br />
            this.eventManager= eventManager;<br />
            this.X = 0;<br />
            this.Y = 0;<br />
        }</p>
<p>        public abstract void Initialize();<br />
        public abstract void LoadContent();<br />
        public abstract void Draw(GameTime gameTime, SpriteBatch spriteBatch);</p>
<p>    }<br />
}</p>
<p>que em alguns aspectos tentei manter o design semelhante a classe Game, com excessão do método Draw que adicionei o objeto spriteBatch sendo passado como parâmetro para evitar esta complexidade na cena atual, assim na classe Game principal do jogo um objeto scene é criado, e ao executar initialize, loadcontent e draw os respectivos metodos da Scene corrente serão chamados.</p>
<p>Esta abaixo eh a SceneMainMaze que determina os detalhes especificos do jogo, como sprite que vai ser usado como personagem, mapa e tratadores de eventos, note que a implementação dos eventos fica separada deste código.</p>
<p>using System;<br />
using System.Collections.Generic;<br />
using System.Text;</p>
<p>using Microsoft.Xna.Framework;<br />
using Microsoft.Xna.Framework.Content;<br />
using Microsoft.Xna.Framework.Graphics;</p>
<p>namespace ChickenMaze<br />
{<br />
    class SceneMainMaze : Scene<br />
    {<br />
        Sprite chicken;<br />
        Map map;</p>
<p>        public SceneMainMaze(Game game, EventManager eventManager)<br />
            : base(game, eventManager)<br />
        {</p>
<p>        }</p>
<p>        public override void Initialize(){</p>
<p>            map = new Map(this);<br />
            chicken = new Sprite(&#8220;chicken&#8221;, this);<br />
            chicken.Position = map.GetFirstFreeSpot();<br />
            chicken.SetMap(map);</p>
<p>            eventManager.addHandler(new EventCantMoveHere(this));<br />
            eventManager.addHandler(new EventKeyboardLeft(this, chicken, map));<br />
            eventManager.addHandler(new EventKeyboardRight(this, chicken, map));<br />
            eventManager.addHandler(new EventKeyboardUp(this, chicken, map));<br />
            eventManager.addHandler(new EventKeyboardDown(this, chicken, map));<br />
            eventManager.addHandler(new EventNeedScrollMap(this, chicken, map ));<br />
        }</p>
<p>        public override void LoadContent()<br />
        {<br />
            chicken.LoadContent(game.Content);<br />
            map.LoadContent(game.Content);<br />
        }</p>
<p>        public override void Draw(GameTime gameTime, SpriteBatch spriteBatch)<br />
        {<br />
            Color color = new Color(0, 136, 0);<br />
            game.GraphicsDevice.Clear(color);</p>
<p>            map.Draw(spriteBatch);<br />
            chicken.Draw(spriteBatch);<br />
        }<br />
    }<br />
}</p>
<p>Então o trecho abaixo mostra como os eventos são registrados para que ao serem disparados, o tipo de evento é testado e em seguida o métido run() dos eventos é executado</p>
<p>            eventManager.addHandler(new EventKeyboardDown(this, chicken, map));<br />
            eventManager.addHandler(new EventNeedScrollMap(this, chicken, map ));</p>
<p>O código abaixo é o tratador de eventos para quando o scroll de mapa eh necessário</p>
<p>using System;<br />
using System.Collections.Generic;<br />
using System.Linq;<br />
using System.Text;<br />
using Microsoft.Xna.Framework.Graphics;<br />
using Microsoft.Xna.Framework;<br />
using Microsoft.Xna.Framework.Audio;<br />
using Microsoft.Xna.Framework.Content;<br />
using Microsoft.Xna.Framework.GamerServices;<br />
using Microsoft.Xna.Framework.Input;<br />
using Microsoft.Xna.Framework.Media;<br />
using Microsoft.Xna.Framework.Net;<br />
using Microsoft.Xna.Framework.Storage;</p>
<p>namespace ChickenMaze<br />
{<br />
    class EventNeedScrollMap: EventHandler<br />
    {<br />
        protected Sprite sprite;<br />
        protected Map map;</p>
<p>        protected int HorizontalBorderLimit;<br />
        protected int VerticalBorderLimit; </p>
<p>        const byte BORDER_DIVISION_INDEX = 4;</p>
<p>        public EventNeedScrollMap(Scene scene, Sprite sprite, Map map)<br />
            : base(EventHandler.EventType.SPRITE_MOVED, scene)<br />
        {<br />
            this.sprite = sprite;<br />
            this.map = map;</p>
<p>            HorizontalBorderLimit = scene.game.GraphicsDevice.Viewport.Width / BORDER_DIVISION_INDEX;<br />
            VerticalBorderLimit = scene.game.GraphicsDevice.Viewport.Height / BORDER_DIVISION_INDEX;<br />
        }</p>
<p>        ///<br />
<summary>
        /// if the sprite is close to the border of the viewport,<br />
        /// for each direction of the movement change the viewport<br />
        /// of the GraphicsDevice<br />
        /// </summary>
<p>        ///
<param name="source"></param>
        public override void run(Object source) {</p>
<p>            int SceneShift = sprite.speed;<br />
            int x = (int)sprite.Position.X &#8211; scene.X;<br />
            int y = (int)sprite.Position.Y &#8211; scene.Y;</p>
<p>            // into left limit<br />
            if (x < scene.game.GraphicsDevice.Viewport.X + HorizontalBorderLimit)<br />
            {<br />
                if (scene.X - SceneShift > 0)<br />
                {<br />
                    scene.X -= SceneShift;<br />
                }<br />
            }</p>
<p>            // into right limit<br />
            if (x > scene.game.GraphicsDevice.Viewport.X<br />
                    + scene.game.GraphicsDevice.Viewport.Width &#8211; HorizontalBorderLimit)<br />
            {<br />
                scene.X += SceneShift;<br />
            }</p>
<p>            // into top limit<br />
            if (y < scene.game.GraphicsDevice.Viewport.Y + VerticalBorderLimit)<br />
            {<br />
                if (scene.Y - SceneShift > 0)<br />
                {<br />
                    scene.Y -= SceneShift;<br />
                }<br />
            }</p>
<p>            // into bottom limit<br />
            if (y > scene.game.GraphicsDevice.Viewport.Y<br />
                    + scene.game.GraphicsDevice.Viewport.Height &#8211; VerticalBorderLimit)<br />
            {<br />
                scene.Y += SceneShift;<br />
            }</p>
<p>        }</p>
<p>    }<br />
}</p>
<p>Desta maneira tratadores de evento podem ser facilmente reaproveitados entre jogos, e inclusive escrever código para realizar testes destes tratadores.</p>
<p>os próximos passos são :</p>
<ul>
<li>carregar o mapa de uma arquivo</li>
<li>determinar que a galinha chegou no fim do mapa e criar evento para isto</li>
<li>adicionar sons
</li>
<li>adicionar timer na tela
</li>
<li>adicionar os marcadores de labirinto com ovos (1 ovo a cada 10 segundos com duração de 60 segundos cada)
</li>
<li>adciionar cena de tela inicial
</li>
<li>adicionar cena de pontuação
</li>
<ul>
</ul>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.athanazio.com/2009/01/11/c-xna-criacao-de-cenas-e-scroll-de-mapa/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>codigo para gerar maze</title>
		<link>http://www.athanazio.com/2009/01/11/codigo-para-gerar-maze/</link>
		<comments>http://www.athanazio.com/2009/01/11/codigo-para-gerar-maze/#comments</comments>
		<pubDate>Sun, 11 Jan 2009 05:28:37 +0000</pubDate>
		<dc:creator>athanazio</dc:creator>
				<category><![CDATA[games]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[labirinto]]></category>
		<category><![CDATA[maze]]></category>

		<guid isPermaLink="false">http://www.athanazio.com/?p=1551</guid>
		<description><![CDATA[eh este que vou usar ! http://www.ii.uni.wroc.pl/~wzychla/maze_en.html]]></description>
			<content:encoded><![CDATA[<div id="HOTWordsTxt" name="HOTWordsTxt"><p>eh este que vou usar !<br />
<a href="http://www.ii.uni.wroc.pl/~wzychla/maze_en.html">http://www.ii.uni.wroc.pl/~wzychla/maze_en.html</a></p>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.athanazio.com/2009/01/11/codigo-para-gerar-maze/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>c# xna mudando a fonte e o tamanho</title>
		<link>http://www.athanazio.com/2009/01/11/c-xna-mudando-a-fonte-e-o-tamanho/</link>
		<comments>http://www.athanazio.com/2009/01/11/c-xna-mudando-a-fonte-e-o-tamanho/#comments</comments>
		<pubDate>Sun, 11 Jan 2009 03:10:03 +0000</pubDate>
		<dc:creator>athanazio</dc:creator>
				<category><![CDATA[games]]></category>
		<category><![CDATA[programacao]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[drawstring]]></category>
		<category><![CDATA[font]]></category>
		<category><![CDATA[Spritefont]]></category>
		<category><![CDATA[xna]]></category>

		<guid isPermaLink="false">http://www.athanazio.com/?p=1548</guid>
		<description><![CDATA[usando o tal do Spritefont descobri que o tamanho da fonte fica definido neste xml que tem o mapeamento da fonte para o aplicativo, provavelmente porque rola algo de gerar as imagens da fonte para a exibição, dai fica definido o tamanho, e no mesmo xml é possivel trocar o nome da fonte também. segundo [...]]]></description>
			<content:encoded><![CDATA[<div id="HOTWordsTxt" name="HOTWordsTxt"><p>usando o tal do Spritefont descobri que o tamanho da fonte fica definido neste xml que tem o mapeamento da fonte para o aplicativo, provavelmente porque rola algo de gerar as imagens da fonte para a exibição, dai fica definido o tamanho, e no mesmo xml é possivel trocar o nome da fonte também.</p>
<pre class="brush: xml; title: ; notranslate">
    &lt;FontName&gt;Kootenay&lt;/FontName&gt;

    &lt;Size&gt;12&lt;/Size&gt;
</pre>
<p>segundo a microsoft, <a href="http://msdn.microsoft.com/en-us/library/bb447673.aspx ">http://msdn.microsoft.com/en-us/library/bb447673.aspx<br />
</a>, as fontes que podem ser distribuídas de grátis com os jogos são:</p>
<ul>
<li>Kooten.ttf</li>
<li>Linds.ttf</li>
<li>Miramo.ttf</li>
<li>Bold Miramob.ttf</li>
<li>Peric.ttf</li>
<li>Pericl.ttf</li>
<li>Pesca.ttf</li>
<li>Pescab.ttf</li>
</ul>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.athanazio.com/2009/01/11/c-xna-mudando-a-fonte-e-o-tamanho/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>c# xna fontes e movimento</title>
		<link>http://www.athanazio.com/2009/01/11/c-xna-fontes-e-movimento/</link>
		<comments>http://www.athanazio.com/2009/01/11/c-xna-fontes-e-movimento/#comments</comments>
		<pubDate>Sun, 11 Jan 2009 03:03:29 +0000</pubDate>
		<dc:creator>athanazio</dc:creator>
				<category><![CDATA[games]]></category>
		<category><![CDATA[programacao]]></category>
		<category><![CDATA[trecos]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[drawstring]]></category>
		<category><![CDATA[font]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[movimento]]></category>
		<category><![CDATA[Spritefont]]></category>
		<category><![CDATA[xna]]></category>

		<guid isPermaLink="false">http://www.athanazio.com/?p=1544</guid>
		<description><![CDATA[Em minha exploração atual enfrentei algumas duvidas que foram interessantes: ao movimentar o personagem pela tela os movimentos para baixo e para a a direita nao permitiam que o personagem ficasse colado no obstáculo, mantendo sempre uma certa distância, e o segundo que ocorreu logo apos quando tentei exibir no personagem a posicao na tela, [...]]]></description>
			<content:encoded><![CDATA[<div id="HOTWordsTxt" name="HOTWordsTxt"><p>Em minha exploração atual enfrentei algumas duvidas que foram interessantes: ao movimentar o personagem pela tela os movimentos para baixo e para a a direita nao permitiam que o personagem ficasse colado no obstáculo, mantendo sempre uma certa distância, e o segundo que ocorreu logo apos quando tentei exibir no personagem a posicao na tela, que foi como carregar e exibir texto.</p>
<p>vamos por partes, esta tela abaixo mostra o resultado do esforço de debugar o movimento do personagem na tela, exibindo a posição atual na janela<br />
<a href="http://www.athanazio.com/wp-content/uploads/2009/01/fontes-e-movimento.jpg"><img src="http://www.athanazio.com/wp-content/uploads/2009/01/fontes-e-movimento-384x300.jpg" alt="" title="fontes-e-movimento" width="384" height="300" class="alignnone size-medium wp-image-1543" /></a></p>
<p>e depois na interface escolha Spritefont<br />
<a href="http://www.athanazio.com/wp-content/uploads/2009/01/spritefont.jpg"><img src="http://www.athanazio.com/wp-content/uploads/2009/01/spritefont-443x300.jpg" alt="" title="spritefont" width="443" height="300" class="alignnone size-medium wp-image-1546" /></a></p>
<p>primeiro quanto a discussão do movimento para baixo e para a direita, o trecho de código abaixo mostra como fiz a implementação dos tratadores de eventos isolada da implementação do Sprite e do bloco principal</p>
<p>using System;<br />
using System.Collections.Generic;<br />
using System.Linq;<br />
using System.Text;<br />
using Microsoft.Xna.Framework;</p>
<p>namespace ChickenMaze<br />
{<br />
    class EventKeyboardDown: EventHandler<br />
    {<br />
        protected Sprite sprite;<br />
        protected Map map;</p>
<p>        public EventKeyboardDown(EventManager manager, Sprite sprite, Map map)<br />
            : base(EventHandler.EventType.KEYBOARD_DOWN, manager)<br />
        {<br />
            this.sprite = sprite;<br />
            this.map = map;<br />
        }</p>
<p>        public override void run(Object source) {</p>
<p>            int x = (int)sprite.Position.X;<br />
            int y = (int)sprite.Position.Y + sprite.speed;</p>
<p>            if (map.IsAvailable(x + sprite.GetWidth()-1, y + sprite.GetHeight()-1)<br />
                &#038;&#038; map.IsAvailable(x, y + sprite.GetHeight()-1))<br />
            {<br />
                sprite.Position.Y = y;<br />
            }<br />
            else<br />
            {<br />
                manager.trigger(this, EventHandler.EventType.CANT_MOVE_THERE);<br />
            }</p>
<p>        }</p>
<p>    }<br />
}</p>
<p>A chave da solução do problema esta no fato de comparar os pontos -1 hehehe bobagem pura da minha parte, porque se estou por exemplo no ponto 60 e somo 60 com certeza nao vou poder colocar este ponto numa posicao 120 porque 60+60 = 120 e estando 120 ocupado a resposta vai ser sempre, ok, ali nao pode, mas se faço a comparação com -1 ai sim vou testar o ultimo pixel do bloco que estou movimentando.</p>
<p>Outra questão é desenhar o texto, que não teve mistério, o mistério foi descobrir como carregar a fonte <img src='http://www.athanazio.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  o trecho abaixo exibe o texto </p>
<p>        public static void DrawText(string text, Vector2 position)<br />
        {<br />
            spriteBatch.DrawString(spriteFont, text, position, Color.White);<br />
        }</p>
<p>e para carregar uma fonte basta criar uma nova sprite font que eh uma referencia dentro do projeto para uma fonte que vai ser carregada na hora de gerar o projeto para deploy, clique com o botão direito em content conforme a figura abaixo</p>
<p><a href="http://www.athanazio.com/wp-content/uploads/2009/01/content-add-new-item.jpg"><img src="http://www.athanazio.com/wp-content/uploads/2009/01/content-add-new-item.jpg" alt="" title="content-add-new-item" width="386" height="166" class="alignnone size-full wp-image-1545" /></a></p>
<p>e no codigo fonte faça referência ao Spritefont criado</p>
<p>            spriteFont = Content.Load<SpriteFont>(&#8220;SpriteFont1&#8243;);</p>
<p>agora vou empacotar o pxóximo post trocando a caixinha amarela pela galinha e preparar as explicações de como foi organizado o código <img src='http://www.athanazio.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.athanazio.com/2009/01/11/c-xna-fontes-e-movimento/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>c# xna varios docs sobre graficos 2D</title>
		<link>http://www.athanazio.com/2009/01/10/c-xna-varios-docs-sobre-graficos-2d/</link>
		<comments>http://www.athanazio.com/2009/01/10/c-xna-varios-docs-sobre-graficos-2d/#comments</comments>
		<pubDate>Sat, 10 Jan 2009 20:21:59 +0000</pubDate>
		<dc:creator>athanazio</dc:creator>
				<category><![CDATA[games]]></category>
		<category><![CDATA[programacao]]></category>
		<category><![CDATA[2d]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[draw]]></category>
		<category><![CDATA[line]]></category>
		<category><![CDATA[xna]]></category>

		<guid isPermaLink="false">http://www.athanazio.com/?p=1537</guid>
		<description><![CDATA[http://msdn.microsoft.com/en-us/library/bb194906.aspx]]></description>
			<content:encoded><![CDATA[<div id="HOTWordsTxt" name="HOTWordsTxt"><p><a href="http://msdn.microsoft.com/en-us/library/bb194906.aspx">http://msdn.microsoft.com/en-us/library/bb194906.aspx</a></p>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.athanazio.com/2009/01/10/c-xna-varios-docs-sobre-graficos-2d/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>c# xna movendo o sprite na tela</title>
		<link>http://www.athanazio.com/2009/01/10/c-xna-movendo-o-sprite-na-tela/</link>
		<comments>http://www.athanazio.com/2009/01/10/c-xna-movendo-o-sprite-na-tela/#comments</comments>
		<pubDate>Sat, 10 Jan 2009 19:45:56 +0000</pubDate>
		<dc:creator>athanazio</dc:creator>
				<category><![CDATA[games]]></category>
		<category><![CDATA[programacao]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[move]]></category>
		<category><![CDATA[sprite]]></category>
		<category><![CDATA[xna]]></category>

		<guid isPermaLink="false">http://www.athanazio.com/?p=1538</guid>
		<description><![CDATA[bem ainda não é quase nada, mas pelo menos os sprite esta se movendo na tela =) Tem a classe Sprite que eh uma variação da classe usada em http://www.xnadevelopment.com/tutorials/thewizard/theWizard.shtml e a classe principal do jogo em si Game1. o que acontece eh que no método update() da classe do jogo verifico o estado do [...]]]></description>
			<content:encoded><![CDATA[<div id="HOTWordsTxt" name="HOTWordsTxt"><p>bem ainda não é quase nada, mas pelo menos os sprite esta se movendo na tela =)<br />
<a href="http://www.athanazio.com/wp-content/uploads/2009/01/movendo-o-sprite.jpg"><img src="http://www.athanazio.com/wp-content/uploads/2009/01/movendo-o-sprite-384x300.jpg" alt="" title="movendo-o-sprite" width="384" height="300" class="alignnone size-medium wp-image-1539" /></a></p>
<p>Tem a classe Sprite que eh uma variação da classe usada em <a href="http://www.xnadevelopment.com/tutorials/thewizard/theWizard.shtml">http://www.xnadevelopment.com/tutorials/thewizard/theWizard.shtml</a> e a classe principal do jogo em si Game1.</p>
<p>o que acontece eh que no método update() da classe do jogo verifico o estado do teclado e de acordo com este estado chamo métodos do objeto chicken para mover pela tela.</p>
<p>using System;<br />
using System.Collections.Generic;<br />
using System.Linq;<br />
using Microsoft.Xna.Framework;<br />
using Microsoft.Xna.Framework.Audio;<br />
using Microsoft.Xna.Framework.Content;<br />
using Microsoft.Xna.Framework.GamerServices;<br />
using Microsoft.Xna.Framework.Graphics;<br />
using Microsoft.Xna.Framework.Input;<br />
using Microsoft.Xna.Framework.Media;<br />
using Microsoft.Xna.Framework.Net;<br />
using Microsoft.Xna.Framework.Storage;</p>
<p>namespace ChickenMaze<br />
{<br />
    public class Game1 : Microsoft.Xna.Framework.Game<br />
    {<br />
        GraphicsDeviceManager graphics;<br />
        SpriteBatch spriteBatch;<br />
        Sprite chicken;</p>
<p>        public Game1()<br />
        {<br />
            graphics = new GraphicsDeviceManager(this);<br />
            Content.RootDirectory = &#8220;Content&#8221;;<br />
        }</p>
<p>        protected override void Initialize()<br />
        {<br />
            chicken = new Sprite(&#8220;chicken&#8221;);<br />
            base.Initialize();<br />
        }</p>
<p>        protected override void LoadContent()<br />
        {<br />
            spriteBatch = new SpriteBatch(GraphicsDevice);<br />
            chicken.LoadContent(this.Content);<br />
        }</p>
<p>        protected override void UnloadContent()<br />
        {<br />
        }</p>
<p>        protected override void Update(GameTime gameTime)<br />
        {<br />
            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)<br />
                this.Exit();</p>
<p>            UpdateKeyboard(Keyboard.GetState());<br />
            base.Update(gameTime);<br />
        }</p>
<p>        public void UpdateKeyboard(KeyboardState keyboardState)<br />
        { </p>
<p>            if( keyboardState.IsKeyDown(Keys.Left)){<br />
                chicken.Left();<br />
            }</p>
<p>            if (keyboardState.IsKeyDown(Keys.Right))<br />
            {<br />
                chicken.Right();<br />
            }</p>
<p>            if (keyboardState.IsKeyDown(Keys.Down))<br />
            {<br />
                chicken.Down();<br />
            }</p>
<p>            if (keyboardState.IsKeyDown(Keys.Up))<br />
            {<br />
                chicken.Up();<br />
            }</p>
<p>        }</p>
<p>        protected override void Draw(GameTime gameTime)<br />
        {<br />
            GraphicsDevice.Clear(Color.CornflowerBlue);<br />
            spriteBatch.Begin();<br />
            chicken.Draw(spriteBatch);<br />
            spriteBatch.End();<br />
            base.Draw(gameTime);<br />
        }<br />
    }<br />
}</p>
<p>e na classe Sprite esta a carga da imagem e posicionamento da imagem na hora do desenho.</p>
<p>using System;<br />
using System.Collections.Generic;<br />
using System.Text;</p>
<p>using Microsoft.Xna.Framework;<br />
using Microsoft.Xna.Framework.Content;<br />
using Microsoft.Xna.Framework.Graphics;</p>
<p>namespace ChickenMaze<br />
{<br />
    class Sprite<br />
    {<br />
        private int speed = 5;<br />
        private string assetName;</p>
<p>        public Sprite(string assetName)<br />
        {<br />
            this.assetName = assetName;<br />
        }</p>
<p>        //The current position of the Sprite<br />
        public Vector2 Position = new Vector2(0,0);</p>
<p>        //The texture object used when drawing the sprite<br />
        private Texture2D mSpriteTexture;</p>
<p>        //Load the texture for the sprite using the Content Pipeline<br />
        public void LoadContent(ContentManager theContentManager)<br />
        {<br />
            mSpriteTexture = theContentManager.Load<Texture2D>(this.assetName);<br />
        }</p>
<p>        //Draw the sprite to the screen<br />
        public void Draw(SpriteBatch theSpriteBatch)<br />
        {<br />
            theSpriteBatch.Draw(mSpriteTexture, Position, Color.White);<br />
        }</p>
<p>        public void Left()<br />
        {<br />
            Position.X -= speed;<br />
        }</p>
<p>        public void Right()<br />
        {<br />
            Position.X += speed;<br />
        }</p>
<p>        public void Down()<br />
        {<br />
            Position.Y += speed;<br />
        }</p>
<p>        public void Up()<br />
        {<br />
            Position.Y -= speed;<br />
        }</p>
<p>    }<br />
}</p>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.athanazio.com/2009/01/10/c-xna-movendo-o-sprite-na-tela/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>c# xna, desenhando o sprite na tela</title>
		<link>http://www.athanazio.com/2009/01/06/c-xna-desenhando-o-sprite-na-tela/</link>
		<comments>http://www.athanazio.com/2009/01/06/c-xna-desenhando-o-sprite-na-tela/#comments</comments>
		<pubDate>Wed, 07 Jan 2009 02:23:39 +0000</pubDate>
		<dc:creator>athanazio</dc:creator>
				<category><![CDATA[games]]></category>
		<category><![CDATA[programacao]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[C Sharp]]></category>
		<category><![CDATA[draw]]></category>
		<category><![CDATA[hello world]]></category>
		<category><![CDATA[sprite]]></category>
		<category><![CDATA[xna]]></category>

		<guid isPermaLink="false">http://www.athanazio.com/?p=1510</guid>
		<description><![CDATA[arre o primeiro sprite na tela a gente nunca esquece !! olha que belo o codigo !!]]></description>
			<content:encoded><![CDATA[<div id="HOTWordsTxt" name="HOTWordsTxt"><p>arre o primeiro sprite na tela a gente nunca esquece !!<br />
<a href="http://www.athanazio.com/wp-content/uploads/2009/01/windows_game1.jpg"><img src="http://www.athanazio.com/wp-content/uploads/2009/01/windows_game1-150x150.jpg" alt="" title="windows_game1" width="150" height="150" class="alignnone size-thumbnail wp-image-1511" /></a></p>
<p>olha que belo o codigo !!</p>
<p>using System;<br />
using System.Collections.Generic;<br />
using System.Linq;<br />
using Microsoft.Xna.Framework;<br />
using Microsoft.Xna.Framework.Audio;<br />
using Microsoft.Xna.Framework.Content;<br />
using Microsoft.Xna.Framework.GamerServices;<br />
using Microsoft.Xna.Framework.Graphics;<br />
using Microsoft.Xna.Framework.Input;<br />
using Microsoft.Xna.Framework.Media;<br />
using Microsoft.Xna.Framework.Net;<br />
using Microsoft.Xna.Framework.Storage;</p>
<p>namespace WindowsGame1<br />
{</p>
<p>    public class Game1 : Microsoft.Xna.Framework.Game<br />
    {<br />
        GraphicsDeviceManager graphics;<br />
        SpriteBatch spriteBatch;</p>
<p>        Vector2 mPosition = new Vector2(0, 0);</p>
<p>        Texture2D mSpriteTexture;</p>
<p>        public Game1()<br />
        {<br />
            graphics = new GraphicsDeviceManager(this);<br />
            Content.RootDirectory = &#8220;Content&#8221;;<br />
        }</p>
<p>        protected override void Initialize()<br />
        {<br />
            base.Initialize();<br />
        }</p>
<p>        protected override void LoadContent()<br />
        {<br />
            spriteBatch = new SpriteBatch(GraphicsDevice);<br />
            mSpriteTexture = this.Content.Load<Texture2D>(&#8220;alien&#8221;);<br />
        }</p>
<p>        protected override void UnloadContent()<br />
        {<br />
        }</p>
<p>        protected override void Update(GameTime gameTime)<br />
        {<br />
            // Allows the game to exit<br />
            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)<br />
                this.Exit();</p>
<p>            base.Update(gameTime);<br />
        }</p>
<p>        protected override void Draw(GameTime gameTime)<br />
        {<br />
            GraphicsDevice.Clear(Color.CornflowerBlue);</p>
<p>            spriteBatch.Begin();<br />
            spriteBatch.Draw(mSpriteTexture, mPosition, Color.White);<br />
            spriteBatch.End();</p>
<p>            base.Draw(gameTime);<br />
        }<br />
    }<br />
}</p>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.athanazio.com/2009/01/06/c-xna-desenhando-o-sprite-na-tela/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>c# eita to de volta ao clipper !</title>
		<link>http://www.athanazio.com/2009/01/05/c-eita-to-de-volta-ao-clipper/</link>
		<comments>http://www.athanazio.com/2009/01/05/c-eita-to-de-volta-ao-clipper/#comments</comments>
		<pubDate>Mon, 05 Jan 2009 23:44:36 +0000</pubDate>
		<dc:creator>athanazio</dc:creator>
				<category><![CDATA[programacao]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[C Sharp]]></category>
		<category><![CDATA[char]]></category>
		<category><![CDATA[console]]></category>
		<category><![CDATA[position]]></category>

		<guid isPermaLink="false">http://www.athanazio.com/?p=1500</guid>
		<description><![CDATA[hauhauhuaa lembrei dos meus tempos de clipper summer 87 e os famigerados comandos de posicionamento de cursor na tela e fazer interfaces magicas em modo texto !! veja que legal este experimento de colocar os cursores nos seus lugares !! deu ateh vontade de fazer um joguinho bem bocó de mexer um treco na tela [...]]]></description>
			<content:encoded><![CDATA[<div id="HOTWordsTxt" name="HOTWordsTxt"><p>hauhauhuaa lembrei dos meus tempos de clipper summer 87 e os famigerados comandos de posicionamento de cursor na tela e fazer interfaces magicas em modo texto !! veja que legal este experimento de colocar os cursores nos seus lugares !!</p>
<p>using System;<br />
using System.Collections.Generic;<br />
using System.Linq;<br />
using System.Text;</p>
<p>namespace ConsoleApplication4<br />
{<br />
    class ConsolePosition<br />
    {<br />
        static void Main(string[] args)<br />
        {<br />
            Console.Title = &#8220;back to clipper summer 87 !!&#8221;;<br />
            Console.ForegroundColor = ConsoleColor.DarkGreen;<br />
            Console.WindowLeft = Console.WindowTop = 0;<br />
            Console.WindowHeight = Console.BufferHeight = 30;<br />
            Console.WindowWidth = Console.BufferWidth = 80;</p>
<p>            int[] numbers = {1,2,3,4,5,6,7};<br />
            foreach(int n in numbers){<br />
               Console.SetCursorPosition(n,n);<br />
               Console.Write(&#8220;#&#8221;);<br />
            }<br />
        }<br />
    }<br />
}</p>
<p>deu ateh vontade de fazer um joguinho bem bocó de mexer um treco na tela hehehehe</p>
<p>outros exemplos parecidos<br />
<a href="http://msdn.microsoft.com/en-us/library/system.console.setwindowposition.aspx">http://msdn.microsoft.com/en-us/library/system.console.setwindowposition.aspx</a><br />
<a href="http://nodstrum.com/2007/11/09/matrix-code-in-c/">http://nodstrum.com/2007/11/09/matrix-code-in-c/</a></p>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.athanazio.com/2009/01/05/c-eita-to-de-volta-ao-clipper/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>c# percorrendo matriz</title>
		<link>http://www.athanazio.com/2009/01/05/c-percorrendo-matriz/</link>
		<comments>http://www.athanazio.com/2009/01/05/c-percorrendo-matriz/#comments</comments>
		<pubDate>Mon, 05 Jan 2009 23:26:35 +0000</pubDate>
		<dc:creator>athanazio</dc:creator>
				<category><![CDATA[programacao]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[C Sharp]]></category>
		<category><![CDATA[for]]></category>
		<category><![CDATA[foreach]]></category>
		<category><![CDATA[iterate]]></category>
		<category><![CDATA[matriz]]></category>
		<category><![CDATA[percorrer]]></category>

		<guid isPermaLink="false">http://www.athanazio.com/?p=1497</guid>
		<description><![CDATA[ao menos duas formas de percorrer uma matriz]]></description>
			<content:encoded><![CDATA[<div id="HOTWordsTxt" name="HOTWordsTxt"><p>ao menos duas formas de percorrer uma matriz </p>
<p>using System;</p>
<p>namespace foo<br />
{<br />
    class numbersAreGreat{<br />
        static void Main (string[] args){<br />
            string[] numbers = {&#8220;one&#8221;, &#8220;two&#8221;, &#8220;three&#8221;, &#8220;four&#8221;, &#8220;five&#8221;};<br />
            if (args.Length > 0)<br />
            {<br />
                int number = int.Parse(args[0]);<br />
                if (number <= 0)<br />
                {<br />
                    Console.WriteLine("please more than zero");<br />
                }<br />
                else<br />
                    if (number > numbers.Length)<br />
                    {<br />
                        Console.WriteLine(&#8220;{0} is greater than we can understand&#8230;&#8221;, number);<br />
                    }<br />
                    else<br />
                    {<br />
                        Console.WriteLine(&#8220;thanks for the {0} ! &#8220;, numbers[number - 1]);<br />
                    }<br />
            }<br />
            else<br />
            {<br />
                Console.WriteLine(&#8220;would be a big effort to inform an integer ?&#8221;);<br />
            }</p>
<p>        }<br />
    }<br />
}</p>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.athanazio.com/2009/01/05/c-percorrendo-matriz/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>c# array condições e trecos</title>
		<link>http://www.athanazio.com/2009/01/05/c-sharp-array-condicoes-e-trecos/</link>
		<comments>http://www.athanazio.com/2009/01/05/c-sharp-array-condicoes-e-trecos/#comments</comments>
		<pubDate>Mon, 05 Jan 2009 23:11:33 +0000</pubDate>
		<dc:creator>athanazio</dc:creator>
				<category><![CDATA[programacao]]></category>
		<category><![CDATA[array]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[C Sharp]]></category>
		<category><![CDATA[if]]></category>
		<category><![CDATA[parametros]]></category>
		<category><![CDATA[test]]></category>

		<guid isPermaLink="false">http://www.athanazio.com/?p=1493</guid>
		<description><![CDATA[Neste experimento rolou de declarar array inline, fazer teste de parametros da linha de comando, display no console, fomatação de mensagem do tipo printf() que deu pra reparar eh com {0}, que por sinal eh do mesmo jeito nos arquivos de resource do struts, coincidência ? =)]]></description>
			<content:encoded><![CDATA[<div id="HOTWordsTxt" name="HOTWordsTxt"><p>Neste experimento rolou de declarar array inline, fazer teste de parametros da linha de comando, display no console, fomatação de mensagem do tipo printf() que deu pra reparar eh com {0}, que por sinal eh do mesmo jeito nos arquivos de resource do struts, coincidência ? =)</p>
<p>using System;</p>
<p>namespace foo<br />
{<br />
    class numbersAreGreat{<br />
        static void Main (string[] args){<br />
            string[] numbers = {&#8220;one&#8221;, &#8220;two&#8221;, &#8220;three&#8221;, &#8220;four&#8221;, &#8220;five&#8221;};<br />
            if (args.Length > 0)<br />
            {<br />
                int number = int.Parse(args[0]);<br />
                if (number <= 0)<br />
                {<br />
                    Console.WriteLine("please more than zero");<br />
                }<br />
                else<br />
                    if (number > numbers.Length)<br />
                    {<br />
                        Console.WriteLine(&#8220;{0} is greater than we can understand&#8230;&#8221;, number);<br />
                    }<br />
                    else<br />
                    {<br />
                        Console.WriteLine(&#8220;thanks for the {0} ! &#8220;, numbers[number - 1]);<br />
                    }<br />
            }<br />
            else<br />
            {<br />
                Console.WriteLine(&#8220;would be a big effort to inform an integer ?&#8221;);<br />
            }</p>
<p>        }<br />
    }<br />
}</p>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.athanazio.com/2009/01/05/c-sharp-array-condicoes-e-trecos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PRIME1 foi pra conta !!</title>
		<link>http://www.athanazio.com/2008/11/27/prime1-foi-pra-conta/</link>
		<comments>http://www.athanazio.com/2008/11/27/prime1-foi-pra-conta/#comments</comments>
		<pubDate>Fri, 28 Nov 2008 01:33:01 +0000</pubDate>
		<dc:creator>athanazio</dc:creator>
				<category><![CDATA[trecos]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[codigo]]></category>
		<category><![CDATA[nerd]]></category>
		<category><![CDATA[primos]]></category>
		<category><![CDATA[problemas]]></category>

		<guid isPermaLink="false">http://www.athanazio.com/?p=1404</guid>
		<description><![CDATA[Arrra !! finalmente apos algumas submissoes consegui fazer uma solucao que atende os criterios de performance do site !! uhuuuu não aguentava mais falar de numeros primos !! https://www.spoj.pl/status/PRIME1,athanazio/ E catucando o site descobri qye tem uma lista de exercicios em portugues tbem show de bola ! http://br.spoj.pl/]]></description>
			<content:encoded><![CDATA[<div id="HOTWordsTxt" name="HOTWordsTxt"><p>Arrra !! finalmente apos algumas submissoes consegui fazer uma solucao que atende os criterios de performance do site !! uhuuuu não aguentava mais falar de numeros primos !!</p>
<p><a href="https://www.spoj.pl/status/PRIME1,athanazio/">https://www.spoj.pl/status/PRIME1,athanazio/</a></p>
<p>E catucando o site descobri qye tem uma lista de exercicios em portugues tbem show de bola !</p>
<p><a href="http://br.spoj.pl/">http://br.spoj.pl/</a></p>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.athanazio.com/2008/11/27/prime1-foi-pra-conta/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>a saga dos numeros primos</title>
		<link>http://www.athanazio.com/2008/11/27/a-saga-dos-numeros-primos/</link>
		<comments>http://www.athanazio.com/2008/11/27/a-saga-dos-numeros-primos/#comments</comments>
		<pubDate>Thu, 27 Nov 2008 16:26:24 +0000</pubDate>
		<dc:creator>athanazio</dc:creator>
				<category><![CDATA[trecos]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[calculo]]></category>
		<category><![CDATA[nerd]]></category>
		<category><![CDATA[primos]]></category>
		<category><![CDATA[programacao]]></category>

		<guid isPermaLink="false">http://www.athanazio.com/?p=1402</guid>
		<description><![CDATA[Como estou estudando C, resolvi fazer os exercícios do Sphere online, e atualmente estou no exercício PRIME1 que atualmente é meu inimigo Mas como colateral da solução do problema encontrei duas coisas bem legais: http://www.prime-numbers.org/ - site com numeros primos, tem uma lista enorme, e ainda manda um range por email =) http://www.grigsoft.com/download-windiff.htm - comparador de arquivos [...]]]></description>
			<content:encoded><![CDATA[<div id="HOTWordsTxt" name="HOTWordsTxt"><p>Como estou estudando C, resolvi fazer os exercícios do <a href="https://www.spoj.pl/problems">Sphere online</a>, e atualmente estou no exercício <a href="https://www.spoj.pl/problems/PRIME1/">PRIME1</a> que atualmente é meu inimigo <img src='http://www.athanazio.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Mas como colateral da solução do problema encontrei duas coisas bem legais:</p>
<p><a href="http://www.prime-numbers.org/">http://www.prime-numbers.org/ - </a>site com numeros primos, tem uma lista enorme, e ainda manda um range por email =)</p>
<p><a href="http://www.grigsoft.com/download-windiff.htm">http://www.grigsoft.com/download-windiff.htm</a> - comparador de arquivos e diretórios minusculo ! muito rapido e pequenino ! 75K zipado.</p>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.athanazio.com/2008/11/27/a-saga-dos-numeros-primos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

