• Nenhum resultado encontrado

Desenvolvimento de Jogos em Python. Por Marcelo de Freitas Rigon

N/A
N/A
Protected

Academic year: 2021

Share "Desenvolvimento de Jogos em Python. Por Marcelo de Freitas Rigon"

Copied!
17
0
0

Texto

(1)

Desenvolvimento de Jogos em Python

(2)

Características de um jogo

Pessoas de áreas diferentes

Arte

Design

Desenvolvimento

Comercial

Não atende a necessidades, é um lazer

Projetos com tempo de desenvolvimento alto e

(3)

Partes do jogo

Sobre a programação envolvida em jogos, existem quatro áreas

principais e distintas da engine:

Inteligência Artificial: É responsável por toda e qualquer forma de

atitude diferenciada de algum NPC (personagem que não é do jogador,

ou Non-Player Character), de forma a tentar demonstrar a existência de

inteligência nestes seres.

Gráfico: Tudo o que o jogador vê no jogo é feito por essa parte da

engine.

Som: Tudo aquilo que o jogador ouve.

Input: Toda forma de interface entre o usuário e o jogo é lidada por

(4)

Linguagem

Usar linguagem compilada e ganhar

performance?

Usar linguagem interpretada e ganhar tempo

de desenvolvimento?

Escrever tudo do zero, otimizando o

desempenho pro meu jogo?

(5)

Linguagens de script

O que é?

Linguagem de script é uma linguagem

auxiliar, que contém dados que podem

ser modificados por uma equipe

diferente sem mexer em seu código.

Porque utilizar?

Devido a toda evolução computacional

que tivemos, há várias partes do

programa que não precisam ser muito

otimizados. E, como tempo é dinheiro,

economizar tempo de programação é o

que mais importa.

Simplicidade

Consumo de recursos

Agilidade

Tempo de

desenvolvimento

Tempo de compilação

Tempo de aprendizado

(6)
(7)

Opções de linguagem

Quais são as opções?

Existem várias linguagens de script que poderiam ser utilizadas. Entre elas, as mais

famosas na área de jogos são Lua¹, desenvolvida pela PUC-Rio, e Python², desenvolvida por Guido van Rossum.

Nas duas é fácil criar uma extensão em C/C++ ou serem imbuídas em programas em C/C++. Além disso, as duas apresentam facilidades para implementação de inteligência artificial.

Afinal, porque Python?

A escolha entre estas duas linguagens é tão pessoal quanto a escolha entre utilizar

OpenGL ou DirectX. Utilizamos Python por que tem uma documentação mais vasta, uma comunidade maior e, por isso, várias ferramentas que podem facilitar a vida dos

programadores.

Entre estas ferramentas importantes, temos: pyOpenGL (que além de ser um binding do OpenGL para python, já tem classes para lidar com quaternions), Numeric ou numpy (pacote com ferramentas matemáticas) e pyOpenAL (binding do OpenAL para python).

(8)

Exemplos de linguagens

Imprimindo a frase “Hello World” em quatro linguagens diferentes:

Programa em C

#include <stdio.h>

main() {

printf("Hello World!");

}

Programa em Python

print “Hello World!”

Programa em Java

class myHelloWorld {

public static void main(String args[]) {

System.out.println("Hello World!");

}

}

Programa em Lua

(9)

Projetos em Python

Veremos a seguir, alguns projetos que utilizam

Python em seu desenvolvimento.

(10)
(11)
(12)

Ferramentas, jogos e cinema

Engines:

Panda 3D, Crystal space e Ogre.

Ferramentas de modelagem:

Blender 3D e Maya.

Jogos:

Eve Online, Piratas do Caribe, PlaneShift, Civilization IV, etc.

Cinema:

Big Buck Bunny, Avatar: The last air beinder, Transformers, Iron Man,

Avatar, etc.

Outros:

NASA, Yahoo Groups, Yahoo Maps, Red Hat, IBM, ABN AMRO Bank –

Treasure System, Google, Nokia, Disney, etc.

(13)

Citações

Industrial Light & Magic

ILM uses Python in the production of their FX, as described in the RenderMan Course Notes from Siggraph 2001 (they name "The Phantom Menace", "The Mummy Returns" and other productions as ones where Python was used...).

Walt Disney Feature Animation

Walt Disney Feature Animation is also using Python to add scriptability to their animation production system.

The Temple of Elemental Evil and Vampire: The Masquerade: Bloodlines

"Greyhawk: The Temple of Elemental Evil" and "Vampire: The Masquerade: Bloodlines" use Python extensively for pretty much everything except the rendering engines - game logic, interface, etc. Both games have strong modding communities.

(14)

Exemplo

import os

import Image

colorkey = (255,255,255,255)

files = os.listdir(".")

for file in files:

if (file[-2:] != "py"):

new_filename = file[:-4]

img = Image.open(file)

img = img.convert("RGBA")

for i in range(img.size[0]):

for j in range(img.size[1]):

if (img.getpixel((i,j)) == colorkey):

img.setpixel((i,j), (255,255,255,0))

img.save(new_filename+".tga")

del img

(15)

Máquina de Estados

def onLocate(self,enemy): if (game.distance(self,enemy) < 30): self.setAttack(const.ATT_MELEE) else: if (enemy.type == const.MELEE): self.setAttack(const.ATT_MISSILE) self.setMove(const.MOVE_BACK) if (enemy.type == const.RANGED): self.setMove(const.MOVE_BACK)

(16)

Máquina de Estados

self.combo.add_combo([],ATTACK_1,"att1") self.combo.add_combo([],ATTACK_2,"att2") self.combo.add_combo([],SPECIAL,"special") self.combo.add_combo([ATTACK_1],ATTACK_2,"att2",stun_time = 3.0) self.combo.add_combo([],ACTION_JUMP+ATTACK_1,"att1") self.combo.add_combo([],ACTION_JUMP+ATTACK_2,"att2") self.combo.add_combo([],MOVE_RUN+ATTACK_1,"att1",

controller = scripts.BasicRunAttack(animation = "att1")) self.combo.add_combo([],MOVE_RUN+ATTACK_2,"att1",

(17)

Muito obrigado!

Referências

Documentos relacionados

c.4) Não ocorrerá o cancelamento do contrato de seguro cujo prêmio tenha sido pago a vista, mediante financiamento obtido junto a instituições financeiras, no

Ninguém quer essa vida assim não Zambi.. Eu não quero as crianças

Local de realização da avaliação: Centro de Aperfeiçoamento dos Profissionais da Educação - EAPE , endereço : SGAS 907 - Brasília/DF. Estamos à disposição

do sangue para o leito vascular ou retirada dele, com aumento ou diminuição da diurese, regulação do volume extracelular e alterações comportamentais.5. MANIFESTAÇÕES

3.1 O/A Estudante pretendente à vaga no Programa de Auxílio MORADIA – PROMORE - concessão de vagas para a Residência Estudantil e Bolsa Auxílio Moradia, deverá entregar

Neste capítulo, será apresentada a Gestão Pública no município de Telêmaco Borba e a Instituição Privada de Ensino, onde será descrito como ocorre à relação entre

A presente revisão bibliográfica abordará polímeros molecularmente impressos, onde aprofundamos os processos de obtenção desses materiais através dos métodos de

To identify a source of ligands able to activate Olfr692- expressing cells, we first exposed adult animals to bio- logically relevant stimuli and then labeled the activated neurons