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

484 views

Published on

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

Published in: Software
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
484
On SlideShare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
10
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

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

  1. 1. Implementação de Aplicações Móveis e Jogos com Python
  2. 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. 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. 4. PyS60 – Estrutura de uma Aplicação appuifw  O Objeto appuifw.app  Estrutura
  5. 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. 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. 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. 8. PyS60  Menu  Podem ser de 2 tipos  Popup Menu no key default  Selection Lists
  9. 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. 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. 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. 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. 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.
  14. 14. Teclado
  15. 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. 16. PyS60 - Teclado  Keyboard  Mapa de Teclas
  17. 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. 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.
  19. 19. Graphics e Canvas
  20. 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. 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. 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. 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. 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. 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. 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).
  27. 27. Hora do Lanche!
  28. 28. Data Handling
  29. 29. Data Handling  Gerenciamento de Arquivos e Dados
  30. 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. 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. 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. 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. 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. 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. 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
  37. 37. Jogos com Python
  38. 38. Jogos com Python
  39. 39. Jogos com Python  Exemplos de Jogos com Python  Frets on Fire  Civilization  Battlefield 2  InterZone
  40. 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. 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. 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. 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())
  44. 44. Jogos com Python Demo!
  45. 45. Jogos com Python
  46. 46. Jogos com Python
  47. 47. Jogos com Python
  48. 48. Jogos com Python
  49. 49. Dicas de Organização de um Projeto
  50. 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. 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. 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. 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. 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. 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. 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. 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)
  58. 58. Projetos!

×