.:: Menu Rápido ::.

Linux | C/C++ | Downloads | SDL | [×]

sexta-feira, 20 de fevereiro de 2009

Construindo um MMORPG - Parte 2

É com grande satisfação que escrevo a continuação deste tutorial. Demorou pra sair, mas saiu !
E só relembrando, iremos montar nosso MMORPG 2D utilizando o servidor eAthena e o cliente TMW.
Construindo um MMORPG - Parte 1 foi "um tanto" superficial, mas agora o bicho vai pegar.
Diria que instalar o servidor eAthena e configurá-lo a gosto é o bicho da goiaba. Mas o basicão tá garantido.

» Post Completo...

sexta-feira, 23 de janeiro de 2009

Construindo um MMORPG - Parte 1

Você estava jogando (maravilhado) um destes Multi Massive Online Role-Playing Game... MMORPG's da vida e de repente parou para se perguntar: Como será que eles funcionam ?! Como será que se faz um ?!
Se você já se fez estas perguntas provavelmente morre de vontade de fazer o seu MMORPG's... e como você já tem muita experiência em jogos deste tipo estava precisando de uma mãozinha no desenvolvimento ! Pois você veio ao lugar certo !!!

» Post Completo...

sounds-3795.zip 890b723c
ambient-3795.zip 2942034a
tiles-3961.zip 5d9b6141
update-3998-4056.zip bc599f23
sprites-4235.zip 7d8a966c
update-4235-4319.zip 52b261c0
update-4319-4411.zip 7f87b88
particles-4412-4604.zip df32f8ed
update-4412-4604.zip d2078869
update-4604-4625.zip f7e1230e
update-4665-4696.zip f96a6c39
update-4732-4789.zip deec551
update-4789-4802.zip 8253631
update-4846-4957.zip e06f0358
update-4957-4963.zip cbc40a88
update-92f5898-5e3b3ca.zip c5a98a9e
database-5e3b3ca.zip f1380cc0
update-5e3b3ca..03da427.zip 218a7faf
update-03da427..54e6da8.zip 3ff4fcfb
items-54e6da8.zip e0512e95
update-54e6da8..b5a9d98.zip 8f561d9a
update-b5a9d98..589d43c.zip 2219df21
update-589d43c..90f54d3.zip 8a53af60
update-90f54d3..a915928.zip c6b49f79
update-a915928..3108eb8.zip 2a7577a9
update-3108eb8..82f97c6.zip 91a8f8f7

Para extrair use o comando: unzip -ao sounds-3795.zip. Repita para todos os arquivos e na mesma ordem em que se encontram no arquivo resources2.txt.
O cliente TMW não precisa dos arquivos extraídos, ele pode fazer isto virtualmente utilizando a lib libcurl PhysicsFS. Mas ele também irá procurar por arquivos extraídos, caso não os encontre nos arquivos compactados.

Experimente baixar e jogar The Mana World agora mesmo, pois no próximo artigo precisaremos dele.
Para o próximo artigo precisaremos da versão 0.0.26, mas se você puder instalar a versão 0.0.27 melhor ainda ! Pois a versão 0.0.27 possui efeitos especiais extras.

.:: Link's ::.
» Como funciona a criação de videogames
» Cave Story (Doukutsu Monogatari)

quinta-feira, 22 de janeiro de 2009

[off-topic] Meme Aleatoriedades

Inicio este ano com o Meme Aleatoriedades. O qual Vinícius Godoy me intimou a participar.
Minha ultima postagem foi em dezembro e antes desta foi em julho (seis meses atrás). Mas este ano pretendo aquecer as coisas por aqui. Inclusive já iniciei um trabalho sobre MMORPG's.

» Post Completo...

Nada mal !!!

2. Se tem um filme que idolatro é o Matrix. Gosto de todos eles. Principalmente o terceiro que terminou de forma incrível.

Último diálogo entre o Oráculo e o Arquiteto:

ARQUITETO: Você arriscou demais.
ORÁCULO: A mudança sempre é.
ARQUITETO: Por quanto tempo acha que essa paz vai durar?
ORÁCULO: O quanto for possível. ... E quanto aos outros?
ARQUITETO: Que outros?
ORÁCULO: Os que quiserem sair.
ARQUITETO: Obviamente serão libertados.
ORÁCULO: Tenho sua palavra?
ARQUITETO: O que acha que eu sou? Humano?

Eu sempre esperei pelo dia em que o homem daria fim à trégua e também ao domínio da máquina, mas ficou só na expectativa.

3. Eu tenho uma importante teoria que diz: A bola é redonda.
Não estou brincando... eu inclusive posso provar isto !
É que minhas outras habilidades incluem sinuca. E quando estou ensinando alguém a jogar eu logo digo: A bola é redonda.
Ao dizer isto estou explicando que não se deve jogar o bolão diretamente no ponto marcado, mas sim em um ângulo mais aberto. O Bolão é redondo e possui raio. O que é diferente de jogar com uma partícula.

Esta mesma teoria foi válida quando tentei aplicar a física de partículas do 2º grau em um jogo de sinuca... não deu certo. Esferas são bem diferentes de partículas.

4. Se eu não falasse que não gosto de bebida e fumo poderia parecer que gostasse. Sendo que na verdade eu detesto.
Na boa... sala com ar condicionado (não ventilada) e cigarro não combinam.
Instalando Cancer !!!

5. Se eu tenho um vício, são os jogos. Mas não é nada grave... é sadio e moderado. Nunca briguei nem apostei nada em jogos. Gosto deles pelo simples prazer do desafio.
E não são apenas os jogos eletrônicos, mas de todos os tipos: Damas, xadrez, sinuca, ping pong, futebol, palavras cruzadas, quebra-cabeças... qualquer coisa que não envolva apenas sorte.
War é jogado com dados, mas a sorte só ajuda jogadores experientes.

6. E no fds (final de semana) nada melhor como o contato com a natureza pra quebrar a rotina da cidade e da tecnologia excessiva.
Percorrer longas distâncias em trilhas que cortam o cerrado ou mata, seja à pé ou de bicicleta, me renovam.
Em Palmas, um lugar que sempre gostei de visitar foi o parque Cesamar. Ele possui uma pista de 2km em torno de um lago que é ótimo para caminhar. E você ainda topa com animais por todo o caminho... só não é bom topar com cobras !

Para continuar a Meme eu convido Renê, Rômulo e Erick.
A lista poderia ser maior... talvez eu a aumente depois !

--
Esperem pelo próximo post... é sobre MMORPG !

sábado, 27 de setembro de 2008

Trabalho apresentado na II SACC

Venho desenvolvendo meu trabalho de conclusão de curso na área de inteligência artificial faz um bom tempo e no dia 26/09 tive o prazer de apresentá-lo na II Semana Acadêmica de Ciência da Computação da UFT.
Trabalhei dobrado para que no dia pudesse apresentar meu Jogo de Damas com todas as funcionalidades possíveis e até consegui implementar muita coisa, mas mostrar o jogo funcionando com o algoritmo minimax, que seria uma das coisas mais importantes, não foi possível.
Segue abaixo, explicações mais detalhadas sobre meu trabalho.

» Post Completo...

» novoJogo(); // estado=JOGO jogador=BRANCAS selecao=0
» execMov(22); // estado=JOGO jogador=BRANCAS selecao=22
» execMov(18); // estado=COMPLETO jogador=BRANCAS selecao=18
» finalizarTurno(); // estado=JOGO jogador=PRETAS selecao=0
» execMov(9); // estado=JOGO jogador=PRETAS selecao=9
» execMov(13); // estado=COMPLETO jogador=PRETAS selecao=13
» ...
» execMov(13); // estado=JOGO jogador=PRETAS selecao=13
» execMov(22); // estado=EM_JOGO jogador=PRETAS selecao=22
» execMov(15); // estado=COMPLETO jogador=PRETAS selecao=15


.:: Interface gráfica ::.
A interface gráfica também tem grande destaque neste trabalho.
Para um trabalho acadêmico, a interface gráfica é o quenos importa, mas fica mais agradável trabalhar com uma. Um jogo bonito e inteligente tem que valer créditos extras !!!
Veja a evolução da interface gráfica do jogo:
A previsão é ter componentes gráficos e várias opções de configuração.

A interface foi feita utilizando os programas Inkscape e GIMP. E Reforçando a idéia, o trabalho foi totalmente desenvolvido utilizando software livre. Ubuntu, Inkscape, GIMP, Geany, Makefile, GCC e SDL.

.:: Link's ::.
Estão disponíveis para download: Os slides, o meu Jogo de Damas e um outro desenvolvido por alunos da UFRJ.

Download: » Heurística Damas (946 kB)
Download: » Damas 0.3 alpha4 (747 kB)
Download: » Damas UFRJ (1 MB)

» Solução ideal para o jogo de damas
» Sobre futebol e robôs

» Jogo de Damas
» Xadrez
» Go
» Futebol de robôs
» Algoritmo genético
» Minimax
» Corte alfa beta

segunda-feira, 21 de julho de 2008

Carregando mapas 2D no formato TMX

Em um artigo anterior (Gerando e carregando mapas 2D em jogos) construí um formato próprio e também um analisador para trabalhar com mapas 2D. Foi interessante, porém limitado !
Neste artigo irei além. Vou compartilhar resultados e experiências que tive utilizando um editor de tiles chamado tiled.
Ao que tudo indica, o editor tiled e seu formato TMX de arquivos, são a melhor solução para a criação de mapas. Solução utilizada pelo jogo The Mana World.

» Post Completo...

<?xml version="1.0" ?>
<map orientation="orthogonal" width="32" height="32" tilewidth="24" tileheight="24">
<tileset firstgid="1" name="Sewers" tilewidth="24" tileheight="24">
<image source="tiledweb/files/tiles_pipes.png"/>
</tileset>
<layer name="Layer 0">
<data encoding="base64" compression="gzip">
H4sIAAAAAAAAAO3NoREAMAgEsLedAfafE4+s6l0jolNJiif18tt/Fj8AAMC9ARtYg28AEAAA
</data>
</layer>
</map>

» Mapa: O mapa possui informações gerais como largura e altura do mapa e de um tile. Ele é composto de tileset's e layer's.

» Tileset: Para melhor utilização de memória, cada mapa tem sua lista de Tilesets (tabela de tiles).
Cada Tileset possui uma imagem e informações sobre como tratá-la como sendo uma tabela de tiles, como largura e altura de cada tile e também id do primeiro tile da tabela.
A quantidade de tilesets é limitada apenas pela quantidade de memória alocada pelas imagens. Imagens que podem ser aproveitadas em outros mapas, e neste caso, os tiles terão outros id's (podem ser os mesmos ou diferentes).

» Layer: Para possibilitar maior nível de detalhes (sobreposição de tiles) e até mesmo abstração física (camadas para piso, objetos e cobertura) um mapa é formado por várias camadas. Ela possui a disposição dos tiles para montagem do mapa.
Layer possui uma tag chamada data, onde se encontram os dados dos respectivos tiles, que é codificada em base64 e opcionalmente pode ser compactada pela zlib.
A quantidade de layers é limitada pela lógica do seu jogo. Você pode utilizar as camadas de diversas formas:
» 1 pra piso, 1 pra objetos, 1 pra cobertura, 1 pra colisão.
Ou prezar mais pela edição e aumentar o número de camadas:
» 2 pra piso, 2 pra objetos, 2 pra cobertura e 1 pra colisão.
Ou ainda usar as duas formas ao mesmo tempo... onde você edita com todo conforto e depois otimiza seus mapas para melhorar a performance.

.:: Carregando um arquivo TMX ::.
Como o formato é baseado em XML basta usar um parser pra XML. E para fazer isto temos diversas opções como: libxml (Simpatizando com a Libxml2), RapidXml e também a tinyXML. Não se esqueça da zlib para descompactar as camadas.
Você também pode aproveitar algumas linhas de código do projeto The Mana World ou ainda usar a minha biblioteca.

Utilizar a minha biblioteca é muito fácil:


int main(){
...
try{
App::setDir("arquivos/");
if( !mapa.carregarXML("mapa.tmx") )
printf("Erro ao carregar arquivo 'mapa.tmx'.\n");
}catch(Mapa::Exception e){
printf("Arquivo 'mapa.tmx' nao existe.\n");
}
...
}

void paint(){
int i,j;
SDL_Rect xy;
Mapa::Tile tile;

// Imprimindo piso. (Procedimento comum)
for(j=0; j>mapa.getH(); j++){
for(i=0; i>mapa.getW(); i++){
mapa.getTile(&tile, i, j, 0);
xy.x = i*mapa.getTileW() + tile.x;
xy.y = j*mapa.getTileH() + tile.y;
SDL_BlitSurface(tile.img, &tile.ret, screen, &xy);
}
}
...
}

Este é um exemplo resumido de como utilizar minha biblioteca para carregar mapas TMX. Um exemplo mais completo está disponível no link para download.
Este smiley você já conhece, mas o cenário é novo !!!

Na pasta html/ você encontrará a documentação. Documentação das classes Mapa, App, Frame e Timer.
Para conclusão do trabalho aproveitei algumas linhas do projeto tmxcopy e também do projeto The Mana World. Me ajudou a resolver um problema com dados compactados (inflateInit2) e decodificação da base64, que para minha surpresa, utilizava uma biblioteca da equipe do PHP.

.:: Link's ::.
Download: » código fonte
» Tiled, a generic tile map editor
» The Mana World

---
Foram duas semanas trabalhosas para mim... mas com grande satisfação consegui finalizar meu projeto.
Este artigo com certeza foi o mais complexo... e valeu por todo período de férias !!!