Mostrando postagens com marcador programação. Mostrar todas as postagens
Mostrando postagens com marcador programação. Mostrar todas as postagens

domingo, 5 de janeiro de 2014

Tutorial LibGDX - Configurar ambiente de desenvolvimento de jogos Android

Para me lembrar dos procedimentos de como configurar um ambiente de desenvolvimento de jogos Android com LibGDX, resolvi fazer este tutorial.

A LibGDX é um framework de desenvolvimento de jogos para Android, PC, HTML e IOS escrito em Java. As vantagens são o custo, pois é distribuído sobre a licença Apache 2.0, tem suporte para funcionalidades gráficas 2D/3D, de áudio, matemática/física e touch screen.

Esta configuração foi feita em um ambiente Windows 7.

Inicialmente precisamos baixar alguns arquivos:
Depois de baixar os arquivos teremos o seguinte:
  1. adt-bundle-algumacoisa.zip
  2. libgdx-algumacoisa.zip
Descompacte o número 1 e acesse o diretório eclipse, e execute eclipse.exe. Irá abrir uma tela para selecionar o diretório padrão que será salvo os projetos. E seguida clique na barra de ferramentas em Window e clique na opção Android SDK Manager (conforme imagem abaixo).


Uma janela abrirá para fazer a atualização das dependências para compilar sua aplicação Android, com esta opção também é possível selecionar outras versões da API do Android para compilar.

Agora descompacte a opção 2 (libgdx-algumacoisa.zip), e execute o gdx-setup-ui.jar, para evitar bugs, por exemplo, use via linha de comando (cmd) assim:

java -jar D:\libgdx\gdx-setup-ui.jar

Este executável ajuda criar projetos pré configurados para iniciar o desenvolvimento no ADT.


Clique em Create e a tela abaixo irá aparecer:



Devemos configurar algumas opções do projeto, veja na imagem abaixo o exemplo, o mais importante é Destination (onde serão criados os projetos) e quais os tipos de projetos que serão criados, no meu caso desmarquei html e ios project:


Em LIBRARY SELECTION, devemos informar onde está o arquivo libgdx-algumacoisa.zip, e opcionalmente caso você for usar Physics Body Editor ou Universal Tween Engine que não são obrigatórios.


Se no campo GENERATION estiver uma mensagem verde é que sua configuração está OK. Agora clique em Open the generation screen.


Na próxima tela clique no botão Launch! para gerar os projetos.

Para finalizar, com o ADT aberto, clique em File->Import...


Na próxima tela selecione General conforme a imagem:


E finalmente selecione o diretório onde os projetos foram criados, conforme a imagem abaixo, e clique em Finish:


Agora temos um ambiente de desenvolvimento de jogos para Android com LibGDX.


Para estudar melhor as funcionalidades do LibGDX consulte a documentação no GitHub e WIKI do projeto.

No site do LibGDX existem diversos jogos disponíveis no Google Play para testar.

Referências:
Site LibGDX
Canal no Youtube

sexta-feira, 28 de dezembro de 2012

Megaman 8 Remake com Tululoo HTML 5 Game Maker

Comecei a um pequeno projeto com a engine de jogos Tululoo, esta engine gera jogos em HTML5, a programação é toda em javascript. Também estou usando GIMP para editar as imagens que encontrei no site da RETROGAMEZONE.

Tá curioso para ver um jogo em HTML5? Então acesse a versão inicial do meu projeto Megaman 8 Remake (tá bem tosco ainda só funciona direcionais direita esquerda), inicialmente será apenas uma fase de bônus para testar os recursos do Tululoo.

Em breve mais atualizações...

sexta-feira, 28 de maio de 2010

MS SQL Server - Alterar formato da data

Sei que isso é algo muito simples de fazer, mas na dúvida posso precisar de novo, então vou compartilhar minhas soluções.

Tive que fazer uma consulta no banco de dados, MS SQL Server, e me deparei com o formato do tipo datetime retornado:
2010-01-01 00:00:00.000
que equivale
ano-dia-mês hora:minuto:segudos.milisegundos


Mas na verdade precisava apenas de:
dia/mês/ano ou 01/01/2010


Falaram para que convertesse o valor retornado da consulta(2010-01-01 00:00:00.000) com tratamento de string dentro do meu código para o resultado esperado(01/01/2010), mas não gostei muito desta solução, então segue o minha solução:

DECLARE @myval datetime
SET @myval = '2010-01-11 00:00:00.000'


SELECT cast(day(@myval) as varchar(2))+'/'+
cast(month(@myval) as varchar(2))+'/'+
cast(year(@myval) as varchar(4))

Mas o resultado:

1/11/2010


Obs: Faltou o zero a esquerda.

Depois descobri que poderia ter feito isto de outra maneira:

DECLARE @myval datetime
SET @myval = '2010-01-11 00:00:00.000'
 
SELECT convert(char(10), @myval, 103)

Resultado:

01/11/2010


Observe que o 103 é o código do padrão da data, veja referência 2 para tabela de códigos.

Referências:
1 - DateFormat for SQL Server - http://www.petefreitag.com/item/687.cfm
2 - CAST and CONVERT - http://msdn.microsoft.com/en-us/library/aa226054(SQL.80).aspx

quarta-feira, 14 de abril de 2010

Arquivo de Log de dados rápido com PHP

Gerar um log de dados ou uma saída de texto para um arquivo é bem simples no PHP, com a função file_put_contents você vai precisar apenas do nome do arquivo e o conteúdo para colocar neste arquivo.

file_put_contents("nomedoarquivo", "conteudo");

Para incrementar conteúdo neste arquivo, coloque um terceiro parâmetro:

file_put_contents("nomedoarquivo", "conteudo", FILE_APPEND);

FILE_APPEND faz com que seja adicionado o conteúdo no fim do arquivo.

Referência:
Log de dados
file_put_contents

quarta-feira, 7 de outubro de 2009

DataTables: Plugin JQuery para tabelas "Fácil"

Gostei muito deste plugin do JQuery, pois transforma uma simples tabela em uma tabela cheia de recursos.

Ingredientes:
-JQuery
-Plugin DataTables do JQuery

Como fazer:
Para organizar crie uma pasta chamada includes, adicione o arquivo jquery.js e coloque a pasta media descompactada do pacote do Plugin DataTables.

No seu arquivo index.html coloque:

-CSS do Plugin DataTables

<style type="text/css" title="currentStyle">
@import "includes/media/css/demo_page.css";
@import "includes/media/css/demo_table.css";
</style>



-Cabeçalho JQuery

<script type="text/javascript" language="javascript"
src="includes/jquery.js"></script>



-Cabeçalho Plugin DataTables

<script type="text/javascript" language="javascript"
src="includes/media/js/jquery.dataTables.js"></script>



-Inicialização da tabela

<script type="text/javascript" charset="utf-8">
$(document).ready(function() {
var tabela = $('#tabelaTeste').dataTable();
} );
</script>



-Crie uma tabela com o mesmo id da inicialização, essa tabela precisa ter algumas tags html para mostrar o conteúdo corretamente:


<table id="tabPerfil" class="display">
<thead>
<tr>
<th>Nome</th>
<th>Local</th>
<th>Data</th>
</tr>
</thead>
<tbody>
<tr>
<td>Fulano</td>
<td>Valhalla, Av. 5</td>
<td>03/09/1934</td>
</tr>
</tbody>
<tfoot>
<tr>
<th>Nome</th>
<th>Local</th>
<th>Data</th>
</tr>
</tfoot>
</table>



- thead para mostrar o Cabeçalho, com uma linha(tr) e as colunas(th)
- tboby é o conteúdo da tabela, com uma linha(tr) e as colunas(th), terá que ter o mesma quantia de colunas definido no thead
- tfoot (opcional) mesmo esquema do thead mas fica no rodapé

Coloquei o conteúdo deste tutorial neste arquivo anexo.

Vantagens do Plugin DataTables:
- Campo de busca para filtrar conteúdo;
- Ordenar campos com um clique;
- Paginação;
- Selecione a quantidade de linhas que aparecerá;
- Internacionalização

Veja mais no site do plugin DataTables.

terça-feira, 9 de dezembro de 2008

grep e pdftotxt "Tentam" descobrir a concorrencia do Concurso SECAD TO 2008

OAnexo I do Concurso Público para Provimento de Cargos do Quadro Geral de Servidores do Poder Executivo do Estado de Tocantins - 2008, que esta no site da Unitins, contém a relaçao de todos os inscritos deste concurso e suas respectivas vagas e código da vaga. Mas esqueceram de colocar uma relação com a concorrencia (candidatos / vaga).
Contar cargo por cargo em mais de 2100 paginas é um trabalho pra doido.
Para facititar esta tarefa temos duas ferramentas que podem ajudar muito.
Uma é pdftotext, que converte um arquivo de extencao PDF para texto puro, faça assim:
pdftotext arquivo.pdf arquivo.txt
Para nosso caso podemos utilizar assim
pdftotext [63364420737614750]anexoI.pdf anexoI.txt
Agora com o comando grep tem a capacidade de buscar e contar a ocorrencia de "palavras" dentro de arquivos de texto puro. Por exemplo vamos verificar a ocorrencia do cargo Analista em Tecnologia da Informação, dentro do arquivo anexoI.txt desta maneira
grep --count "Analista em Tecnologia da Informação"
anexoI.txt
E a resposta foi 464, ou seja, 464/107(vagas) aproximadamente 4 candidatos por vaga...
Ops! Hei, mas tem vaga para Analista em Tecnologia da Informação em vários outros Municipios!
Essa foi apenas uma tentativa de data mining frustada... mas pelo menos pode-se descobrir a quantidade de inscritos por cargo.
O problema está na conversão que o pdftotext faz, pois os dados estão tabulados (em tabelas), quando o pdftotext pega o texto de uma tabela ele passa primeiro na primeira coluna e depois vai para a próxima coluna. Se a primeira coluna tem nomes, os nomes são colocados um do lado do outro na mesma linha.
Observação: os comandos grep e pdftotext estão disponíves para GNU/Linux, recomendo o livro Comandos do Linux da Novatec

sexta-feira, 16 de maio de 2008

Como criar um pacote de instalação deb (Ubuntu)

Os arquivos de extensão DEB, são pacotes de instalação de programas para sistemas operacionais derivados do Debian, como o Ubuntu.
Lembrando que é possível gerar um pacote de instalação e incluir as dependências de bibliotecas necessárias, ou seja, gerar um pacote com apenas o programa executável e na hora de instalar em outro computador a instalação irá incluir o download e instalação destas bibliotecas.

Para iniciar o processo, precisamos de um software para instalar, então escolhi o jogo DR Quebra- Cabeça do meu amigo DiogoRBG.

A estrutura inicial da distribuição do jogo não está tão organizada(executável windows com linux), mas vou pegar somente o que será utilizado:

Conforme a figura acima, temos:
1 - Arquivos auxiliares, imagens e outros para que o jogo funcione;
2 - Binário, executável ou o próprio jogo compilado;
3 - Licença de uso ou algum aviso;

Esta ordem acima não é muito importante para criar o pacote de instalação DEB, mas a próxima seqüencia deve ser feita.

Crie uma pasta principal(exemplo: /drquebracabeca), e crie dentro dela uma pasta com o nome DEBIAN, isso mesmo tudo maiúsculo, crie também uma seqüencia de diretórios onde o programa será instalado (exemplo: /usr/lib/drquebracabeca)

Observe que na figura coloquei algumas pastas e arquivos extras, mas vou explicar como fiz tudo. Acredito que a forma como criei este pacote pode esclarecer algumas questões.

Na pasta DEBIAN coloque um arquivo com o nome control, o conteúdo deste arquivo contém as descrições e parâmetros necessários para construir o pacote de instalação. Verifique o que coloquei no control:

Package:drquebracabeca
Priority: optional
Version:0.1.1
Architecture:i386
Maintainer: Diogo RBG
Section: misc
Installed-Size: 720
Depends: libsdl1.2debian(>=1.2), libsdl-gfx1.2-4(>=1.2-4),
libsdl-image1.2(>= 1.2), libjpeg62, libpng12-0(>= 1.2-0),
zlib1g
Description: DR Quebra-Cabeça
No DR Quebra-Cabeça você tem a liberdade de montar um quebra
cabeça como quiser!
Não existem posições determinadas para cada peça, você só
precisa juntar uma à outra e pronto!

Pacote DEB criado por http://renedet.blogspot.com

Alguns parâmetros importantes:
Package é o nome do programa, procure manter o mesmo, pois quando mudar a versão a mais nova substituí a antiga;
Version é a versão do programa, mude sempre que lançar uma nova versão;
Architecture é a arquitetura do processador que o programa foi desenvolvido;
Maintainer o desenvolvedor que criou e distribuí o programa;
Installed-Size tamanho do programa (em Kb) depois que ele for instalado;
Depends são todas as dependências e bibliotecas necessárias para que o programa funcione;
Description é a descrição sobre o software, para que serve e outras informações uteis para quem vai instalar o programa;

O comando básico para gerar o pacote de instalação chama-se
dpkg-deb, utilize da seguinte forma:
dpkg-deb -b pastadopacote/ nomedopacote.deb


Exemplo:
dpkg-deb -b drquebracabeca/ drquebracabeca.deb


Extras:
Dentro da pasta usr coloquei mais duas pastas: bin e share
A pasta bin contém um script bash chamado drquebracabeca.sh, que será o nosso executável, e ele contém os comandos:

#!/bin/bash
cd /usr/lib/drquebracabeca/
./drquebracabeca
Fiz este script shell, pois na pasta da instalação do jogo /usr/lib/drquebracabeca contém uma pasta de recursos para o jogo funcionar, como as imagens do jogo.

Em share temos a pasta applications, que contém o arquivo drquebracabeca.desktop que descreve o botão para iniciar o jogo em Aplicações->Jogos->DR Quebra Cabeça, o conteúdo deste arquivo:

[Desktop Entry]
Comment=DR Quebra Cabeça
Name=DR Quebra Cabeça
Exec=/usr/bin/drquebracabeca.sh
Icon[pt_BR]=/usr/lib/drquebracabeca/arquivos/icone.ico
Encoding=UTF-8
Terminal=false
Name[pt_BR]=DR Quebra Cabeça
Comment[pt_BR]=DR Quebra Cabeça
Type=Application
Icon=/usr/lib/drquebracabeca/arquivos/icone.ico
Categories=Game;


As opções importantes para este atalho:
Exec é o comando para executar o jogo;
Categories coloque Game se for um jogo, e já estará no item Jogos de Aplicações;

Instalador DR Quebra Cabeça Ubuntu

Links adicionais de como criar um pacote deb:
http://diegohs25.blogspot.com
http://www.vivaolinux.com.br
http://synthesize.us

sexta-feira, 9 de maio de 2008

CakePHP 1.2 Scaffolding em Português

Scaffolding é uma estrutura provisória para auxiliar na construção de algum sistema, no caso do CakePHP ele funciona gerando listas e formulários que permitem inserção, atualização e exclusão de dados.
Como por padrão o CakePHP 1.2 tem o scaffold e inglês, fiz algo bem simples, e que pode ajudar quem está começando a utilizar este framework, traduzi o scaffold no braço, aqui estão os Arquivos, apenas descompacte e coloque os arquivos no diretório cake->libs->view da sua aplicação, conforme a figura abaixo:


Para remover a visualização dos resultados da query, alterei o arquivo dbo_source.php (comentei linhas 389 até 401) que está em cake->libs->model->datasources.
O cabeçalho padrão fica no arquivo default.ctp em cake->libs->view->layouts.
Veja os resultados abaixo.

Antes:


Depois:

Onde fica a página inicial?
Por padrão encontrei home.ctp em app->views->pages

Estou fugindo um pouco da forma padronizada, que é orientada nos tutoriais para CakePHP, mas ao verificar o conteúdo dos arquivos edit.ctp, index.ctp e view.ctp será possível entender um pouco como o scaffold funciona internamente.

Um bom tutorial de scaffold está em:
http://grahambird.co.uk/cake/tutorials/scaffolding.php

terça-feira, 25 de março de 2008

Como Apagar "Todos" Arquivos, com as Extensões Desejadas, no Windows XP

Isso pode parecer uma tarefa fácil...é só localizar todos os arquivos (na extensão desejada) com a ferramenta de busca depois Ctrl+A para selecionar tudo e Shift+Del e Sim. Pronto resolvido!

Mas vamos fazer isso de uma maneira diferente. Procurar não tem sentido se já sabemos o que vamos fazer com o arquivo, então os próximos passos são para aqueles que estão interessados em aprender algo novo, nem tão 'novo' assim.

Para este processo vamos utilizar alguns comandos básicos do DOS, que podem ser testados da seguinte maneira: Com o Desktop visível clique em Iniciar -> Executar -> Digite cmd e aperte Enter. Uma tela preta vai aparecer, agora teste os seguintes comandos para se habituar.

md
criar diretorio (md teste)
cd
para entrar (cd teste) ou sair (cd ..) de um diretório
dir listar arquivos e diretórios
del para apagar arquivos ou diretórios (del teste)
echo imprime um texto (echo oi)

No final deste artigo temos links de sites descrevendo melhor os comandos do DOS.

Aprender a lidar com a linguagem de linha de comando pode ser didático, pois trata-se de uma ferramenta que pode ajudar automatizar alguns processos que tomam tempo para ser executada. Como exclusão ou alteração de nomes de arquivos em varias pastas, com dezenas de Gigabytes de informação. Até Backup (cópia de segurança) pode ser feita de uma maneira mais fácil.

Antes de continuar leia:
Este método que será apresentado pode ser um pouco perigoso, por causa do comando DEL. Não me responsabilizo, e nem sugiro utilizar os comandos aqui descritos para fins maliciosos. Para segurança faça os testes em um ambiente controlado.

Para automatizar o processo, podemos colocar o código abaixo em um arquivo de extensão BAT: "apaga_ext.bat"

@echo off

set arquivos=*.mp3 *.wav

echo Excluindo Arquivos %arquivos%

if exist %arquivos% del /F /S /Q %arquivos%

pause


Este arquivo contém uma seqüencia de comandos que serão executados de cima para baixo.
Observe o que cada comando faz:

@echo off

Não imprime a mensagem padrão na inicialização, executa sem avisar.

set arquivos=*.mp3 *.wav

A função set define o valor da variavel local arquivos, * na frente da extensão .mp3 quer dizer tudo, ou seja, qualquer palavra que vier.

echo Excluindo Arquivos %arquivos%

Imprime o aviso: Excluindo Arquivos *.mp3 *.wav

if exist %arquivos% del /F /S /Q %arquivos%

Se o arquivo na extensão mp3 ou wav existir nas pastas onde o comando foi executado, estes serão apagados sem aviso!

pause

Uma pausa quando tudo terminar :)

Tutoriais Comandos do DOS:
http://www.users.globalnet.co.uk/~jchap/tvdt.htm
http://www.glue.umd.edu/~NSW/ench250/dostutor.htm
http://www.tnd.com/camosun/elex130/dostutor1.html
http://www.google.com.br/search?q=dos+tutorial

segunda-feira, 17 de março de 2008

Jogos e Programação: Classes

Este artigo originou a partir de uma conversa que tive com DiogoRBG, para descobrir como funciona uma luta entre dois personagens, na visão de um programador.

Lembrando que podem existir muitas variações nas fórmulas, isto devido aos parâmetros que serão utilizados.

Podemos começar pela classe Personagem:

class Personagem{
int energia; //energia vital
int força; //pontos de ataque
int defesa; //pontos de defesa
int sorte; //valor que influi no ataque e na defesa

function atacar(Personagem * oponente){
oponente->energia = oponente->energia -
( (this->força * (rand()%this->sorte)) /
(oponente->defesa + (rand()%oponente->sorte)) );
}
}


Exemplo:

Instância dos personagens

Personagem * Guerreiro;
Personagem * Arqueiro;


Definindo os valores das propriedades

Guerreiro->energia = 200;
Guerreiro->força = 150;
Guerreiro->defesa = 130;
Guerreiro->sorte = 10;

Arqueiro->energia = 100;
Arqueiro->força = 100;
Arqueiro->defesa = 50;
Arqueiro->sorte = 80;


Atacar!!!

Guerreiro->atacar(Arqueiro);


Analisando minunciosamente a execução da função atacar, temos:

oponente->energia = oponente->energia -
( (this->força * (rand()%this->sorte)) /
(oponente->defesa + (rand()%oponente->sorte)) );


Que transformou-se em:

Arqueiro->energia = Arqueiro->energia -
( (Guerreiro->força * (rand()%Guerreiro->sorte)) /
(Arqueiro->defesa + (rand()%Arqueiro->sorte)) );


Substituindo os valores:

Arqueiro->energia = 100 - ( (150 * (rand()%10)) /
(50 + (rand()%80)) );


De uma maneira mais prática podemos ter esta visão:

Defesa do Arqueiro com Máxima Sorte, se o valor de retorno (rand()%10) for igual 5 e (rand()%80) for igual 80 temos:

Arqueiro->energia = 100 - ( (150 * 5) / (50 + 80) );
Arqueiro->energia = 100 - ( 750 / 130 );
Arqueiro->energia = 100 - 6; //arredondando 5,7 vai pra 6
Arqueiro->energia = 94;


Defesa do Arqueiro Sem Sorte, se o valor de retorno (rand()%10) for igual 10, (rand()%80) for igual 0 temos:

Arqueiro->energia = 100 - ( (150 * 10) / (50 + 0) );
Arqueiro->energia = 100 - ( 1500 / 50 );
Arqueiro->energia = 100 - 30;
Arqueiro->energia = 70;


Observações:
1) rand() está no cabeçalho stdlib.h, a função retorna um valor randômico entre 0 e 1.
2) A classe Personagem está fora da padronização, onde uma instância altera o valor da outra instância de forma direta.
3) O Arqueiro pode parecer fraco, mas número máximo de pontos de ataque do Guerreiro é 1500 e de defesa 140, já do Arqueiro ataque é 8000 e defesa 130. Verifique mais informações nestaTabela.

Para entender melhor será necessário jogar Final Fantasy Tatics, ou Vandal Hearts ou outro RPG.

segunda-feira, 24 de dezembro de 2007

NetBeans C/C++ Pack e Pthread





NetBeans cada dia melhor, agora pode-se utilizar esta ferramenta para auxiliar na programação com C/C++, assim como outras linguagens: Java(Padrão), PHP e Ruby.

Para quem está começando a utilizar o NetBeans C/C++ Pack, caso queira utilizar a biblioteca pthread poderá encontrar o seguinte erro na compilação:

O erro undefined reference to 'pthread_create' aparece, pois o Netbeans está executando o seguinte comando:

gcc teste teste.c



Para compilar utilizando a biblioteca pthread é necessário passar o parâmetro -lpthread, como no exemplo:

gcc -lpthread teste teste.c



No NetBeans, clique com botão direito do mouse sobre seu Projeto Principal e selecione Properties, em seguida Linker->Command Line e na linha Additional Options coloque no campo em branco -lpthread


Código Fonte Exemplo:


#include <pthread.h>

void* threadfunc(void* a)
{
// processando alguma coisa

return a;
}

int main()
{
int argumento = 42;

// Inicializando thread
pthread_t myThread;
pthread_create(&myThread,NULL,threadfunc,(void*)(argumento));

// ok, a thread já está executando

/* coloque aqui outro código para ser executado
em paralelo com a thread criada*/

return 0;
}


Referências:
https://computing.llnl.gov/tutorials/pthreads/
http://www.netbeans.org/features/cpp/index.html
http://www.slacklife.com.br/forum/viewtopic.php?p=70716