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!

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

  • 1.
    Implementação de AplicaçõesMó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 – Estruturade uma Aplicação appuifw  O Objeto appuifw.app  Estrutura
  • 5.
    PyS60  Exemplo Titulo importappuifw, 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 – Estruturade 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 importappuifw, 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  Podemser de 2 tipos  Popup Menu no key default  Selection Lists
  • 9.
    PyS60  Exemplo Menu importappuifw, 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 importappuifw, 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 importappuifw, 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 importappuifw, 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 Exerccio!í 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.
  • 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 Exerccio!í 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.
  • 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çãode 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 Exerccio!í 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.
  • 28.
  • 29.
  • 30.
    Data Handling  Gerenciamentode 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  Criandoum 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  Escrevendoe 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  Omó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 Importe32dbm 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ávelpor 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ávelpor 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.
  • 38.
  • 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())
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
     Várias funçõesem 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 Classesem 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 Classesem 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 (ExemploII)  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 (ExemploIII)  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:  Crieuma 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:  Coloquea 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.