SlideShare uma empresa Scribd logo
1 de 58
Baixar para ler offline
Implementação de Aplicações Móveis
e Jogos com Python
Antes de Comecar
 Interpretador Interativo
 Maquina de testes de código Python
 Escolha uma IDE!
 http://www.python.org.br/wiki/IdesPython
 Ou o velho Notepad >:)
Review
 2ª Aula
 Orientação a Objetos com Python
 Classes
 Métodos (construtor)
 Atributos
 Herança
 Módulos e Bibliotecas
 SDK s60 e Python
 Introdução ao pys60
 Appuifw
 Algumas Referências!
PyS60 – Estrutura de uma Aplicação appuifw
 O Objeto appuifw.app
 Estrutura
PyS60
 Exemplo Titulo
import appuifw, e32
def quit():
app_lock.signal()
appuifw.app.exit_key_handler=quit
appuifw.app.title=u"Meu Titulo!"
app_lock=e32.Ao_lock()
app_lock.wait()
PyS60 – Estrutura de uma Aplicação appuifw
 appuifw.app.body
 Pode ser:
 Canvas
 Form
 Listbox
 Text
 Área pode ser aumentada!
 appuifw.app.screen = 'full'
 appuifw.app.screen = 'large'
 appuifw.app.screen = 'normal'
PyS60
 Exemplo Body
import appuifw, e32
def quit():
app_lock.signal()
appuifw.app.exit_key_handler=quit
t=appuifw.Text()
appuifw.app.body=t
t.add(u"Texto aqui..")
t.clear()
t.set(u"Texto inteiro.")
t.get()
PyS60
 Menu
 Podem ser de 2 tipos
 Popup Menu no key default
 Selection Lists
PyS60
 Exemplo Menu
import appuifw, e32
def quit():
app_lock.signal()
appuifw.app.exit_key_handler=quit
def callback_A():
print "A"
def callback_C():
print "C"
def callback_D():
print "D"
appuifw.app.menu=[(u"Item_A", callback_A), (u"Item_B", ((u"Item_C", callback_C),
(u"Item_D", callback_D)))]
app_lock=e32.Ao_lock()
app_lock.wait()
PyS60
 Exemplo Menu
import appuifw, e32
def quit():
app_lock.signal()
appuifw.app.exit_key_handler=quit
def callback_A():
print "A"
def callback_C():
print "C"
def callback_D():
print "D"
i=appuifw.popup_menu([u"Item1", u"Item2"])
app_lock=e32.Ao_lock()
app_lock.wait()
PyS60
 Exemplo Menu
import appuifw, e32
def quit():
app_lock.signal()
appuifw.app.exit_key_handler=quit
def callback_A():
print "A"
def callback_C():
print "C"
def callback_D():
print "D"
i=appuifw.selection_list([u"Item1", u"Item2"])
app_lock=e32.Ao_lock()
app_lock.wait()
PyS60
 Exemplo Menu
import appuifw, e32
def quit():
app_lock.signal()
appuifw.app.exit_key_handler=quit
def callback_A():
print "A"
def callback_C():
print "C"
def callback_D():
print "D"
i=appuifw.multi_selection_list([u"Item1", u"Item2"], style='checkbox', search_field=1)
app_lock=e32.Ao_lock()
app_lock.wait()
PyS60 - Teclado
Exerc cio!í
Crie uma Agenda de Contatos. O usuário será capaz de
escolher entre adicionar pessoas a agenda (onde o programa
pede Nome e Telefone da pessoa) ou buscar pelo nome
usando uma multi_selection list.
Ao selecionar o nome da pessoa, o programa deverá imprimir
em um appuifw.Text() o Nome da pessoa e o Telefone dela. Ao
selecionar o menu novamente o appuifw.Text() deverá ser
apagado.
É desejável que o programa utilize Orientação a Objetos.
Teclado
PyS60 - Teclado
 Keyboard
 É preciso associar um canvas ao app.body
 Área drawable
 Captura eventos do teclado
canvas = appuifw.Canvas()
appuifw.app.body = canvas
PyS60 - Teclado
 Keyboard
 Mapa de Teclas
PyS60 - Teclado
 Exemplo de Uso
import appuifw, key_codes, e32
def keys(event):
if event['keycode'] == key_codes.EKeyUpArrow:
appuifw.note(u"Up arrow foi pressionado!")
elif event['keycode'] == key_codes.EKeyDownArrow:
appuifw.note(u"Down Arrow foi pressionado!")
def quit():
app_lock.signal()
canvas = appuifw.Canvas(event_callback = keys)
appuifw.app.body = canvas
appuifw.app.exit_key_handler = quit
app_lock = e32.Ao_lock()
app_lock.wait()
PyS60 - Teclado
Exerc cio!í
Criar uma aplicação que capture eventos do teclado e chame
funções da appuifw (query e note, por exemplo.)
É desejável que o programa utilize Orientação a Objetos, com
bibliotecas de captura de eventos e de gerência dos callbacks.
Graphics e Canvas
Graphics e appuifw.Canvas
 Gráficos 2d e 3d
 Interface mais customizada
 Gerencia Imagens (graphics.Image)
 Desenhos Geométricos
 Elipse, linha, retângulo
 appuifw.app.body = appuifw.Canvas()
Graphics e appuifw.Canvas
 Gráficos 2d e 3d
 Interface mais customizada
 Gerencia Imagens (graphics.Image)
 Desenhos Geométricos
 Elipse, linha, retângulo
 appuifw.app.body = appuifw.Canvas()
appuifw.Canvas
 appuifw.Canvas
 Criação de um Canvas no body da aplicação
 Callbacks de redraw e event
 Dentro do Canvas pode-se criar:
 Linhas
 Poligonos
 Retângulos
 Elipse
 Pontos
 Textos
 O método blit()
Graphics e Canvas
 Exemplo
import graphics, e32, appuifw
app_lock = e32.Ao_lock()
def quit():
app_lock.signal()
appuifw.app.exit_key_handler = quit
canvas = appuifw.Canvas()
appuifw.app.body = canvas
appuifw.app.screen = 'full'
canvas.clear(0x339900)
canvas.line((40,50,180,20),0)
canvas.rectangle((30,45,110,100), fill=(255,255,255))
canvas.ellipse((0,0,100,50), fill=(255,0,0))
canvas.text((150,150),u”Texto”,(0,0,0),'title')
app_lock.wait()
Graphics e Canvas
 Gerenciando Imagens
 graphics.Image + appuifw.Canvas
 graphics.Image é um buffer
 Evita “flicks” na tela
 blit()
 graphics.Image
 resize, transpose, save
Graphics e Canvas
 Exemplo
import e32,key_codes,graphics
from appuifw import *
def draw_rect():
img.rectangle((50,100,100,150), fill = (255,255,0))
def draw_point():
img.point((90,50), outline=(255,0,0),width=30)
def handle_redraw(rect):
if img: canvas.blit(img)
def handle_event(event):
ev = event[“keycode”]
if event[“type”] == EEventKeyDown:
img.clear((0,0,255))
if ev == key_codes.EKeyUpArrow:
draw_point()
elif ev == key_codes.EKeyDownArrow:
draw_rect()
def quit():
app_lock.signal()
img = None
canvas = Canvas(redraw_callback = 
handle_redraw, event_callback = 
handle_event)
app.body = canvas
app.screen = 'full'
app.exit_key_handler = quit
w, h = canvas.size
img = graphics.Image.new((w,h))
img.clear((0,0,255))
app_lock = e32.Ao_lock()
app_lock.wait()
PyS60 - Teclado
Exerc cio!í
Criar uma aplicação que, a cada evento gerado do joystick,
mude a cor do body.
Criar também um menu (popup_menu) com a escolha de
escrever um nome (query). Esse nome escrito irá aparecer no
meio da tela com a cor preta (usando canvas.text ao invés de
appuifw.text).
Hora do Lanche!
Data Handling
Data Handling
 Gerenciamento de Arquivos e Dados
Data Handling
 Gerenciamento de Arquivos e Dados
 C: → Memória Interna do Dispositivo
 D: → RAM (read-only)
 E: → Cartão de Memória
 Z: → ROM (read-only)
 Fotos
 C:Images ou E:Images
 Músicas
 C:Sounds ou E:Sounds
 Arquivos
 C:Data ou E:Data
Data Handling
 Criando um Diretório para sua Aplicação
import os, os.path
PATH = u”C:DataMinhaAplicação”
if not os.path.exists(PATH): os.makedirs(PATH)
 Criando Arquivos
 Os modos podem ser:
 a → append
 w → write
 r → read
Arquivo = open(“C:Datanomedoarquivo.txt”,”w”)
 wb → Escreve binário
Data Handling
 Escrevendo e lendo de um Arquivo
arquivo = open(“C:Datacontatos.txt”,”w”)
arquivo.write(“Essa linha será escrita no arquivo.”)
arquivo.write(“Essa aqui já sera a segunda linha do arquivo.”)
arquivo.close()
arquivo = open(“C:Datacontatos.txt”,”r”)
for linha in arquivo:
print linha
Data Handling
 O módulo e32dbm
 “Banco de Dados” para Dispositivos Symbian
 Tratamento semelhante ao de objetos File
 Trata Dicionários
 Gerencia arquivos maiores e mais rapidamente
 e32dbm.open(DB_FILE, modo)
 Modo pode ser:
 r → Abre a DB pra leitura
 w → Abre a DB para escrita
 c → Leitura e Escrita (Se não existir, cria)
 Se 'f' for colocado a frente do modo, as modificações no
banco ficam em memória até o close() do db
Data Handling
 Exemplo
Import e32dbm
db = e32dbm.open(“C:Datadatabase.db”,”cf”)
db[“Nome”] = u”Flávio Ribeiro”
db[“Idade”] = 21
for key, value in db.items():
print “Chave: “, key
print “Valor:”, value
db.close()
 Módulo responsável por informações do sistema
 sysinfo.battery()
 Retorna o nivel da bateria (entre 0 e 7)
 sysinfo.imei()
 Retorna o número de identificação do celular
 sysinfo.active_profile()
 Retorna o perfil utilizado no momento (Silencioso, Reunião,
etc)
 sysinfo.display_pixels()
 Retorna o tamanho da tela em pixels (muito importante)
Sysinfo
 Módulo responsável por informações do sistema
 sysinfo.free_drivespace()
 Retorna o espaço livre em bytes em cada drive
 {u'C:': 58463232, u'D:': 9494528, u'Z:': 0}
 sysinfo.total_ram()
 Retorna o tamanho da memória RAM
 sysinfo.free_ram()
 Retorna a memória RAM livre
 sysinfo.signal_bars()
 Retorna o sinal da antena (de 0 a 7)
 sysinfo.sw_version()
 Versão do firmware
Sysinfo
Jogos com Python
Jogos com Python
Jogos com Python
 Exemplos de Jogos com Python
 Frets on Fire
 Civilization
 Battlefield 2
 InterZone
Jogos com Python
 API's e Frameworks
 PyGlet
 PyOpenGL
 Panda3D
 Pygame
 Mais popular (também mais difundida)
 SDL (Simple DirectMedia Layer)
 Sprites, Actions, Effects

Linux, Windows, Mac, XO-OLPC, Maemo, s60
Jogos com Python
 Definições
 Surface
 Superfícies a serem desenhadas
 2d ou 3d (transparência
 Em memória ou placa de vídeo
 Rect
 Retângulos
 Delimitam sprites
 Display
 Manipula a tela
 pygame.display.flip()
 Dirty Rect
Jogos com Python
 Definições
 Draw
 Desenha no display
 Linhas, Circulos, Polígonos
 Event
 Recupera eventos do Input (Teclado, Joystick)
 Delimitam sprites
 Clock
 Define os frames por segundo
 pygame.clock.tick()
Jogos com Python
 Definições
 Sprite
 Agente ativo
 pygame.sprite.Sprite e pygame.sprite.Group
 Colisões
 Comparação de retângulos dos sprites
 Game Loop
 Loop Infinito
 Captura eventos do input
 Trata os eventos
 'Pinta' os sprites nas novas localizações
 Atualiza a tela (flip() ou update())
Jogos com Python
Demo!
Jogos com Python
Jogos com Python
Jogos com Python
Jogos com Python
Dicas de Organização
de um Projeto
 Várias funções em um só arquivo
 Arquivo: operacoes.py
 Funções:
 soma(x,y)
 subtrai(x,y)
 divide(x,y)
Namespace e Dicas de um projeto Python
import operacoes
operacoes.soma(10,20)
operacoes.divide(100,2)
 Várias Classes em um só arquivo
 Arquivo: funcionarios.py
 Classes:
 Presidente
 Diretor
 Estagiario
Namespace e Dicas de um projeto Python
import funcionarios
flavio = funcionarios.Estagiario()
lucas = funcionarios.Presidente()
flavio.trabalha()
lucas.toma_cafe()
 Métodos
 trabalha()
 toma_cafe()
 Várias Classes em um só arquivo (Exemplo II)
 Arquivo: funcionarios.py
 Classes:
 Presidente
 Diretor
 Estagiario
Namespace e Dicas de um projeto Python
from funcionarios import *
flavio = Estagiario()
lucas = Presidente()
flavio.trabalha()
lucas.toma_cafe()
 Métodos
 trabalha()
 toma_cafe()
 Pacotes
 Pasta: conexoes/
 Arquivo __init__.py (vazio)
 Arquivos:
 bluetooth.py → Classes Server e Client
 wireless.py → Classes AccessPoint e Client
Namespace e Dicas de um projeto Python
import conexoes.bluetooth
import conexoes.wireless
bt = conexoes.bluetooth.Client()
wifi = conexoes.wireless.AccessPoint()
 Pacotes (Exemplo II)
 Pasta: conexoes/
 Arquivo __init__.py (vazio)
 Arquivos:
 bluetooth.py → Classes Server e Client
 wireless.py → Classes AccessPoint e Client
Namespace e Dicas de um projeto Python
from conexoes import bluetooth
bt = bluetooth.Client()
 Pacotes (Exemplo III)
 Pasta: conexoes/
 Arquivo __init__.py (vazio)
 Arquivos:
 bluetooth.py → Classes Server e Client
 wireless.py → Classes AccessPoint e Client
Namespace e Dicas de um projeto Python
from conexoes.bluetooth import Server
bt = Server()
 Dicas:
 Crie uma pasta pra seu programa:
 Deixe uma pasta do seu programa para os códigos (src)
 Deixe outra pasta para Arquivos no geral (files)
 Crie outras necessárias
Namespace e Dicas de um projeto Python
import os, os.path
PATH = u”C:DataMinhaAplicação”
if not os.path.exists(PATH): os.makedirs(PATH)
import os, os.path
Sources = u”C:DataMinhaAplicaçãosrc”
if not os.path.exists(Sources): os.makedirs(Sources)
 Dicas:
 Coloque a pasta de códigos no seu Python Path
Assim ele será visível e poderá ser incluído nos seus códigos.
Namespace e Dicas de um projeto Python
import sys
Sources = u”C:DataMinhaAplicaçãosrc”
sys.path.append(Sources)
Projetos!

Mais conteúdo relacionado

Mais procurados

Design de código: princípios e práticas para ter um código sustentável
Design de código: princípios e práticas para ter um código sustentávelDesign de código: princípios e práticas para ter um código sustentável
Design de código: princípios e práticas para ter um código sustentávelAndrews Medina
 
Desenvolvendo Extensões PECL
Desenvolvendo Extensões PECLDesenvolvendo Extensões PECL
Desenvolvendo Extensões PECLW3P Projetos Web
 
Python Multimedia
Python MultimediaPython Multimedia
Python MultimediaiMasters
 
Minicurso Python
Minicurso PythonMinicurso Python
Minicurso Pythonrodrigopex
 
Go Lang para desenvolvedores pragmáticos (parte 1)
Go Lang para desenvolvedores pragmáticos (parte 1)Go Lang para desenvolvedores pragmáticos (parte 1)
Go Lang para desenvolvedores pragmáticos (parte 1)Wilson Júnior
 
Introdução ao Shell Script (versão estendida)
Introdução ao Shell Script (versão estendida)Introdução ao Shell Script (versão estendida)
Introdução ao Shell Script (versão estendida)Hugo Maia Vieira
 
Introdução às Redes Neurais com PHP
Introdução às Redes Neurais com PHPIntrodução às Redes Neurais com PHP
Introdução às Redes Neurais com PHPOtávio Calaça Xavier
 
Golang para desenvolvedores pragmáticos parte 2
Golang para desenvolvedores pragmáticos  parte 2Golang para desenvolvedores pragmáticos  parte 2
Golang para desenvolvedores pragmáticos parte 2Wilson Júnior
 
Introdução à Linguagem de programação Python
Introdução à Linguagem de programação PythonIntrodução à Linguagem de programação Python
Introdução à Linguagem de programação Pythondmmartins
 
Escreva aplicações web assíncronas com python3 + tornado
Escreva aplicações web assíncronas com python3 + tornadoEscreva aplicações web assíncronas com python3 + tornado
Escreva aplicações web assíncronas com python3 + tornadoWilson Júnior
 
Introdução a linguagem Go
Introdução a linguagem GoIntrodução a linguagem Go
Introdução a linguagem GoAllisson Azevedo
 
Proxy, Man-In-The-Middle e testes
Proxy, Man-In-The-Middle e testesProxy, Man-In-The-Middle e testes
Proxy, Man-In-The-Middle e testesStanislaw Pusep
 
Perl Moderno, dia5
Perl Moderno, dia5Perl Moderno, dia5
Perl Moderno, dia5garux
 

Mais procurados (20)

Design de código: princípios e práticas para ter um código sustentável
Design de código: princípios e práticas para ter um código sustentávelDesign de código: princípios e práticas para ter um código sustentável
Design de código: princípios e práticas para ter um código sustentável
 
Desenvolvendo Extensões PECL
Desenvolvendo Extensões PECLDesenvolvendo Extensões PECL
Desenvolvendo Extensões PECL
 
Python Multimedia
Python MultimediaPython Multimedia
Python Multimedia
 
Minicurso Python
Minicurso PythonMinicurso Python
Minicurso Python
 
Go Lang para desenvolvedores pragmáticos (parte 1)
Go Lang para desenvolvedores pragmáticos (parte 1)Go Lang para desenvolvedores pragmáticos (parte 1)
Go Lang para desenvolvedores pragmáticos (parte 1)
 
Introdução ao Shell Script (versão estendida)
Introdução ao Shell Script (versão estendida)Introdução ao Shell Script (versão estendida)
Introdução ao Shell Script (versão estendida)
 
Introdução às Redes Neurais com PHP
Introdução às Redes Neurais com PHPIntrodução às Redes Neurais com PHP
Introdução às Redes Neurais com PHP
 
Golang para desenvolvedores pragmáticos parte 2
Golang para desenvolvedores pragmáticos  parte 2Golang para desenvolvedores pragmáticos  parte 2
Golang para desenvolvedores pragmáticos parte 2
 
Introdução à Linguagem de programação Python
Introdução à Linguagem de programação PythonIntrodução à Linguagem de programação Python
Introdução à Linguagem de programação Python
 
Scatole Nere
Scatole NereScatole Nere
Scatole Nere
 
Shell script
Shell scriptShell script
Shell script
 
PHP 5.3 - What's new?
PHP 5.3 - What's new?PHP 5.3 - What's new?
PHP 5.3 - What's new?
 
Escreva aplicações web assíncronas com python3 + tornado
Escreva aplicações web assíncronas com python3 + tornadoEscreva aplicações web assíncronas com python3 + tornado
Escreva aplicações web assíncronas com python3 + tornado
 
Introdução a linguagem Go
Introdução a linguagem GoIntrodução a linguagem Go
Introdução a linguagem Go
 
Proxy, Man-In-The-Middle e testes
Proxy, Man-In-The-Middle e testesProxy, Man-In-The-Middle e testes
Proxy, Man-In-The-Middle e testes
 
Apresentação
ApresentaçãoApresentação
Apresentação
 
Python Class
Python ClassPython Class
Python Class
 
Javascript
JavascriptJavascript
Javascript
 
Perl Moderno, dia5
Perl Moderno, dia5Perl Moderno, dia5
Perl Moderno, dia5
 
Python
PythonPython
Python
 

Semelhante a Implementação de Aplicações Móveis e Jogos com Python - Aula 3

Introdução à visão computacional utilizando software livre
Introdução à visão computacional utilizando software livreIntrodução à visão computacional utilizando software livre
Introdução à visão computacional utilizando software livrepichiliani
 
Introdução ao Titanium Mobile
Introdução ao Titanium MobileIntrodução ao Titanium Mobile
Introdução ao Titanium MobileEric Cavalcanti
 
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...Ricardo Valeriano
 
Softwares e Aplicativos Windows
Softwares e Aplicativos WindowsSoftwares e Aplicativos Windows
Softwares e Aplicativos WindowsRobson Santos
 
Softwares E Aplicativos Robs
Softwares E Aplicativos RobsSoftwares E Aplicativos Robs
Softwares E Aplicativos RobsRobson Santos
 
Chrome Apps e NodeWebkit: traga seu webapp para o Desktop - #outubrorosa
Chrome Apps e NodeWebkit: traga seu webapp para o Desktop - #outubrorosaChrome Apps e NodeWebkit: traga seu webapp para o Desktop - #outubrorosa
Chrome Apps e NodeWebkit: traga seu webapp para o Desktop - #outubrorosaJoselito Nascimento
 
Júlio Pescuite - Advanced Topics for Game Developers
Júlio Pescuite - Advanced Topics for Game DevelopersJúlio Pescuite - Advanced Topics for Game Developers
Júlio Pescuite - Advanced Topics for Game DevelopersiMasters
 
Treinamento básico de Android
Treinamento básico de AndroidTreinamento básico de Android
Treinamento básico de AndroidTiago Barreto
 
Java recursos avançados - streams
Java   recursos avançados - streamsJava   recursos avançados - streams
Java recursos avançados - streamsArmando Daniel
 
Internet das Coisas com Android things e Machine Learning
Internet das Coisas com Android things e Machine LearningInternet das Coisas com Android things e Machine Learning
Internet das Coisas com Android things e Machine LearningAlvaro Viebrantz
 
Introdução ao Android (minicurso 4h)
Introdução ao Android (minicurso 4h)Introdução ao Android (minicurso 4h)
Introdução ao Android (minicurso 4h)Rodrigo Rocha
 
Python No Terra (2006-12-21)
Python No Terra  (2006-12-21)Python No Terra  (2006-12-21)
Python No Terra (2006-12-21)Rudá Moura
 
Desenvolvimento de Jogos com Corona SDK
Desenvolvimento de Jogos com Corona SDKDesenvolvimento de Jogos com Corona SDK
Desenvolvimento de Jogos com Corona SDKBruno Cicanci
 
Lista 221 Comandos Executar do Windows.docx
Lista 221 Comandos Executar do Windows.docxLista 221 Comandos Executar do Windows.docx
Lista 221 Comandos Executar do Windows.docxSLVIOPAIVADOSANTOSSI
 
Logica5 141120062157-conversion-gate02
Logica5 141120062157-conversion-gate02Logica5 141120062157-conversion-gate02
Logica5 141120062157-conversion-gate02Lucas Antonio
 
Curso de Introdução ao Android Básico
Curso de Introdução ao Android BásicoCurso de Introdução ao Android Básico
Curso de Introdução ao Android BásicoLuiz Carvalho
 

Semelhante a Implementação de Aplicações Móveis e Jogos com Python - Aula 3 (20)

Introdução à visão computacional utilizando software livre
Introdução à visão computacional utilizando software livreIntrodução à visão computacional utilizando software livre
Introdução à visão computacional utilizando software livre
 
Introdução ao Titanium Mobile
Introdução ao Titanium MobileIntrodução ao Titanium Mobile
Introdução ao Titanium Mobile
 
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...
 
Sokoban com PyS60
Sokoban com PyS60Sokoban com PyS60
Sokoban com PyS60
 
Softwares e Aplicativos Windows
Softwares e Aplicativos WindowsSoftwares e Aplicativos Windows
Softwares e Aplicativos Windows
 
Softwares E Aplicativos Robs
Softwares E Aplicativos RobsSoftwares E Aplicativos Robs
Softwares E Aplicativos Robs
 
Chrome Apps e NodeWebkit: traga seu webapp para o Desktop - #outubrorosa
Chrome Apps e NodeWebkit: traga seu webapp para o Desktop - #outubrorosaChrome Apps e NodeWebkit: traga seu webapp para o Desktop - #outubrorosa
Chrome Apps e NodeWebkit: traga seu webapp para o Desktop - #outubrorosa
 
Júlio Pescuite - Advanced Topics for Game Developers
Júlio Pescuite - Advanced Topics for Game DevelopersJúlio Pescuite - Advanced Topics for Game Developers
Júlio Pescuite - Advanced Topics for Game Developers
 
Minicurso pygame
Minicurso pygameMinicurso pygame
Minicurso pygame
 
Treinamento básico de Android
Treinamento básico de AndroidTreinamento básico de Android
Treinamento básico de Android
 
Java recursos avançados - streams
Java   recursos avançados - streamsJava   recursos avançados - streams
Java recursos avançados - streams
 
Internet das Coisas com Android things e Machine Learning
Internet das Coisas com Android things e Machine LearningInternet das Coisas com Android things e Machine Learning
Internet das Coisas com Android things e Machine Learning
 
Introdução ao Android (minicurso 4h)
Introdução ao Android (minicurso 4h)Introdução ao Android (minicurso 4h)
Introdução ao Android (minicurso 4h)
 
Guia Rápido Voyage 200
Guia Rápido Voyage 200Guia Rápido Voyage 200
Guia Rápido Voyage 200
 
Python No Terra (2006-12-21)
Python No Terra  (2006-12-21)Python No Terra  (2006-12-21)
Python No Terra (2006-12-21)
 
Desenvolvimento de Jogos com Corona SDK
Desenvolvimento de Jogos com Corona SDKDesenvolvimento de Jogos com Corona SDK
Desenvolvimento de Jogos com Corona SDK
 
Lista 221 Comandos Executar do Windows.docx
Lista 221 Comandos Executar do Windows.docxLista 221 Comandos Executar do Windows.docx
Lista 221 Comandos Executar do Windows.docx
 
Logica5 141120062157-conversion-gate02
Logica5 141120062157-conversion-gate02Logica5 141120062157-conversion-gate02
Logica5 141120062157-conversion-gate02
 
Android 2303
Android 2303Android 2303
Android 2303
 
Curso de Introdução ao Android Básico
Curso de Introdução ao Android BásicoCurso de Introdução ao Android Básico
Curso de Introdução ao Android Básico
 

Mais de Flávio Ribeiro

Snickers: Open Source HTTP API for Media Encoding
Snickers: Open Source HTTP API for Media EncodingSnickers: Open Source HTTP API for Media Encoding
Snickers: Open Source HTTP API for Media EncodingFlávio Ribeiro
 
Building a Video Encoding Pipeline at The New York Times
Building a Video Encoding Pipeline at The New York TimesBuilding a Video Encoding Pipeline at The New York Times
Building a Video Encoding Pipeline at The New York TimesFlávio Ribeiro
 
Towards the Application of WebRTC Peer-to-Peer to Scale Live Video Streaming ...
Towards the Application of WebRTC Peer-to-Peer to Scale Live Video Streaming ...Towards the Application of WebRTC Peer-to-Peer to Scale Live Video Streaming ...
Towards the Application of WebRTC Peer-to-Peer to Scale Live Video Streaming ...Flávio Ribeiro
 
Implementação de Aplicações Móveis e Jogos com Python - Aula 2
Implementação de Aplicações Móveis e Jogos com Python - Aula 2Implementação de Aplicações Móveis e Jogos com Python - Aula 2
Implementação de Aplicações Móveis e Jogos com Python - Aula 2Flávio Ribeiro
 
Implementação de Aplicações Móveis e Jogos com Python - Aula 1
Implementação de Aplicações Móveis e Jogos com Python - Aula 1Implementação de Aplicações Móveis e Jogos com Python - Aula 1
Implementação de Aplicações Móveis e Jogos com Python - Aula 1Flávio Ribeiro
 
BemTV: Modelo Híbrido para Transmissão de Vídeos ao Vivo utilizando Peer-to-Peer
BemTV: Modelo Híbrido para Transmissão de Vídeos ao Vivo utilizando Peer-to-PeerBemTV: Modelo Híbrido para Transmissão de Vídeos ao Vivo utilizando Peer-to-Peer
BemTV: Modelo Híbrido para Transmissão de Vídeos ao Vivo utilizando Peer-to-PeerFlávio Ribeiro
 
Desenvolvimento Mobile & Embedded com Arduino, Python, ARM e Linux
Desenvolvimento Mobile & Embedded com Arduino, Python, ARM e LinuxDesenvolvimento Mobile & Embedded com Arduino, Python, ARM e Linux
Desenvolvimento Mobile & Embedded com Arduino, Python, ARM e LinuxFlávio Ribeiro
 
stewie: Machine Learning para detecção não supervisionada de anomalias
stewie: Machine Learning para detecção não supervisionada de anomaliasstewie: Machine Learning para detecção não supervisionada de anomalias
stewie: Machine Learning para detecção não supervisionada de anomaliasFlávio Ribeiro
 
Test Driven Development - Trabalhe tranquilo e maximize sua produtividade
Test Driven Development - Trabalhe tranquilo e maximize sua produtividadeTest Driven Development - Trabalhe tranquilo e maximize sua produtividade
Test Driven Development - Trabalhe tranquilo e maximize sua produtividadeFlávio Ribeiro
 
Desenvolvimento de aplicações embarcadas utilizando Python
Desenvolvimento de aplicações embarcadas utilizando PythonDesenvolvimento de aplicações embarcadas utilizando Python
Desenvolvimento de aplicações embarcadas utilizando PythonFlávio Ribeiro
 
Introdução a Linguagem de Programação Python
Introdução a Linguagem de Programação PythonIntrodução a Linguagem de Programação Python
Introdução a Linguagem de Programação PythonFlávio Ribeiro
 
Linux em Sistemas Embarcados
Linux em Sistemas EmbarcadosLinux em Sistemas Embarcados
Linux em Sistemas EmbarcadosFlávio Ribeiro
 

Mais de Flávio Ribeiro (12)

Snickers: Open Source HTTP API for Media Encoding
Snickers: Open Source HTTP API for Media EncodingSnickers: Open Source HTTP API for Media Encoding
Snickers: Open Source HTTP API for Media Encoding
 
Building a Video Encoding Pipeline at The New York Times
Building a Video Encoding Pipeline at The New York TimesBuilding a Video Encoding Pipeline at The New York Times
Building a Video Encoding Pipeline at The New York Times
 
Towards the Application of WebRTC Peer-to-Peer to Scale Live Video Streaming ...
Towards the Application of WebRTC Peer-to-Peer to Scale Live Video Streaming ...Towards the Application of WebRTC Peer-to-Peer to Scale Live Video Streaming ...
Towards the Application of WebRTC Peer-to-Peer to Scale Live Video Streaming ...
 
Implementação de Aplicações Móveis e Jogos com Python - Aula 2
Implementação de Aplicações Móveis e Jogos com Python - Aula 2Implementação de Aplicações Móveis e Jogos com Python - Aula 2
Implementação de Aplicações Móveis e Jogos com Python - Aula 2
 
Implementação de Aplicações Móveis e Jogos com Python - Aula 1
Implementação de Aplicações Móveis e Jogos com Python - Aula 1Implementação de Aplicações Móveis e Jogos com Python - Aula 1
Implementação de Aplicações Móveis e Jogos com Python - Aula 1
 
BemTV: Modelo Híbrido para Transmissão de Vídeos ao Vivo utilizando Peer-to-Peer
BemTV: Modelo Híbrido para Transmissão de Vídeos ao Vivo utilizando Peer-to-PeerBemTV: Modelo Híbrido para Transmissão de Vídeos ao Vivo utilizando Peer-to-Peer
BemTV: Modelo Híbrido para Transmissão de Vídeos ao Vivo utilizando Peer-to-Peer
 
Desenvolvimento Mobile & Embedded com Arduino, Python, ARM e Linux
Desenvolvimento Mobile & Embedded com Arduino, Python, ARM e LinuxDesenvolvimento Mobile & Embedded com Arduino, Python, ARM e Linux
Desenvolvimento Mobile & Embedded com Arduino, Python, ARM e Linux
 
stewie: Machine Learning para detecção não supervisionada de anomalias
stewie: Machine Learning para detecção não supervisionada de anomaliasstewie: Machine Learning para detecção não supervisionada de anomalias
stewie: Machine Learning para detecção não supervisionada de anomalias
 
Test Driven Development - Trabalhe tranquilo e maximize sua produtividade
Test Driven Development - Trabalhe tranquilo e maximize sua produtividadeTest Driven Development - Trabalhe tranquilo e maximize sua produtividade
Test Driven Development - Trabalhe tranquilo e maximize sua produtividade
 
Desenvolvimento de aplicações embarcadas utilizando Python
Desenvolvimento de aplicações embarcadas utilizando PythonDesenvolvimento de aplicações embarcadas utilizando Python
Desenvolvimento de aplicações embarcadas utilizando Python
 
Introdução a Linguagem de Programação Python
Introdução a Linguagem de Programação PythonIntrodução a Linguagem de Programação Python
Introdução a Linguagem de Programação Python
 
Linux em Sistemas Embarcados
Linux em Sistemas EmbarcadosLinux em Sistemas Embarcados
Linux em Sistemas Embarcados
 

Implementação de Aplicações Móveis e Jogos com Python - Aula 3

  • 1. Implementação de Aplicações Móveis e Jogos com Python
  • 2. Antes de Comecar  Interpretador Interativo  Maquina de testes de código Python  Escolha uma IDE!  http://www.python.org.br/wiki/IdesPython  Ou o velho Notepad >:)
  • 3. Review  2ª Aula  Orientação a Objetos com Python  Classes  Métodos (construtor)  Atributos  Herança  Módulos e Bibliotecas  SDK s60 e Python  Introdução ao pys60  Appuifw  Algumas Referências!
  • 4. PyS60 – Estrutura de uma Aplicação appuifw  O Objeto appuifw.app  Estrutura
  • 5. PyS60  Exemplo Titulo import appuifw, e32 def quit(): app_lock.signal() appuifw.app.exit_key_handler=quit appuifw.app.title=u"Meu Titulo!" app_lock=e32.Ao_lock() app_lock.wait()
  • 6. PyS60 – Estrutura de uma Aplicação appuifw  appuifw.app.body  Pode ser:  Canvas  Form  Listbox  Text  Área pode ser aumentada!  appuifw.app.screen = 'full'  appuifw.app.screen = 'large'  appuifw.app.screen = 'normal'
  • 7. PyS60  Exemplo Body import appuifw, e32 def quit(): app_lock.signal() appuifw.app.exit_key_handler=quit t=appuifw.Text() appuifw.app.body=t t.add(u"Texto aqui..") t.clear() t.set(u"Texto inteiro.") t.get()
  • 8. PyS60  Menu  Podem ser de 2 tipos  Popup Menu no key default  Selection Lists
  • 9. PyS60  Exemplo Menu import appuifw, e32 def quit(): app_lock.signal() appuifw.app.exit_key_handler=quit def callback_A(): print "A" def callback_C(): print "C" def callback_D(): print "D" appuifw.app.menu=[(u"Item_A", callback_A), (u"Item_B", ((u"Item_C", callback_C), (u"Item_D", callback_D)))] app_lock=e32.Ao_lock() app_lock.wait()
  • 10. PyS60  Exemplo Menu import appuifw, e32 def quit(): app_lock.signal() appuifw.app.exit_key_handler=quit def callback_A(): print "A" def callback_C(): print "C" def callback_D(): print "D" i=appuifw.popup_menu([u"Item1", u"Item2"]) app_lock=e32.Ao_lock() app_lock.wait()
  • 11. PyS60  Exemplo Menu import appuifw, e32 def quit(): app_lock.signal() appuifw.app.exit_key_handler=quit def callback_A(): print "A" def callback_C(): print "C" def callback_D(): print "D" i=appuifw.selection_list([u"Item1", u"Item2"]) app_lock=e32.Ao_lock() app_lock.wait()
  • 12. PyS60  Exemplo Menu import appuifw, e32 def quit(): app_lock.signal() appuifw.app.exit_key_handler=quit def callback_A(): print "A" def callback_C(): print "C" def callback_D(): print "D" i=appuifw.multi_selection_list([u"Item1", u"Item2"], style='checkbox', search_field=1) app_lock=e32.Ao_lock() app_lock.wait()
  • 13. PyS60 - Teclado Exerc cio!í Crie uma Agenda de Contatos. O usuário será capaz de escolher entre adicionar pessoas a agenda (onde o programa pede Nome e Telefone da pessoa) ou buscar pelo nome usando uma multi_selection list. Ao selecionar o nome da pessoa, o programa deverá imprimir em um appuifw.Text() o Nome da pessoa e o Telefone dela. Ao selecionar o menu novamente o appuifw.Text() deverá ser apagado. É desejável que o programa utilize Orientação a Objetos.
  • 15. PyS60 - Teclado  Keyboard  É preciso associar um canvas ao app.body  Área drawable  Captura eventos do teclado canvas = appuifw.Canvas() appuifw.app.body = canvas
  • 16. PyS60 - Teclado  Keyboard  Mapa de Teclas
  • 17. PyS60 - Teclado  Exemplo de Uso import appuifw, key_codes, e32 def keys(event): if event['keycode'] == key_codes.EKeyUpArrow: appuifw.note(u"Up arrow foi pressionado!") elif event['keycode'] == key_codes.EKeyDownArrow: appuifw.note(u"Down Arrow foi pressionado!") def quit(): app_lock.signal() canvas = appuifw.Canvas(event_callback = keys) appuifw.app.body = canvas appuifw.app.exit_key_handler = quit app_lock = e32.Ao_lock() app_lock.wait()
  • 18. PyS60 - Teclado Exerc cio!í Criar uma aplicação que capture eventos do teclado e chame funções da appuifw (query e note, por exemplo.) É desejável que o programa utilize Orientação a Objetos, com bibliotecas de captura de eventos e de gerência dos callbacks.
  • 20. Graphics e appuifw.Canvas  Gráficos 2d e 3d  Interface mais customizada  Gerencia Imagens (graphics.Image)  Desenhos Geométricos  Elipse, linha, retângulo  appuifw.app.body = appuifw.Canvas()
  • 21. Graphics e appuifw.Canvas  Gráficos 2d e 3d  Interface mais customizada  Gerencia Imagens (graphics.Image)  Desenhos Geométricos  Elipse, linha, retângulo  appuifw.app.body = appuifw.Canvas()
  • 22. appuifw.Canvas  appuifw.Canvas  Criação de um Canvas no body da aplicação  Callbacks de redraw e event  Dentro do Canvas pode-se criar:  Linhas  Poligonos  Retângulos  Elipse  Pontos  Textos  O método blit()
  • 23. Graphics e Canvas  Exemplo import graphics, e32, appuifw app_lock = e32.Ao_lock() def quit(): app_lock.signal() appuifw.app.exit_key_handler = quit canvas = appuifw.Canvas() appuifw.app.body = canvas appuifw.app.screen = 'full' canvas.clear(0x339900) canvas.line((40,50,180,20),0) canvas.rectangle((30,45,110,100), fill=(255,255,255)) canvas.ellipse((0,0,100,50), fill=(255,0,0)) canvas.text((150,150),u”Texto”,(0,0,0),'title') app_lock.wait()
  • 24. Graphics e Canvas  Gerenciando Imagens  graphics.Image + appuifw.Canvas  graphics.Image é um buffer  Evita “flicks” na tela  blit()  graphics.Image  resize, transpose, save
  • 25. Graphics e Canvas  Exemplo import e32,key_codes,graphics from appuifw import * def draw_rect(): img.rectangle((50,100,100,150), fill = (255,255,0)) def draw_point(): img.point((90,50), outline=(255,0,0),width=30) def handle_redraw(rect): if img: canvas.blit(img) def handle_event(event): ev = event[“keycode”] if event[“type”] == EEventKeyDown: img.clear((0,0,255)) if ev == key_codes.EKeyUpArrow: draw_point() elif ev == key_codes.EKeyDownArrow: draw_rect() def quit(): app_lock.signal() img = None canvas = Canvas(redraw_callback = handle_redraw, event_callback = handle_event) app.body = canvas app.screen = 'full' app.exit_key_handler = quit w, h = canvas.size img = graphics.Image.new((w,h)) img.clear((0,0,255)) app_lock = e32.Ao_lock() app_lock.wait()
  • 26. PyS60 - Teclado Exerc cio!í Criar uma aplicação que, a cada evento gerado do joystick, mude a cor do body. Criar também um menu (popup_menu) com a escolha de escrever um nome (query). Esse nome escrito irá aparecer no meio da tela com a cor preta (usando canvas.text ao invés de appuifw.text).
  • 29. Data Handling  Gerenciamento de Arquivos e Dados
  • 30. Data Handling  Gerenciamento de Arquivos e Dados  C: → Memória Interna do Dispositivo  D: → RAM (read-only)  E: → Cartão de Memória  Z: → ROM (read-only)  Fotos  C:Images ou E:Images  Músicas  C:Sounds ou E:Sounds  Arquivos  C:Data ou E:Data
  • 31. Data Handling  Criando um Diretório para sua Aplicação import os, os.path PATH = u”C:DataMinhaAplicação” if not os.path.exists(PATH): os.makedirs(PATH)  Criando Arquivos  Os modos podem ser:  a → append  w → write  r → read Arquivo = open(“C:Datanomedoarquivo.txt”,”w”)  wb → Escreve binário
  • 32. Data Handling  Escrevendo e lendo de um Arquivo arquivo = open(“C:Datacontatos.txt”,”w”) arquivo.write(“Essa linha será escrita no arquivo.”) arquivo.write(“Essa aqui já sera a segunda linha do arquivo.”) arquivo.close() arquivo = open(“C:Datacontatos.txt”,”r”) for linha in arquivo: print linha
  • 33. Data Handling  O módulo e32dbm  “Banco de Dados” para Dispositivos Symbian  Tratamento semelhante ao de objetos File  Trata Dicionários  Gerencia arquivos maiores e mais rapidamente  e32dbm.open(DB_FILE, modo)  Modo pode ser:  r → Abre a DB pra leitura  w → Abre a DB para escrita  c → Leitura e Escrita (Se não existir, cria)  Se 'f' for colocado a frente do modo, as modificações no banco ficam em memória até o close() do db
  • 34. Data Handling  Exemplo Import e32dbm db = e32dbm.open(“C:Datadatabase.db”,”cf”) db[“Nome”] = u”Flávio Ribeiro” db[“Idade”] = 21 for key, value in db.items(): print “Chave: “, key print “Valor:”, value db.close()
  • 35.  Módulo responsável por informações do sistema  sysinfo.battery()  Retorna o nivel da bateria (entre 0 e 7)  sysinfo.imei()  Retorna o número de identificação do celular  sysinfo.active_profile()  Retorna o perfil utilizado no momento (Silencioso, Reunião, etc)  sysinfo.display_pixels()  Retorna o tamanho da tela em pixels (muito importante) Sysinfo
  • 36.  Módulo responsável por informações do sistema  sysinfo.free_drivespace()  Retorna o espaço livre em bytes em cada drive  {u'C:': 58463232, u'D:': 9494528, u'Z:': 0}  sysinfo.total_ram()  Retorna o tamanho da memória RAM  sysinfo.free_ram()  Retorna a memória RAM livre  sysinfo.signal_bars()  Retorna o sinal da antena (de 0 a 7)  sysinfo.sw_version()  Versão do firmware Sysinfo
  • 39. Jogos com Python  Exemplos de Jogos com Python  Frets on Fire  Civilization  Battlefield 2  InterZone
  • 40. Jogos com Python  API's e Frameworks  PyGlet  PyOpenGL  Panda3D  Pygame  Mais popular (também mais difundida)  SDL (Simple DirectMedia Layer)  Sprites, Actions, Effects  Linux, Windows, Mac, XO-OLPC, Maemo, s60
  • 41. Jogos com Python  Definições  Surface  Superfícies a serem desenhadas  2d ou 3d (transparência  Em memória ou placa de vídeo  Rect  Retângulos  Delimitam sprites  Display  Manipula a tela  pygame.display.flip()  Dirty Rect
  • 42. Jogos com Python  Definições  Draw  Desenha no display  Linhas, Circulos, Polígonos  Event  Recupera eventos do Input (Teclado, Joystick)  Delimitam sprites  Clock  Define os frames por segundo  pygame.clock.tick()
  • 43. Jogos com Python  Definições  Sprite  Agente ativo  pygame.sprite.Sprite e pygame.sprite.Group  Colisões  Comparação de retângulos dos sprites  Game Loop  Loop Infinito  Captura eventos do input  Trata os eventos  'Pinta' os sprites nas novas localizações  Atualiza a tela (flip() ou update())
  • 50.  Várias funções em um só arquivo  Arquivo: operacoes.py  Funções:  soma(x,y)  subtrai(x,y)  divide(x,y) Namespace e Dicas de um projeto Python import operacoes operacoes.soma(10,20) operacoes.divide(100,2)
  • 51.  Várias Classes em um só arquivo  Arquivo: funcionarios.py  Classes:  Presidente  Diretor  Estagiario Namespace e Dicas de um projeto Python import funcionarios flavio = funcionarios.Estagiario() lucas = funcionarios.Presidente() flavio.trabalha() lucas.toma_cafe()  Métodos  trabalha()  toma_cafe()
  • 52.  Várias Classes em um só arquivo (Exemplo II)  Arquivo: funcionarios.py  Classes:  Presidente  Diretor  Estagiario Namespace e Dicas de um projeto Python from funcionarios import * flavio = Estagiario() lucas = Presidente() flavio.trabalha() lucas.toma_cafe()  Métodos  trabalha()  toma_cafe()
  • 53.  Pacotes  Pasta: conexoes/  Arquivo __init__.py (vazio)  Arquivos:  bluetooth.py → Classes Server e Client  wireless.py → Classes AccessPoint e Client Namespace e Dicas de um projeto Python import conexoes.bluetooth import conexoes.wireless bt = conexoes.bluetooth.Client() wifi = conexoes.wireless.AccessPoint()
  • 54.  Pacotes (Exemplo II)  Pasta: conexoes/  Arquivo __init__.py (vazio)  Arquivos:  bluetooth.py → Classes Server e Client  wireless.py → Classes AccessPoint e Client Namespace e Dicas de um projeto Python from conexoes import bluetooth bt = bluetooth.Client()
  • 55.  Pacotes (Exemplo III)  Pasta: conexoes/  Arquivo __init__.py (vazio)  Arquivos:  bluetooth.py → Classes Server e Client  wireless.py → Classes AccessPoint e Client Namespace e Dicas de um projeto Python from conexoes.bluetooth import Server bt = Server()
  • 56.  Dicas:  Crie uma pasta pra seu programa:  Deixe uma pasta do seu programa para os códigos (src)  Deixe outra pasta para Arquivos no geral (files)  Crie outras necessárias Namespace e Dicas de um projeto Python import os, os.path PATH = u”C:DataMinhaAplicação” if not os.path.exists(PATH): os.makedirs(PATH) import os, os.path Sources = u”C:DataMinhaAplicaçãosrc” if not os.path.exists(Sources): os.makedirs(Sources)
  • 57.  Dicas:  Coloque a pasta de códigos no seu Python Path Assim ele será visível e poderá ser incluído nos seus códigos. Namespace e Dicas de um projeto Python import sys Sources = u”C:DataMinhaAplicaçãosrc” sys.path.append(Sources)