terça-feira, 27 de outubro de 2009

Assassin's Creed Lineage I

- Está no ar o primeiro dos 3 episódios da minissérie de Assassin's Creed: Assassin's Creed Lineage.
O que era para ser apenas um vídeo promocional de curta metragem foi produzido com a dedicação dada a um "blockbuster". A qualidade realmente impressiona. Tanto o roteiro, quanto a qualidade gráfica, que ficou por conta do Hybride Studios, uma divisão da Ubisoft, que foi responsável pelos efeitos de 300 e Sin City.


- Sinopse:
Quando o Duque de Milão é brutalmente assassinado, o Assassino Giovanni é despachado para investigar. As respostas que ele descobre embaraça as famílias mais poderosas da Itália e chega a alcançar o próprio Vaticano. Conforme Giovanni se aproxima da verdade, ele se torna a presa. Ele deve expor as conspirações antes que ele se junte à crescente lista de vítimas. 
Os acontecimentos de Lineage precedem a história de Assassin's Creed II revelando as tramas de uma Itália do século 15 através dos atos do pai de Ézio, Giovanni.


Episódio #1:
1476, Florença, Giovanni Auditore, um assassino, tenta impedir uma conspiração contra um dos aliados de Lorenzo de Medicis. A investigação o leva a Milão, onde ele tenta prevenir que o pior aconteça.
(Sinopse retirada da descrição do filme e traduzida por mim)


Confira o primeiro episódio abaixo:



- Confira também a entrevista com Murray Pannel, diretor de marketing da 
Ubisoft UK, sobre o curta:
Clique aqui para ler a entrevista
___________________________________
Offtopic:
- Assassin's Creed II já está disponível para pré venda, na versão White Edition e na versão especial de colecionador Black Edition:



sábado, 24 de outubro de 2009

Sega + Zippo


A Banpresto colocou anúncios de pré-venda dos 2 isqueiros em formato dos consoles da Sega.
Os nomes oficiais dos modelos são:
Sega Memorial Harware Zippo Lighter No. 1 - Mega Drive Model e 
Sega Memorial Harware Zippo Lighter No. 2 - Sega Saturn Model.
Aparentemente os dois são os primeiros de uma série de isqueiros da Zippo em parceria com a Sega.
Os modelos começarão a ser vendidos em dezembro.
Quem se interessou e estiver afim de encomendar pode dar uma passada no site da Net You.

Dia Internacional da Animação


Proclamado como sendo dia 28 de outubro em comemoração à primeira exibição pública de imagens animadas(desenho animado) feita no ano de 1892 por Émile Reynaud no Museu Grevin em Paris, a data é acompanhada pelo evento internacional lançado pela AFISA (Associação Internacional do FIlme de Animação) em 2002, com o apoio de grupos internacionais filiados.


No Brasil a responsável pela organização é a ACBA (Associação Brasileira de Cinema de Animação) que prepara a programação do evento.


Em Belo Horizonte o evento se espalha pela cidade começando hoje (24 de outubro), dura até o dia 1º de novembro e conta com workshops, mostra de curtas, mesa-redonda, entre outras atrações.
Confira a programação na capital mineira:

(clique para ampliar)





*Dica do prof. Arttur Ricardo

segunda-feira, 19 de outubro de 2009

ZPrinter® 650 - Impressora 3D



O novo modelo de impressora 3D da ZCorporation possibilita a impressão de objetos coloridos de até 10 x 15 x 8 polegadas (25,4 x 38,1 x 20,3 cm) sob velocidade de 2,8 cm por hora e conta com uma resolução de 600 x 540 dpi !

Apesar de já serem produzidas a quase 10 anos, pouca gente sabe da existência das impressoras 3D. E quando digo "impressão" estou me referindo à criação de objetos 3D a partir de modelagens feitas no computador e não àquela impressão comum em papel! Pode parecer coisa de ficção científica ou coisa que talvez aconteça num futuro distante, mas é real, e no presente.
Esse tipo de impressora é muito utilizada por fabricantes para visualizarem e testarem o modelo projetado tendo noção exata de proporções e funcionamento poupando um tempo enorme, que antes era gasto por um artesão especializado que recebia o projeto para que ele pudesse criar o primeiro molde !

Existem diversas impressoras e diversos métodos de construção mas, basicamente, o conceito é enviar informações para a impressora sobre volume e profundidade do objeto.
Os dois métodos mais utilizados são esses:
-Através de lâminas de polímeros coladas através de um cartucho especial de cola, que são cortadas camada por camada até assumirem a forma do objeto.
Confia abaixo um vídeo da impressora Solido3D, que usa esse método:



-Ou através de jatos do material em pó lançados do cartucho de impressão, que são unidos por outro cartucho especial com cola. Apenas por esse modo é possível a aplicação de cores na finalização do objeto.
Esse é o método utilizado pelas impressoras da ZCorporation.
Confira abaixo o vídeo de demonstração da ZPrinter 650:



De acordo com Bill Gross, chairman do Idea Lab,  o preço dessas impressoras cairá para cerca de US$ 1.000,00 dentro de 2 anos, e será possível produzir seus objetos gastando cerca de US$ 300,00 em materiais.
Hoje em dia os preços variam de US$ 5.000,00 (modelo da Desktop Factory) a US$ 86.115,00 (ZPrinter 650)


Já imaginou criar sua própria variação de Mage Knight ou Heroclix ?!
Esses dias podem estar próximos !!

sábado, 17 de outubro de 2009

C++ - Aula 02


C++  -  Aula 02
__________________________________________________
Conteúdo:
1. Introdução a Programação de Jogos com C++ (continuação)
     1.6 - Operadores
2. Pré-processador e diretivas de pré-processador
2.1 - Pré-processador
2.2 – Diretivas de pré-processador
3. Namespaces
3.1 – Utilizando a diretiva using
4. Entrada e Saída de Dados (Input/Output) (I/O)
4.1 – Arquivo de Input/Output
4.2 – Input
4.3 – Output
4.4 – Say Hello to the World!
___________________________________________________
1.6 – Operadores

Declarar e inicializar variáveis é muito útil, mas algumas vezes precisaremos fazer algumas operações com elas, como por exemplo multiplicação. Os caracteres responsáveis por essas operações são chamados de operadores. Existem os operadores lógicos, que resultam em valores lógicos (true ou false), operadores aritméticos, que operam sobre números e expressões e resultam em valores numéricos, operador de atribuição, que atribui valores às variáveis, operadores relacionais, que comparam valores entre variáveis e resultam em valores lógicos (true ou false). Abaixo segue uma série de tabelas mostrando os operadores e suas respectivas operações.

Operadores Lógicos
Operador
Operação
Descrição
&&
AND
Compara uma variável e outra
||
OR
Considera uma variável ou outra
!
NOT
Negação de uma variável
Exemplos:
(a == b) && (c == d) /* Verifica se “a” tem o mesmo valor de “b” e se “c” tem o mesmo valor de “d”. Retorna verdadeiro ou falso.*/
(a == b) || (c == d) /* Faz a mesma verificação, mas retornará verdadeiro se a primeira expressão ou a primeira forem verdadeiras */
! a /* Nega o valor contido na variável “a”. Por exemplo, se a variável “a” for do tipo inteiro e tiver o valor 1, com a negação qualquer valor diferente de 1 será tomado como true (verdadeiro).*/

Você talvez esteja se perguntando por que o texto está contido entre /* e */. Isso é chamado de comentário. Comentários são ignorados pelo compilador e servem para ajudar os programadores com notas descritivas em partes dos códigos. Para comentários de uma linha você também pode usar duas barras (//), e todo o texto contido na mesma linha após as duas barras será comentado, e conseqüentemente ignorado pelo compilador.

Operadores Aritméticos
Operador
Operação
Descrição
+
Soma
Soma o valor de 2 variáveis
-
Subtração
Subtrai o valor de uma variável de outra
*
Multiplicação
Multiplica o valor de uma variável por outra
/
Divisão
Divide o valor de uma variável por outra
%
Módulo
Divide o valor de uma variável por outra e considera apenas o resto da divisão
Exemplos;
int a, b = 10;
int Resultado;
Resultado = a+b; // Resultado: 20
Resultado = a-b; // Resultado: 0
Resultado = a*b; // Resultado: 100
Resultado = a/b; // Resultado:0
Resultado = a%b; // Resultado: 0

Reparem que é possível declarar e inicializar mais de uma variável do mesmo tipo de uma só vez.

Operador de Atribuição
Operador
Operação
Descrição
=
atribuição
Atribui à variável da esquerda o valor contido na variável à direita
Exemplo:
int a;
int b = 10;
a = b; // A variável “a” receberá o valor contido na variável “b”.

Operadores Relacionais
Operador
Operação
Descrição
> 
Maior
Compara se o valor contido na primeira variável é maior que o valor contido na segunda
>=
Maior ou igual
Compara se o valor contido na primeira variável é maior ou igual que o valor contido na segunda
< 
Menor
Compara se o valor contido na primeira variável é menor que o valor contido na segunda
<=
Menor ou igual
Compara se o valor contido na primeira variável é menor ou igual que o valor contido na segunda
==
Igual
Compara se o valor contido na primeira variável é igual ao valor contido na segunda
!=
Diferente
Compara se o valor contido na primeira variável é diferente do valor contido na segunda
Exemplos:
int a = 10;
int b = 20;
(a > b); // false
(a >= b); // false
(a < b); // true
(a <= b); // true
(a == b); // false
(a != b); // true

Além desses operadores existem os operadores bit-a-bit, que serão detalhados nos capítulos subseqüentes.
Veja aqui uma tabela completa dos operadores da linguagem.

2. Pré-processador e diretivas de pré-processador

2.1 - Pré-processador
O pré-processador é um programa que analisa o programa escrito e realiza mudanças nele baseado nas diretivas de pré-processador. Ele é rodado antes da compilação modificando o programa para que ele possa ser corretamente compilado.

2.2 – Diretivas de pré-processador
São comandos dirigidos ao pré-processador que não são compilados. As diretivas são iniciadas pelo caractere “#” e podem ser colocadas em qualquer parte do programa. As principais diretivas de pré-processador são:
#include
#define
#undef
#ifdef
#ifndef
#endif
#if
#else
#elif
Vamos passar por cada um explicando seus conceitos:

#includeDiz ao pré-processador para incluir um arquivo em determinado ponto do programa.
Sintaxe: #include "nome_do_arquivo" ou #include
Se o arquivo estiver na pasta de trabalho, ou se você quiser informar o caminho completo do arquivo use “ “. Se o arquivo já estiver nas pastas de procura do compilador use < >.
Nota: Para incluir uma pasta no caminho de busca do Visual Studio vá em Tools – Options, e clique na ramificação VC++ Directories dentro de Projects and Solutions na árvore à esquerda.

#define – Diretiva usada para definir um símbolo, para definir uma constante, ou para definir macros
Sintaxe:
Definindo um símbolo:
#define nome_do_simbolo
O símbolo definido poderá ser utilizado posteriormente para testes.

Definindo uma constante:
#define nome_da_constante valor_da_constante
A constante definida esta maneira tem a mesma função da constante explicada na aula 01.

Definindo uma macro:
#define nome_da_macro(parâmetros) expressão

Exemplo de definição de uma macro:
#define maior(X, Y) ((X > Y) ? (X) : (Y))
int teste = maior(varA, varB);

Com certeza parece confuso à primeira vista, portanto irei explicar passo a passo:
O nome da macro é “maior”, e ela recebe dois parâmetros (ficará mais fácil de entender durante as aulas sobre funções). Perceba que não é especificado o tipo do parâmetro, e que não há espaço entre o nome da macro e o parênteses. A expressão é escrita entre parênteses. ((X > Y) ? (X) : (Y)) verifica se a variável X é maior que a variável Y no trecho (X > Y). O valor retornado (isso também será melhor explicado durante as aulas sobre funções) será o valor contido em X se X for maior que Y, ou, se for menor, o valor retornado será o valor contido em Y. O valor retornado será atribuído à variável “teste”, que ativou a macro.

#undef – Apaga uma macro da tabela interna que armazena as macros.
Sintaxe:
#undef nome_da_macro

#ifdef – É uma diretiva condicional, porém, como as diretivas são processadas antes do programa só é possível a utilização de constantes e símbolos do pré-processador.
Sintaxe:
#ifdef constante_ou_símbolo
código
#endif
 O código entre #ifdef e #endif só será compilado se o símbolo ou a constante tiver sido definida

#ifndef – Idêntica à #ifdef, porém só compila o código se o símbolo ou a constante não tiver sido definida.

#endif – Encerra um bloco de código seguinte à diretiva condicional.


#if – Também é uma diretiva condicional. E o código só será compilado se a condição for verdadeira.
Sintaxe:
#if (condição)
  código
#endif

#else – Funciona apenas em conjunto da diretiva #if. O código contido na diretiva #else só será compilado se a condição fornecida na diretiva #if for falsa.
Sintaxe:
#if (condição)
  código
#else
  código
#endif

#elif  - Outra diretiva condicional. Também só funciona em conjunto da diretiva #if.Implementa a estrutura else if. Essa estrutura será melhor explicada nas aulas seguintes, sobre instruções condicionais.
Sintaxe:
#if (condição)
  código
#elif
  código
#endif

A lista de diretivas não acaba por aqui, porém essas são as mais importantes e mais utilizadas. Para uma lista completa siga esse link.As diretivas explicadas acima pertencem ao padrão ANSI.

3. Namespaces
Namespaces podem ser considerados, para maior entendimento, como uma área de código. Seu uso ajuda a organizar melhor o código e a não haver ambigüidade (já que os nomes de classes e estruturas, por exemplo, deve ser único). Um namespace restringe o escopo (“alcance”) de um nome, tornando-o significativo apenas dentro do próprio namespace.
Exemplo:
#include
std::cout << “Saida de dados” << std::endl;

O exemplo acima é usado para “imprimir” (mostrar) texto na tela do console.
cout é um objeto definido no arquivo iostream e um objeto no namespace std.
 O arquivo iostream contém métodos e classes que tratam da entrada e saída de dados e é necessário incluí-lo se quisermos usar esses métodos e classes.
 << é um operador de saída de dados (output operator). O texto entre aspas é o texto que será mostrado.
endl é um objeto também definido no arquivo iostream e também é um objeto no namespace std, e é usado para uma saída de dados referente a apertar a tecla Enter em um editor de texto (ou seja.. pula uma linha).
O prefixo std é utilizado para dizer ao compilador que eu quero utilizar os objetos cout e endl pertencentes ao namespace std. O prefixo std é seguido pelo operador “::” (operador de resolução de escopo) que, nesse caso, me permite acessar os objetos.

3.1 – Utilizando a diretiva using
A diretiva using possibilita acesso direto aos elementos de um namespace, não sendo necessário o uso do prefixo. Observe o exemplo abaixo que tem a mesma saída do exemplo anterior:
#include
using namespace std;
cout << "Saida de dados" << endl;

Observem que continuo usando os objetos do namespace, porém não é mais necessária a utilização dos prefixos. É como uma ligação local, onde não é necessário discar o DDD antes do número do telefone.

4. Entrada e Saída de Dados (Input/Output) (I/O)

4.1 – Arquivo de Input/Output
Librarys (bibliotecas) são grupos de arquivos que contém rotinas para tarefas comuns em programação, como por exemplo, tratar de input/output. O arquivo iostream, que trata de I/O, utilizado anteriormente faz parte da Standard Library. Essa biblioteca provê código para operações mais comuns, dando assim a possibilidade de economizar tempo ao invés de tentar reinventar a roda.
O prefixo std é um namespace referente à biblioteca Standard Library.

4.2 – Input
Para registrarmos os dados inseridos por um usuário devemos usar o objeto cin, que é um objeto de iostream, seguido de >> (operador de extração / extraction operator) e precisamos de uma variável que armazene esses dados. Utilizamos a seguinte sintaxe:
cin >> nome_da_variável;

O console ficará esperando que o usuário digite algo, e quando ele digitar, o valor digitado será armazenado na variável nome_da_variável.

4.3 – Output
Para mostrarmos os dados contidos na variável utilizamos o objeto cout, seguido de << (operador de saída / output operator). Utilizamos a seguinte sintaxe:
cout << valores_de_saída;

Alguns detalhes precisam ser ressaltados:
- Para saída de texto, o texto deve estar entre aspas (“ “). O texto será tratado como uma cadeia de caracteres. Acentuação não é suportada.
- Para mostrarmos valores armazenados em variáveis utilizamos apenas o nome da variável após o output operator.
Exemplo:
int variável = 10;
cout << " Valor contido na variavel = " << variável << endl;

Output:
Valor contido na variavel = 10

Observe que eu posso usar vários operadores de saída, e que eu estou inicializando a variável antes de usá-la. Tentar usar a variável antes de inicializá-la irá gerar um erro em tempo de execução, ou seja, seu código irá compilar, mas na hora em que ele rodar vai dar erro.

Nota: O termo “tempo de execução” está relacionado ao comportamento do seu programa enquanto ele roda. Já o termo “tempo de compilação” está relacionado à implementação do programa em si.

4.4 – Say Hello to the World!
Como manda a tradição, nosso primeiro programa será o Hello World.

//Hello World
#include
using namespace std;

void main()
{
char nome [30];

cout << "Digite o seu nome: " << endl;
cin >> nome;
cout << endl << "Hello World! Eu fui feito por: " << nome << endl;

system ("pause");
}           

Mesmo sendo um programa bem simples ainda há vários conceitos nele que ainda não foram abordados. Não se assuste pois eles serão nas próximas aulas.

___________________________________________________
________________________
Baixe essa aula AQUI !
________________________