SlideShare una empresa de Scribd logo
1 de 58
Descargar para leer sin conexión
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!

Más contenido relacionado

La actualidad más candente

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
dmmartins
 

La actualidad más candente (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
 

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

Softwares E Aplicativos Robs
Softwares E Aplicativos RobsSoftwares E Aplicativos Robs
Softwares E Aplicativos Robs
Robson Santos
 
Java recursos avançados - streams
Java   recursos avançados - streamsJava   recursos avançados - streams
Java recursos avançados - streams
Armando Daniel
 
Logica5 141120062157-conversion-gate02
Logica5 141120062157-conversion-gate02Logica5 141120062157-conversion-gate02
Logica5 141120062157-conversion-gate02
Lucas Antonio
 

Similar 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
 

Más de Flá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-Peer
Flá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 produtividade
Flávio Ribeiro
 

Más 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)