Implementação de Aplicações Móveis e Jogos com Python
Review
1ª Aula Apresentação de Python Cenário de Python em Mobile & Embedded Ciclo de Desenvolvimento de linguagens interpretadas Sintaxe de Python
Interpretador Interativo Variáveis e Tipos
Strings Listas e Tuplas Dicionários
Laços Funções
Orientação a Objetos com Python
Orientação a Objetos com Python
A estrutura de uma Classe
class NomeDaClasse(object):
def metodoUm(self, argumento1):self.atributo1 = argumento1
def metodoDois(self):print self.atributo1
Gerando uma instância
MeuObjeto = NomeDaClasse()
Orientação a Objetos com Python
O método construtor
class NomeDaClasse(object):
def __init__(self, argumento1):print 'Fui inicializado!'self.atributo1 = argumento1
def metodoDois(self):print self.atributo1
Orientação a Objetos com Python
Atributos Privados e Protegidos
Não existe implementação que assegure isso Convenção
_nomeDoMetodo (1 underscore) Não deve ser acessado externamente
class NomeDaClasse(object):
def __init__(self, argumento1):print 'Fui inicializado!'self.atributo1 = argumento1
def __metodoDois(self):print 'Esse método é privado! :)'
Orientação a Objetos com Python
Alguns Exemplos
Personagem de Jogo Evento
Orientação a Objetos com Python
Atributos de Classe
>>> class Pessoa(object):... populacao = 0... def __init__(self):... self.__class__.populacao+=1... >>> flavio = Pessoa()>>> Pessoa.populacao1>>> igor = Pessoa()>>> Pessoa.populacao2
Orientação a Objetos com Python
Métodos Estáticos
class MyClass(object): def SomeMethod(x): print x SomeMethod = staticmethod(SomeMethod)
>>> MyClass.SomeMethod(15)15>>> obj = MyClass()>>> obj.SomeMethod(15)15
Orientação a Objetos com Python
Métodos de Classe
class MyClass(object): def SomeMethod(cls, x): print cls, x SomeMethod = classmethod(SomeMethod)
>>> MyClass.SomeMethod(15)__main__.MyClass 15>>> obj = MyClass()>>> obj.SomeMethod(15)__main__.MyClass 15
Orientação a Objetos com Python
Herança
class Poligono:
def ehPoligono(self):return True
class Triangulo(Poligono):def __init__(self):
self.area = 100self.lados = 3
def getArea(self):return self.area
Módulos e BibliotecasPython
Módulos e Bibliotecas Python
Biblioteca
Arquivo que contém uma ou mais classes Acessadas através de import
Módulos e Bibliotecas Python
Módulo
Pasta que contém vários arquivos (bibliotecas) Acessadas através de import modulo.biblioteca
Módulos e Bibliotecas Python
Alguns módulos importantes
Os
Time
Math
Appuifw (s60)
SDK Python for s60
SDK Python for s60 Não disponível para Linux (ainda)
Passos pra Instalação (no Windows)
Baixe os 3 instaladores em:
http://[MEU_IP]/
Execute o Instalador do ActivePerl Descompacte o S60-SDK e execute o setup.exe
next → next → install Descompacte o PythonForS60-SDK
Copie o conteúdo de epoc32/ para: C:\Symbian\9.2\S60...\Epoc32\
Seus códigos vão em: C:\Symbian\9.2\S60...\Epoc32\winscw\c\python\
Introdução a Pythonfor s60
Sintaxe de PyS60
PyS60
appuifw (Application User Interface Framework)
Interfaces Gráficas nativas da s60
appuifw.note: Notificações 'pop-up' appuifw.query: Janela de input (1 campo) appuifw.multi_query: Janela de input (2 campos) appuifw.popup_menu: Menu Simples appuifw.selection_list: Lista com Busca appuifw.multi_selection_list: Lista capaz de selecionar vários
itens
PyS60 - appuifw
appuifw.note
Descrição: Simples Janela de Notificação
Sintaxe: appuifw.note(texto, tipo)
Tipos podem ser: Info Error Conf
PyS60 - appuifw
PyS60 - appuifw
appuifw.query
Entrada de Dados simples
Sintaxe: appuifw.query(texto,tipo[,valor inicial])
Tipos podem ser: Text Number Date Time Code Query Float
PyS60 - appuifw
appuifw.multi_query
Entrada de Dados Com 2 Campos
Sintaxe: appuifw.multi_query(label1,label2)
PyS60 - appuifw
appuifw.popup_menu
Menu 'Pop-up'
Sintaxe: appuifw.popup_menu(lista_com_escolhas[,label])
Retorna o indice da lista_de_escolhas
PyS60 - appuifw
appuifw.selection_list
Seleção com busca (lista grande)
Sintaxe: appuifw.selection_list(lista_com_escolhas[,busca]) Busca pode ser 0 ou 1
Retorna o indice da lista_com_escolhas
PyS60 - appuifw
appuifw.multi_selection_list
Seleção com busca e capacidade de seleção de mais de um item
Sintaxe: appuifw.multi_selection_list(lista[,style,busca]) Busca pode ser 0 ou 1
PyS60 - messaging
messaging
Módulo de manipulação de mensagens SMS
Sintaxe: messaging.sms_send('+Numero',u'Mensagem')
PyS60 - messaging
inbox
Acessando a Caixa de Entrada
Import inbux, appuifw
box = inbox.Inbox()
for sms_id in box.sms_messages()[:5]:msg = box.content(sms_id)appuifw.note(msg)
PyS60 - messaging
Aplicação Funcional
Import appuifw, messaging
alunos = [u'flavio',u'lucas','u'danilo',u'joao',u'jose',u'maria']
ind_presentes = appuifw.multi_selection_list(alunos, 'checkbox',1)presentes = “”
for indice in ind_presentes:presentes+= alunos[indice] + “ | ”
presentes += u' Estavam presentes.'
appuifw.note(u'Enviando SMS')messaging.sms_send('+558399814441', presentes)appuifw.note(u'Enviada!')
PyS60 – Estrutura de uma Aplicação appuifw
O Objeto appuifw.app
Estrutura
PyS60
Exemplo
import appuifw, e32
def quit():appuifw.note(u”Saindo..”)app_lock.signal()
appuifw.app.exit_key_handler = quitappuifw.app.title = u'Primeira aplicação'appuifw.note(u”Aplicacao rodando..”)
app_lock = e32.Ao_lock()app_lock.wait()
PyS60
Exemplo 2import appuifw, e32
def foto():appuifw.note(u'Tirando foto')
def claro():appuifw.note(u'Mais claro')
def escuro():appuifw.note(u'Mais Escuro')
def quit():appuifw.note(u”Saindo..”)app_lock.signal()
appuifw.app.exit_key_handler = quitappuifw.app.title = u'Segunda aplicação'
appuifw.app.menu = [(u”Tirar Foto”, foto),(u”Editar Foto”, ((u'Claro',claro),(u'Escuro',escuro)))]
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 - Sound
Text to Speech
Import appuifw. audio
texto = appuifw.query(u”Digite uma palavra:”, “text”)audio.say(text)
PyS60 - Sound
Mp3 Player
import audio
sound = audio.Sound.open("E:\\Sounds\\mysound.mp3")
def playMP3(): sound.play()
playMP3()
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 Usoimport appuifw, key_codes, e32
def keys(event): if event['keycode'] == key_codes.EKeyUpArrow: appuifw.note(u"Up arrow was pressed") elif event['keycode'] == key_codes.EKey2: appuifw.note(u"Key 2 was pressed")
def quit(): app_lock.signal()
canvas = appuifw.Canvas(event_callback = keys)appuifw.app.body = canvasappuifw.app.exit_key_handler = quitapp_lock = e32.Ao_lock()app_lock.wait()
Prática!