Implementação de Aplicações Móveis e Jogos com Python - Aula 4
-
Upload
flavio-ribeiro -
Category
Software
-
view
5.742 -
download
1
description
Transcript of Implementação de Aplicações Móveis e Jogos com Python - Aula 4
![Page 1: Implementação de Aplicações Móveis e Jogos com Python - Aula 4](https://reader034.fdocumentos.tips/reader034/viewer/2022050808/549657cfac7959ff2d8b50b7/html5/thumbnails/1.jpg)
Implementação de Aplicações Móveis e Jogos com Python
![Page 2: Implementação de Aplicações Móveis e Jogos com Python - Aula 4](https://reader034.fdocumentos.tips/reader034/viewer/2022050808/549657cfac7959ff2d8b50b7/html5/thumbnails/2.jpg)
Review
3ª Aula Mais appuifw
Title, body, menus Teclado Graphics e Canvas Data Handling Um pouco de jogos :-)
![Page 3: Implementação de Aplicações Móveis e Jogos com Python - Aula 4](https://reader034.fdocumentos.tips/reader034/viewer/2022050808/549657cfac7959ff2d8b50b7/html5/thumbnails/3.jpg)
Pra Hoje...
4ª Aula Fim do Appuifw
Forms e tabs
Exercícios
Bluetooth Networking Camera O módulo sysinfo Dicas de um Projeto
Definição dos grupos e Projetos
![Page 4: Implementação de Aplicações Móveis e Jogos com Python - Aula 4](https://reader034.fdocumentos.tips/reader034/viewer/2022050808/549657cfac7959ff2d8b50b7/html5/thumbnails/4.jpg)
Appuifw:Forms e Tabs
![Page 5: Implementação de Aplicações Móveis e Jogos com Python - Aula 4](https://reader034.fdocumentos.tips/reader034/viewer/2022050808/549657cfac7959ff2d8b50b7/html5/thumbnails/5.jpg)
Appuifw.Form
appuifw.Form
Objeto de formulários da s60
Recebe no construtor uma lista de tuplas eseu tipo de edição.
(nome,tipo[,valor default]) Nome é um unicode Tipo pode ser:
'text' 'number' 'date' 'time' 'combo' 'float'
![Page 6: Implementação de Aplicações Móveis e Jogos com Python - Aula 4](https://reader034.fdocumentos.tips/reader034/viewer/2022050808/549657cfac7959ff2d8b50b7/html5/thumbnails/6.jpg)
Appuifw.Form
appuifw.Form
Objeto de formulários da s60
Tem os seguintes atributos
Flags FFormEditModeOnly – Aceita edição FFormViewModeOnly – Não aceita edição
Menu Recebe uma lista de tuplas (titulo, callback)
Callback é uma referencia a função Titulo é um unicode
![Page 7: Implementação de Aplicações Móveis e Jogos com Python - Aula 4](https://reader034.fdocumentos.tips/reader034/viewer/2022050808/549657cfac7959ff2d8b50b7/html5/thumbnails/7.jpg)
Appuifw.Form
appuifw.Form
Objeto de formulários da s60
Tem os seguintes Métodos
Execute() Apresenta a Form na UI
insert() Insere itens ao Form
Pop() e length()
save_hook()
![Page 8: Implementação de Aplicações Móveis e Jogos com Python - Aula 4](https://reader034.fdocumentos.tips/reader034/viewer/2022050808/549657cfac7959ff2d8b50b7/html5/thumbnails/8.jpg)
Appuifw.Form
import appuifwmodelos = [u'e61',u'xpressmusic',u'iphone']fields = [(u'Company','text'), (u'Model', 'combo', (modelos,0))]myForm = appuifw.Form( fields, flags=appuifw.FFormEditModeOnly)myForm.execute()
Exemplo 1
![Page 9: Implementação de Aplicações Móveis e Jogos com Python - Aula 4](https://reader034.fdocumentos.tips/reader034/viewer/2022050808/549657cfac7959ff2d8b50b7/html5/thumbnails/9.jpg)
Appuifw.Form
import appuifw, time models = [u"6600", u"6630", u"7610", u"N90", u"N70"] fields = [(u"Company", 'text', u"Nokia"), (u"Model", 'combo', (models, 0)), (u"Amount",'number', 1), (u"Date", 'date', time.time()), (u"Time", 'time')]
saved = False def save(arg):
global savedsaved = Truereturn True
myForm = appuifw.Form(fields, flags=appuifw.FFormEditModeOnly) myForm.save_hook = save myForm.execute() if saved == True:
print myForm[0][2], models[myForm[1][2][1]], myForm[2][2]print time.strftime("%d/%m/%Y", time.localtime(myForm[3][2]))print time.strftime(time.ctime(myForm[4][2])[11:20])
Exemplo 2
![Page 10: Implementação de Aplicações Móveis e Jogos com Python - Aula 4](https://reader034.fdocumentos.tips/reader034/viewer/2022050808/549657cfac7959ff2d8b50b7/html5/thumbnails/10.jpg)
PyS60 – Exercício 1
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.
![Page 11: Implementação de Aplicações Móveis e Jogos com Python - Aula 4](https://reader034.fdocumentos.tips/reader034/viewer/2022050808/549657cfac7959ff2d8b50b7/html5/thumbnails/11.jpg)
PyS60 – Exercício 2
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.
![Page 12: Implementação de Aplicações Móveis e Jogos com Python - Aula 4](https://reader034.fdocumentos.tips/reader034/viewer/2022050808/549657cfac7959ff2d8b50b7/html5/thumbnails/12.jpg)
PyS60 – Exercício 3
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).
![Page 13: Implementação de Aplicações Móveis e Jogos com Python - Aula 4](https://reader034.fdocumentos.tips/reader034/viewer/2022050808/549657cfac7959ff2d8b50b7/html5/thumbnails/13.jpg)
Bluetooth
![Page 14: Implementação de Aplicações Móveis e Jogos com Python - Aula 4](https://reader034.fdocumentos.tips/reader034/viewer/2022050808/549657cfac7959ff2d8b50b7/html5/thumbnails/14.jpg)
Bluetooth
OBEX (OBject EXchange) Protocolo Bluetooth voltado pra transmissão de arquivos (audio,
imagem, etc)
![Page 15: Implementação de Aplicações Móveis e Jogos com Python - Aula 4](https://reader034.fdocumentos.tips/reader034/viewer/2022050808/549657cfac7959ff2d8b50b7/html5/thumbnails/15.jpg)
Bluetooth
OBEX (OBject EXchange) Protocolo Bluetooth voltado pra transmissão de arquivos (audio,
imagem, etc) Para scan de dispositivos OBEX:
import socketendereco, servicos = socket.bt_obex_discover()print endereco,servicos
![Page 16: Implementação de Aplicações Móveis e Jogos com Python - Aula 4](https://reader034.fdocumentos.tips/reader034/viewer/2022050808/549657cfac7959ff2d8b50b7/html5/thumbnails/16.jpg)
Bluetooth Enviando uma foto
import camera, e32, socket, appuifwfoto = u"C:\\Images\\arquivo_foto.jpg"
def enviar_foto(): address, services = socket.bt_obex_discover() if u'OBEX Object Push' in services: channel = services[u'OBEX Object Push'] socket.bt_obex_send_file(address, channel, arquivo_foto) appuifw.note(u"Foto enviada!", "info") else: appuifw.note(u"Dispositivo não preparado.", "error")
def tirar_foto(): photo = camera.take_photo() canvas.blit(photo) photo.save(arquivo_foto)
def quit(): app_lock.signal()
canvas = appuifw.Canvas()appuifw.app.body = canvasappuifw.app.exit_key_handler = quitappuifw.app.menu = [(u"Tirar Foto", tirar_foto), (u"Enviar", enviar_foto)]app_lock = e32.Ao_lock()app_lock.wait()
![Page 17: Implementação de Aplicações Móveis e Jogos com Python - Aula 4](https://reader034.fdocumentos.tips/reader034/viewer/2022050808/549657cfac7959ff2d8b50b7/html5/thumbnails/17.jpg)
RFCOMM (Radio Frequency COMMunication) Protocolo Bluetooth para transmissão (RX e TX) de texto ou
raw data
Bluetooth
![Page 18: Implementação de Aplicações Móveis e Jogos com Python - Aula 4](https://reader034.fdocumentos.tips/reader034/viewer/2022050808/549657cfac7959ff2d8b50b7/html5/thumbnails/18.jpg)
RFCOMM (Radio Frequency COMMunication) Protocolo Bluetooth para transmissão (RX e TX) de texto ou
raw data Para scan de dispositivos RFCOMM:
Bluetooth
import socketendereco, servicos = socket.bt_discover()print endereco,servicos
![Page 19: Implementação de Aplicações Móveis e Jogos com Python - Aula 4](https://reader034.fdocumentos.tips/reader034/viewer/2022050808/549657cfac7959ff2d8b50b7/html5/thumbnails/19.jpg)
Bluetooth
Fazendo um CHAT – Lado Servidor
import socket, appuifw
def chat_server(): server = socket.socket(socket.AF_BT, socket.SOCK_STREAM) channel = socket.bt_rfcomm_get_available_server_channel(server) server.bind(("", channel)) server.listen(1) socket.bt_advertise_service(u"NossoChat", server, True, socket.RFCOMM) socket.set_security(server, socket.AUTH | socket.AUTHOR) appuifw.note(u”Esperando Conexão”) conn, client_addr = server.accept() appuifw.note(u”Conectado!”) talk(conn, None)
![Page 20: Implementação de Aplicações Móveis e Jogos com Python - Aula 4](https://reader034.fdocumentos.tips/reader034/viewer/2022050808/549657cfac7959ff2d8b50b7/html5/thumbnails/20.jpg)
Bluetooth
Fazendo um CHAT – Lado Cliente
def chat_client(): conn = socket.socket(socket.AF_BT, socket.SOCK_STREAM) address, services = socket.bt_discover() if 'NossoChat' in services: channel = services[u'btchat'] conn.connect((address, channel)) appuifw.note(u”Conectado!”) talk(None, conn) else: appuifw.note(u"O celular não está rodando o chat.", "error")
![Page 21: Implementação de Aplicações Móveis e Jogos com Python - Aula 4](https://reader034.fdocumentos.tips/reader034/viewer/2022050808/549657cfac7959ff2d8b50b7/html5/thumbnails/21.jpg)
Bluetooth Fazendo um CHAT – Comum
def receive_msg(fd): print "Esperando a mensagem.." reply = fd.readline() print "Recebido: " + reply appuifw.note(unicode(reply), "info")
def send_msg(fd): msg = appuifw.query(u"Envie:", "text") print "Enviado: " + msg print >> fd, msg
def talk(client, server): try: if server: fd = server.makefile("rw", 0) receive_msg(fd) if client: fd = client.makefile("rw", 0) while True: send_msg(fd) receive_msg(fd
except: appuifw.note(u"Desconectou", "info") if client: client.close() if server: server.close()
index = appuifw.popup_menu([u"Servir", u"Conectar"])if index != None: if index: chat_client() else: chat_server()
![Page 22: Implementação de Aplicações Móveis e Jogos com Python - Aula 4](https://reader034.fdocumentos.tips/reader034/viewer/2022050808/549657cfac7959ff2d8b50b7/html5/thumbnails/22.jpg)
Networking
![Page 23: Implementação de Aplicações Móveis e Jogos com Python - Aula 4](https://reader034.fdocumentos.tips/reader034/viewer/2022050808/549657cfac7959ff2d8b50b7/html5/thumbnails/23.jpg)
Networking
Maneiras de acessar servidores Computação Distribuída
Módulos de Acesso httplib, urllib (core) json.py (Patric Logan)
http://meu-ip/json.py
![Page 24: Implementação de Aplicações Móveis e Jogos com Python - Aula 4](https://reader034.fdocumentos.tips/reader034/viewer/2022050808/549657cfac7959ff2d8b50b7/html5/thumbnails/24.jpg)
Networking
Fazendo um simples download
import urllib
url = “http://pagina/arquivo.html”arquivo = “C:\\Data\\arquivo.txt”
urllib.urlretrieve(url, arquivo)
![Page 25: Implementação de Aplicações Móveis e Jogos com Python - Aula 4](https://reader034.fdocumentos.tips/reader034/viewer/2022050808/549657cfac7959ff2d8b50b7/html5/thumbnails/25.jpg)
Networking
Comunicando-se através de POST Lado Cliente (Celular)
import httplib, urllib, appuifw
def senddata():params = urllib.urlencode({'data': "Flavio"})headers = {"Content-type": "application/x-www-form-urlencoded","Accept":
"text/plain"}conn = httplib.HTTPConnection("www.flavioribeiro.com")appuifw.note(u'Espere...')conn.request("POST", "/exemplo.php", params, headers)response = conn.getresponse()uniresponse = unicode(response.read())conn.close()appuifw.note(uniresponse)
senddata()
![Page 26: Implementação de Aplicações Móveis e Jogos com Python - Aula 4](https://reader034.fdocumentos.tips/reader034/viewer/2022050808/549657cfac7959ff2d8b50b7/html5/thumbnails/26.jpg)
Networking
Comunicando-se através de POST Lado Servidor (PHP!)
<?php$data = $_REQUEST['data'];$filename = 'textfile.txt';$handle = fopen($filename, 'a+');$text="\n";fwrite($handle, $data);fwrite($handle, $text);echo 'Post com Sucesso!';fclose($handle);?>
![Page 27: Implementação de Aplicações Móveis e Jogos com Python - Aula 4](https://reader034.fdocumentos.tips/reader034/viewer/2022050808/549657cfac7959ff2d8b50b7/html5/thumbnails/27.jpg)
Série 'Network Programming for s60'do Marcelo Barros
http://croozeus.com/
![Page 28: Implementação de Aplicações Móveis e Jogos com Python - Aula 4](https://reader034.fdocumentos.tips/reader034/viewer/2022050808/549657cfac7959ff2d8b50b7/html5/thumbnails/28.jpg)
Camera
![Page 29: Implementação de Aplicações Móveis e Jogos com Python - Aula 4](https://reader034.fdocumentos.tips/reader034/viewer/2022050808/549657cfac7959ff2d8b50b7/html5/thumbnails/29.jpg)
Camera
Módulo responsável por interação direta com a(s) camera(s)
Alguns métodos:
cameras_available() image_modes() flash_modes() max_zoom() take_photo()
![Page 30: Implementação de Aplicações Móveis e Jogos com Python - Aula 4](https://reader034.fdocumentos.tips/reader034/viewer/2022050808/549657cfac7959ff2d8b50b7/html5/thumbnails/30.jpg)
Camera
ViewFinder Feedback pro usuário sobre a posição da imagem
![Page 31: Implementação de Aplicações Móveis e Jogos com Python - Aula 4](https://reader034.fdocumentos.tips/reader034/viewer/2022050808/549657cfac7959ff2d8b50b7/html5/thumbnails/31.jpg)
import camera, appuifw, e32
def viewfinder(img): canvas.blit(img)
def quit(): camera.stop_finder() lock.signal()
appuifw.app.body = canvas = appuifw.Canvas()appuifw.app.exit_key_handler = quitcamera.start_finder(viewfinder)lock = e32.Ao_lock()lock.wait()
Camera
ViewFinder Feedback pro usuário sobre a posição da imagem
![Page 32: Implementação de Aplicações Móveis e Jogos com Python - Aula 4](https://reader034.fdocumentos.tips/reader034/viewer/2022050808/549657cfac7959ff2d8b50b7/html5/thumbnails/32.jpg)
Camera
camera.take_photo() Retorna um objeto graphics.Image
import camera
foto = camera.take_photo()foto.save(“C:\\Images\\foto.jpg”)
![Page 33: Implementação de Aplicações Móveis e Jogos com Python - Aula 4](https://reader034.fdocumentos.tips/reader034/viewer/2022050808/549657cfac7959ff2d8b50b7/html5/thumbnails/33.jpg)
O módulo sysinfo
![Page 34: Implementação de Aplicações Móveis e Jogos com Python - Aula 4](https://reader034.fdocumentos.tips/reader034/viewer/2022050808/549657cfac7959ff2d8b50b7/html5/thumbnails/34.jpg)
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
![Page 35: Implementação de Aplicações Móveis e Jogos com Python - Aula 4](https://reader034.fdocumentos.tips/reader034/viewer/2022050808/549657cfac7959ff2d8b50b7/html5/thumbnails/35.jpg)
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
![Page 36: Implementação de Aplicações Móveis e Jogos com Python - Aula 4](https://reader034.fdocumentos.tips/reader034/viewer/2022050808/549657cfac7959ff2d8b50b7/html5/thumbnails/36.jpg)
Dicas de Organizaçãode um Projeto
![Page 37: Implementação de Aplicações Móveis e Jogos com Python - Aula 4](https://reader034.fdocumentos.tips/reader034/viewer/2022050808/549657cfac7959ff2d8b50b7/html5/thumbnails/37.jpg)
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)
![Page 38: Implementação de Aplicações Móveis e Jogos com Python - Aula 4](https://reader034.fdocumentos.tips/reader034/viewer/2022050808/549657cfac7959ff2d8b50b7/html5/thumbnails/38.jpg)
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()
![Page 39: Implementação de Aplicações Móveis e Jogos com Python - Aula 4](https://reader034.fdocumentos.tips/reader034/viewer/2022050808/549657cfac7959ff2d8b50b7/html5/thumbnails/39.jpg)
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()
![Page 40: Implementação de Aplicações Móveis e Jogos com Python - Aula 4](https://reader034.fdocumentos.tips/reader034/viewer/2022050808/549657cfac7959ff2d8b50b7/html5/thumbnails/40.jpg)
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.bluetoothimport conexoes.wireless
bt = conexoes.bluetooth.Client()
wifi = conexoes.wireless.AccessPoint()
![Page 41: Implementação de Aplicações Móveis e Jogos com Python - Aula 4](https://reader034.fdocumentos.tips/reader034/viewer/2022050808/549657cfac7959ff2d8b50b7/html5/thumbnails/41.jpg)
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()
![Page 42: Implementação de Aplicações Móveis e Jogos com Python - Aula 4](https://reader034.fdocumentos.tips/reader034/viewer/2022050808/549657cfac7959ff2d8b50b7/html5/thumbnails/42.jpg)
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()
![Page 43: Implementação de Aplicações Móveis e Jogos com Python - Aula 4](https://reader034.fdocumentos.tips/reader034/viewer/2022050808/549657cfac7959ff2d8b50b7/html5/thumbnails/43.jpg)
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:\\Data\\MinhaAplicação”if not os.path.exists(PATH): os.makedirs(PATH)
import os, os.path
Sources = u”C:\\Data\\MinhaAplicação\\src”if not os.path.exists(Sources): os.makedirs(Sources)
![Page 44: Implementação de Aplicações Móveis e Jogos com Python - Aula 4](https://reader034.fdocumentos.tips/reader034/viewer/2022050808/549657cfac7959ff2d8b50b7/html5/thumbnails/44.jpg)
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:\\Data\\MinhaAplicação\\src”sys.path.append(Sources)
![Page 45: Implementação de Aplicações Móveis e Jogos com Python - Aula 4](https://reader034.fdocumentos.tips/reader034/viewer/2022050808/549657cfac7959ff2d8b50b7/html5/thumbnails/45.jpg)
Projetos!