2.4.1
C
A Linguagem C foi criada e implementada por Dennis Ritchie, como evolução de uma linguagem chamada BCPL. Existem várias implementações de C, mas para garantir compatibilidade entre estas implementações existe o padrão ANSI (American National Standard Institute) para a linguagem C, o padrão foi chamado de C ANSI. Abaixo destaca- se algumas de suas características. O Trecho de Código 2.1 mostra um exemplo de codificação C (PAULA,2016).
• C é uma linguagem de alto nível com uma sintaxe bem estruturada e maleavel o que faz da programação em C ser muito simples;
• Quando os códigos em C são compilados geram programas executáveis;
• C compartilha recursos de alto e de baixo nível, permitindo assim o acesso e programação direta do microprocessador. Utilizando disso rotinas cuja dependência do tempo é crítica, podem ser facilmente implementadas usando instruções em Assembly.
• C é uma linguagem estruturalmente simples e de grande portabilidade.
• O compilador C gera códigos mais enxutos e rápidos do que muitas outras lingua- gens;
• Mesmo sendo estruturalmente simples a linguagem não perde em funcionalidade, pois permite a inclusão de uma enorme gama de rotinas implementadas pelo usuário. Além disso fabricantes de compiladores fornecem uma ampla variedade de rotinas pré-compiladas como bibliotecas.
Código 2.1 Código C.
1 #include <stdio.h> 2 void main (void)
3 {
4 puts ("Bem vindo a linguagem C");
5 }
C++
É uma linguagem de programação de nível médio, foi desenvolvida por Bjarne Stroustrup, em meados de 1983, com novos e poderosos elementos e novas propostas para a programação, que contribuem para a reutilização de código, e também uma facil
2.4 Principais linguagens de programação utilizadas para desenvolvimento de jogos 36
manutenção e adição ao código. C++ possui extensas bibliotecas-padrão que utilizam em grande quantidade as características exclusivas da linguagem em relação à C. Códigos escritos em C/C++ são de fácil leitura, pois a linguagem permite separar seu código em partes e arquivos para que seja melhor estruturado. O C++ induz ao programador a ter bons hábitos na programação, sabendo organizar seu código de maneira legível e tornando-o mais veloz e eficaz. Abaixo destaca-se algumas de suas características. O Trecho de Código2.2mostra um exemplo de codificação C++ (SANTEE,2005).
• Programação Orientada à Objetos: Permite a reutilização de código de forma mais lógica e produtiva;
• A linguagem foi desenvolvida com o intiuto de prover atributos Orientados à Objeto para a linguagem C sem comprometer a eficiência;
• Portabilidade: O código escrito pode ser compilado em praticamente qualquer tipo de computador e sistema operacional sem fazer muitas alterações;
• Menos código: O Código escrito em C++ é bem menor se comparado com muitas linguagens, desde o uso de caracteres especiais e preferidos antes de palavras chave, evitando esforço desnecessario;
• Programação Modular: Um programa C++ pode ser feito de vários arquivos de código que serão compilados separadamente e “linkados” juntos. Economizando tempo quando se faz desnecessário recompilar toda a aplicação quando é realizada uma alteração simples, mas apenas o arquivo que contem o código alterado, permitindo assim a linguagem C++ utilizar e interagir com códigos produzidos em outras linguagens como o Assembly ou C;
• Compatibilidade com C: Qualquer código escrito em C pode ser facilmente incluído em um programa C++ sem fazer grandes mudanças;
• Velocidade: Após a compilação o código C++ é muito eficiente, devido a sua dualidade de linguagem de Alto e Baixo nível e do tamanho reduzido da linguagem.
Código 2.2 Código C++. 1 #include<ostream.h> 2 intmain() 3 { 4 cout<<“Oimundo!\n”; 5 return0; 6 } Java
Java é uma linguagem de programação orientada a objetos desenvolvida pela Sun Microsystems. A linguagem Java foi projetada para ser pequena, simples e portátil
2.4 Principais linguagens de programação utilizadas para desenvolvimento de jogos 37
para todos os sistemas operacionais, tanto o código fonte como os binários. Java é multi- plataforma. Então não é necessário usar um tipo especifico de computador, a linguagem funciona mesmo no Windows, Unix ou Mac. Ela foi e está sendo utilizada nos mais di- versos tipos de dispositivos, desde caixas eletrônicos à dispositivos móveis. O Trecho de Código2.3mostra um exemplo de codificação Java (INTEGRADO; NERY,2016).
• Orientada a objetos;
• Portabilidade: Independência de plataforma - "escreva uma vez, execute em qual- quer lugar"
• Recursos de Rede: Possui extensa biblioteca de rotinas que facilitam a cooperação com protocolos TCP/IP, como HTTP e FTP;
• Segurança: Pode executar programas via rede com restrições de execução; • Sintaxe similar a C/C++;
• Internacionalização: Suporta nativamente caracteres Unicode
• Simplicidade na especificação: tanto da linguagem como do "ambiente"de execução (JVM)
• É distribuída com um vasto conjunto de bibliotecas (ou APIs)
• Sistemas distribuidos e multitarefa: Possui facilidades para criação de programas distribuídos e multitarefa (múltiplas linhas de execução num mesmo programa) • Desalocação automática de memória: por processo de coletor de lixo
• Carga Dinâmica de Código: Programas em Java são compostos por uma coleção de classes armazenadas de forma independente e podem ser carregadas no momento certo, ou seja, na hora da utilização.
Código 2.3 Código Java.
1 public class OlaMundo {
2 public static void main(String args[]) { 3 System.out.println("OlaMundo");
4 }
5 }
Lua
Lua é uma linguagem brasileira de script procedural, pequena, leve e rapida, foi criada para expandir aplicações em geral, por ser uma linguagem extensível (que une partes de um programa feitas em mais de uma linguagem), para prototipagem e para ser embarcada em softwares complexos, como jogos. O Trecho de Código 2.4 mostra um exemplo de codificação Lua (CELES; FIGUEIREDO; IERUSALIMSCHY,2004).
2.4 Principais linguagens de programação utilizadas para desenvolvimento de jogos 38
• Lua roda em todos os tipos de Unix e Windows, e também em dispositivos móveis (usando Android, iOS, BREW, Symbian, Windows Phone), em microprocessadores embutidos (como ARM e Rabbit, para aplicações como Lego MindStorms), e até mainframes IBM;
• Embutível;
• Lua é usada para estender programas escritos não só em C e C++, mas também em Java, C#, Smalltalk, Fortran, Ada, Erlang, e mesmo outras linguagens de script, como Perl and Ruby;
• Pequena;
• O pacote de Lua 5.2.3, contendo o código fonte e a documentação, ocupa 246K comprimido e 960K descompactado. O fonte contém cerca de 20000 linhas de C; • No Linux, o interpretador Lua contendo todas as bibliotecas padrões de Lua ocupa
182K e a biblioteca Lua ocupa 244K. Código 2.4 Código Lua.
1 function fact (n) 2 if n == 0 then 3 return 1 4 else 5 return n * fact(n-1) 6 end 7 end 8 9 print("enter a number:") 10 a = io.read("*number") 11 12 print(fact(a)) JavaScript
JavaScript é uma linguagem de programação interpretada. Originalmente im- plementada como parte dos navegadores web para executar scripts do lado do cliente e interagir com o usuário rodando o script apenas pelo cliente sem passar pelo servidor, controlando o navegador, realizando comunicação assíncrona e alterando o conteúdo do documento exibido. O Trecho de Código 2.5 mostra um exemplo de codificação JavaS- cript (FLANAGAN,2002).
• Seus comandos e funções são incorporados a tags html;
• Baseada em objetos: porque já possui um conjunto de objetos embutidos. Sendo assim desnecessário a construção dos objetos;
2.4 Principais linguagens de programação utilizadas para desenvolvimento de jogos 39
• Portátil: não depende do sistema operacional para funcionar basta apenas de um navegador que a interprete.
Código 2.5 Código JavaScript.
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"/> 5 <script type="text/javascript"> 6 alert("Olá Mundo") 7 </script> 8 </head> 9 <body> 10 </body> 11 </html> C#
É orientada a objetos, fortemente tipada, desenvolvida pela Microsoft como parte da plataforma .NET. A sua sintaxe orientada a objetos foi baseada no C++mas inclui muitas influências de outras linguagens de programação, como Object Pascal e Java. O Trecho de Código 2.6 mostra um exemplo de codificação C# (ARCHER; WHITECHAPEL,2002).
• Simplicidade: é poderosa como o C++ e simples como o Visual Basic; • Completamente orientada a objetos: toda variável faz parte de uma classe;
• Fortemente tipada: ajuda a evitar erros por manipulação imprópria de tipos e atribuições incorretas.
Código 2.6 Código C#.
1 class ClasseTeste
2 {
3 static void Main(string[] args)
4 {
5 System.Console.WriteLine(args.Length);
6 }
2.5 Motores de Jogos 40
2.5
Motores de Jogos
Um motor de jogos ou “Game Engines” são bibliotecas, ou pacotes de funciona- lidades, feitas para facilitar as etapas do desenvolvimento, fazendo que nem tudo no jogo precise ser feito totalmente do zero. Não sendo necessário o desenvolvimento de partes essenciais em quase todos os jogos, reutilizando pacotes de modelagem e renderização de imagens 2D ou 3D, motor de física para controle de colisões de personagens, rede para jo- gos multiplayer, sons, inteligência artificial, animações e principalmente proporcionando suporte à linguagens de script. As seções seguintes apresentam os principais motores de jogos.
2.5.1
Unity 3D
O Unity 3D, é um motor de jogos 2D e 3D proprietário e uma IDE criada pela Unity Technologies. Cresceu a partir da adição do suporte à plataforma Mac OS X e depois se tornou um motor multi-plataforma.
O Unity possui duas versões: a Unity Pro e a versão gratuita, que pode ser usada para fins educacionais, e a versão pro que pode ser testada por um período de 30 dias. É utilizado em grande escala na criação de jogos para WEB, mas o motor é capaz de criar grandes jogos para outras plataformas. A Tabela 2.5 a seguir descreve suas principais características.
TIPO Suporte Linguagens Sistemas Opera-
cionais Licença 2D e 3D Física e Rede (multiplayer) C#, JavaScript, Boo Win,Linux,Mac, Web, Flash, iOS/Android, Consoles (Xbox360,PS3, Wii)
Grátis para Web e PC‘s (com limita- ções)
Tabela 2.5: Características do Unity 3D (UNITY,2016).
Homepage:<https://unity3d.com/pt>
Comunidade:<https://unity3d.com/pt/community>
Documentação:<http://docs.unity3d.com/Manual/index.html>
2.5 Motores de Jogos 41
2.5.2
Cryengine
CryEngine é um motor de jogos que ficou famoso ao ser utilizado no desenvolvi- mento de grandes jogos como Far Cry e Crysis. A engine foi originalmente desenvolvida pela Crytek para ser utilizada como demo tecnológica para a Nvidia, mas quando a com- panhia viu seu potencial, a transformou em um motor de jogos.
Quando placas de vídeo com suporte a sombreamento de pixels e vértices foram lançadas, a Crytek lançou a versão 1.2 da engine, que usava de algumas das suas capacidades para melhores gráficos. Posteriormente, a companhia desenvolveu a CryEngine1.3, com suporte adicional a iluminação HDR. A Tabela 2.6a seguir descreve suas principais características.
TIPO Suporte Linguagens Sistemas Opera-
cionais
Licença
2D e 3D Física e Rede
(multiplayer)
C++ e Lua Xbox 360, PlayS-
tation, Wii U, Windows, Mac, Android, iOS
Grátis (com limi- tações)
Tabela 2.6: Características do Cryengine (CRYTEK,2016). Homepage:<http://cryengine.com/>
Comunidade:<http://www.cryengine.com/community/landing.php>
Documentação:<http://docs.cryengine.com/display/SDKDOC1/Home>
2.5.3
Unreal Engine
Unreal Engine é um motor de jogos desenvolvido pela Epic Games, utilizado pela primeira vez em 1998 no jogo em primeira pessoa Unreal, ele tem sido usado para o desenvolvimento de muitos jogos desde então, incluindo: Unreal Tournament, Clancy’s Rainbow Six, Batman: Arkham Knight, Mortal Kombat X,e muitos outros.
Seu núcleo é escrito em C++, possibilitando a portabilidade para múltiplas plata- formas e consoles de jogos. A Tabela 2.7a seguir descreve suas principais características.
TIPO Suporte Linguagens Sistemas Opera-
cionais Licença 2D e 3D Física e Rede (multiplayer) C++, UnrealS- cript Windows, Linux, Mac, Dreamcast, Xbox 360, PlayS- tation, Wii U Proprietário, UDK gratuito
para uso não- comercial
2.5 Motores de Jogos 42
Homepage:<https://www.unrealengine.com>
Comunidade:<https://forums.unrealengine.com/>
Documentação:<https://docs.unrealengine.com/latest/INT/>
2.5.4
Moai SDK
Moai SDK é uma plataforma de desenvolvimento voltada para criação de jogos para dispositivos móveis. A plataforma é composta pela Moai SDK e Moai Cloud, uma serviço de nuvem utilizado para hospedar jogos.
Utiliza das linguagens de programação Lua, C++ e OpenGL. Vários jogos comerciais foram criados com este motor como: Steam Pirates, e Broken Age. A Tabela
2.8a seguir descreve suas principais características.
TIPO Suporte Linguagens Sistemas Opera-
cionais
Licença
2D Física Lua iOS, Android,
Chrome, PC,
Mac (em breve Linux)
Grátis e Open Source
Tabela 2.8: Características do Moai SDK (MOAI,2016). Homepage:<http://getmoai.com/>
Comunidade:<http://getmoai.com/forums/>
Documentação:<http://getmoai.com/wiki/index.php?title=Main_Page>
2.5.5
Torque 2D/3D
Torque Game Engine é um motor de jogos proprietário multiplataforma desen- volvido pela GarageGames. É compatível com sistemas Microsoft Windows, Mac OS X e Linux. O motor esta disponível em duas licenças: uma para desenvolvedores independen- tes e, outra para desenvolvedores de jogos profissionais. A Tabela 2.9 a seguir descreve suas principais características.
TIPO Suporte Linguagens Sistemas Opera-
cionais Licença 2D e 3D Física e Rede (multiplayer) C++ Windows, Linux, Web
Grátis para Web e PC‘s (com limita- ções)
Tabela 2.9: Características do Torque 2D/3D (TORQUE3D,
2.5 Motores de Jogos 43
Homepage:<http://torque3d.org/>
Comunidade:<http://forums.torque3d.org/>
Documentação:<http://wiki.torque3d.org/>
2.5.6
Cocos2D-X
Cocos2d é um software de código aberto. Pode ser utilizado para desenvolver jogos, aplicativos e outros programas interativos baseados em GUI multiplataforma. O Cocos2d esta disponível em varias versões, cada uma voltada para uma plataforma de de- senvolvimento específica. A Tabela 2.10a seguir descreve suas principais características.
TIPO Suporte Linguagens Sistemas Opera-
cionais
Licença
2D Física C++ iOS, Android,
WinPhone, Bada, Blackberry, Me- eGo, Marmalade, Windows, Mac e Html 5 Grátis e Open Source
Tabela 2.10: Características do Coco2D-X (COCOS,2016).
Homepage:<http://www.cocos2d-x.org/>
Comunidade:<http://discuss.cocos2d-x.org/>
Documentação:<http://www.cocos2d-x.org/wiki>
2.5.7
Shiva3D
ShiVa3D é um motor de jogos 3D com um editor gráfico desenvolvido para criar jogos para a Web, consoles de jogos e dispositivos móveis.
É um motor multiplataforma que utiliza das linguagens OpenGL, OpenGL ES e DirectX. ShiVa3D também suporta plugins como NVIDIA PhysX, F-Mod sounds library, e ARToolKit. A Tabela 2.11a seguir descreve suas principais características.
2.5 Motores de Jogos 44
TIPO Suporte Linguagens Sistemas Opera-
cionais
Licença
3D Física e Rede
(multiplayer)
Lua ou C++ iOS, Android,
Windows, Linux, Wii, webOS, Blackberry, Sym- bian, WinPhone, Web Grátis apenas para aplicações web
Tabela 2.11: Características do Shiva3D (SHIVA,2016).
Homepage:<http://www.shivaengine.com/>
Comunidade:<http://www.shiva-engine.com/>
Documentação:<http://www.shiva-engine.com/doc/>
Loja de Pacotes:<http://www.shiva3dstore.com/>
2.5.8
Stencyl
Stencyl é uma plataforma 2D de criação de jogos que permite o desenvolvi- mento para computadores, dispoditivos móveis e WEB. Pode ser baixado gratuitamente e possui modulos que podem ser comprados posteriormente. Era originalmente chamado StencylWorks mas seu nome foi mudado após o lançamento de sua primeira versão. A Tabela 2.12a seguir descreve suas principais características.
TIPO Suporte Linguagens Sistemas Opera-
cionais
Licença
2D Física Codificação vi-
sual ActionScript iOS, Android, Flash, Desktop (Mac, Windows, Linux). Pago
Tabela 2.12: Características do Stencyl (STENCYL,2016).
Homepage:<http://www.stencyl.com/>
Comunidade:<http://community.stencyl.com/>
Documentação:<http://www.stencyl.com/help/toc/>
2.5.9
AndEngine
AndEngine é um motor de jogos escrito para desenvolvimento em Java espe- cificamente para dispositivos Android. O motor utiliza da tecnologia OpenGL ES para
2.5 Motores de Jogos 45
trabalhar com aceleração de gráficos.
Pode ser utilizada pelas seguintes plataformas: Eclipse e Android Studio. A Tabela 2.13a seguir descreve suas principais características.
TIPO Suporte Linguagens Sistemas Opera-
cionais
Licença
2D Física Java Android Grátis e Open
Source Tabela 2.13: Características do AndEngine (ANDENGINE,2016).
Homepage:<http://www.andengine.org/>
Comunidade:<http://www.andengine.org/forums/>
Documentação:<https://code.google.com/p/andengine/>
2.5.10
FlatRedBall
FlatRedBall é um motor de jogos completamente gratuito em C#. É conhecido por uma interface de desenvolvimento amigável e simplificada e pode ser baixada gratui- tamente. A Tabela 2.14a seguir descreve suas principais características.
TIPO Suporte Linguagens Sistemas Opera-
cionais
Licença
2D/3D Física C# Xbox360, Win-
dows Phone, Windows, An- droid e Silver- light Grátis e Open Source
Tabela 2.14: Características do FlatRedBall (FLATREDBALL,
2016). Homepage:<http://newsblog.flatredball.com/> Comunidade:<http://community.flatredball.com/> Documentação: <http://documentation.flatredball.com/frb/docs/index.php? title=Main_Page>
2.5.11
Sunburn
É um motor de jogos 2D e 3D proprietário e multiplataforma desenvolvido pela SynapseGaming. Está disponível somente em versão paga. A Tabela 2.15 a seguir descreve suas principais características.
2.5 Motores de Jogos 46
TIPO Suporte Linguagens Sistemas Opera-
cionais
Licença
2D/3D Física C# Android, Mac
OS X, Linux, Windows Phone, Windows Sur- face, Windows Store, Xbox 360 Pago
Tabela 2.15: Características do Sunburn (SYNAPSEGAMING,
2016).
Homepage:<https://www.synapsegaming.com/products/sunburn/engine/>
Comunidade:<https://www.synapsegaming.com/community/>
Documentação:<https://www.synapsegaming.com/wikis/>
2.5.12
Construct 2
Construct é um motor de jogos 2D baseado em HTML5, desenvolvido pela Scirra Ltda. É destinado principalmente para não-programadores, permitindo a criação rápida de jogos utilizando um editor visual e um sistema de lógica baseada em comporta- mento. A Tabela 2.16a seguir descreve suas principais características.
TIPO Suporte Linguagens Sistemas Opera-
cionais Licença 2D Física e Rede (multiplayer) Codificação visual Web HLML5, Wii U, iOS, Android, Win- dows, Windows Phone, Mac, Linux, Black- berry, Facebook, Chrome Grátis
Tabela 2.16: Características do Construct 2 (SCIRRA,2016).
Homepage:<https://www.scirra.com/>
Comunidade:<https://www.scirra.com/forum/>
2.5 Motores de Jogos 47
2.5.13
Crafty
Crafty é um motor de jogos 2D gratuito desenvolvido pela CraftyJs. É um software de desenvolvimento de jogos voltados somente para navegadores. A Tabela 2.17
a seguir descreve suas principais características.
TIPO Suporte Linguagens Sistemas Opera-
cionais
Licença
2D Física HTML e JavaS-
cript
HTML5 Grátis
Tabela 2.17: Características do Crafty (CRAFTYJS,2016).
Homepage:<http://craftyjs.com/>
Comunidade:<https://groups.google.com/forum/#!forum/craftyjs>