Implementação de Aplicações Móveis
e Jogos com Python
Internet Tablets
Internet Tablets
Internet Tablets
 O que são?
 Dispositivos móveis capazes de conectar-se a internet através
de redes wireless ou bluetooth (agora também com 3g!)
Internet Tablets
 O que são?
 Dispositivos móveis capazes de conectar-se a internet através
de redes wireless ou bluetooth.
 Hardware
 Tela resolução de 800x480
 Processador ARM-Based (330mhz ~ 600mhz)
 1GB~128MB Memória RAM
 WLAN (bg) e Bluetooth
 Telas Sensíveis ao toque
 Teclado QWERTY embutido (em alguns)
Internet Tablets
 Sistemas Operacionais (baseados em Linux)
 Maemo
 Mamona
 Ubuntu (9.04)
 Gentoo
O OpenEmbedded
 O que é?
 Build Framework pra embedded Linux
 bitbake
 Arquivos de metadata
Quem usa?
 OpenMoko
 Idéia de desenvolvimento de celular 100% livre
Quem usa?
 Ångström
 Distribuição mais “madura” do OE
 Dispositivos que aceitam essa distro:
 Nokia 770 Internet Tablet
 HTC Universal / iMate JasJar
 Motorola A780
 Psion| Teklogix NetBook Pro
 Gumstix and Kouchuk-Bars
 Beagle Board
 Pandora
Quem usa?
 BeagleBoard
● HW baseado em OMAP3
● Baixo custo
– $ 149
● Baixo consumo de energia
– Máximo 2W
● http://beagleboard.org
– Esquema de HW aberto o/
Quem usa?
 BeagleBoard
U-boot: acesso via Minicom
sudo apt-get install minicom
minicom --setup
minicom
Quem usa?
Quem usa?
 Palm Pre
 Aposta da Palm em reverter o jogo
 WebOS
Quem usa?
 KaeilOS
 Fabricante de Hardware
 Suporte Pago
Internet Tablets
 Projetos e Softwares
 Mozilla Fennec (Firefox pra Mobile)
 Brisa UPnP
 Canola
 CarMan
 Tapioca Framework
 Maemo Community (No Google Summer of Code)
Internet Tablets
Demo!
Off-Topic: Arduino
● O que é?
É um projeto de Hardware e
Software Livre voltado para
artistas, designers, hobbystas ou
qualquer um interessado em criar
objetos e ambientes interativos.
Arduino
● O que é?
 Arduino Programming Language (Baseada em Wiring)
 Arduino Development Environment (IDE baseada em Processing)
 Pode ser feito a mão (Paperduino, Severino, Toscoduino, etc)
 Múltiplas derivações
 Comunicação fácil
 Ciclo de desenvolvimento rápido
 Barato!
Arduino
● Hardware
 Microcontrolador Atmega168
 RISC (131 instruções)
 24 Mhz
 NVM de 16KBytes (2k usados no bootloader)
 1KByte de SRAM
 Portas AD
 UART
 6v – 20v (Recomendado 7v a 12v)
Arduino
● Software Estrutura Básica
ArduinoArduino
Arduino
● Ciclo de Desenvolvimento
● Shields
Arduino
● Computadores (lado Computador)
PySerial
Arduino
Arduino
● Dispositivos Móveis
Pra PyS60 e Bluetooth: lightblue
Jogos com Python
Jogos com Python
PyGame
 Criando um joguinho do tipo Arkanoid
PyGame
 A Classe bouncer
class Bouncer(pygame.sprite.Sprite):
def __init__(self, startpos):
pygame.sprite.Sprite.__init__(self)
#direcao: 1=direita, -1=esquerda
self.direction = 1
#carrega a imagem e a posiciona na tela
self.image, self.rect = load_image('bouncer.gif')
self.rect.centerx = startpos[0]
self.rect.centery = startpos[1]
def update(self):
#multiplicamos x por 3 pro bouncer mover-seum pouco mais rápido!
self.rect.move_ip((self.direction*3,0))
#se o bouncer atingir os limites da tela, invertemos a sua direcao
if self.rect.left < 0:
self.direction = 1
elif self.rect.right > width:
self.direction = -1
PyGame
 A Classe ball
class Ball(pygame.sprite.Sprite):
"""classe para a bola"""
def __init__(self, startpos):
pygame.sprite.Sprite.__init__(self)
self.speed = [2,2]
#carrega a imagem e a posiciona na tela
self.image, self.rect = load_image('ball.gif')
self.rect.centerx = startpos[0]
self.rect.centery = startpos[1]
#salva a posicao inicial para ser reutilizada
#quando a bola sair da tela pelo fundo
self.init_pos = startpos
def update(self):
self.rect.move_ip(self.speed)
#se a bola atingir os lados da tela, inverte a
#direcao horizontal (x)
if self.rect.left < 0 or self.rect.right > width:
self.speed[0] = -self.speed[0]
#se a bola atingir o topo da tela, inverte a
#posicao vertical (y)
if self.rect.top < 0:
self.speed[1] = -self.speed[1]
#se a bola atingir o fundo da tela, reseta
#a sua posicao
if self.rect.bottom > height:
self.rect.centerx = self.init_pos[0]
self.rect.centery = self.init_pos[1]
PyGame
 Checando eventos (já no mainloop!)
#checa eventos de teclado
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
bouncer.direction = -1
if event.key == pygame.K_RIGHT:
bouncer.direction = 1
PyGame
 Reagindo a colisões
if bouncer.rect.colliderect(ball.rect):
if ball.speed[1] > 0:
ball.speed[1] = -ball.speed[1]
PyGame
 Atualizando a tela e redesenhando
#atualiza os objetos
ball.update()
bouncer.update()
#redesenha a tela
screen.fill(black)
screen.blit(ball.image, ball.rect)
screen.blit(bouncer.image, bouncer.rect)
pygame.display.flip()
Tudo Pronto!
PyGame
Exerc cio!í
Faça um pong!
Práticas de Conectividade
(web e bluetooth)

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

  • 1.
    Implementação de AplicaçõesMóveis e Jogos com Python
  • 2.
  • 3.
  • 4.
    Internet Tablets  Oque são?  Dispositivos móveis capazes de conectar-se a internet através de redes wireless ou bluetooth (agora também com 3g!)
  • 5.
    Internet Tablets  Oque são?  Dispositivos móveis capazes de conectar-se a internet através de redes wireless ou bluetooth.  Hardware  Tela resolução de 800x480  Processador ARM-Based (330mhz ~ 600mhz)  1GB~128MB Memória RAM  WLAN (bg) e Bluetooth  Telas Sensíveis ao toque  Teclado QWERTY embutido (em alguns)
  • 6.
    Internet Tablets  SistemasOperacionais (baseados em Linux)  Maemo  Mamona  Ubuntu (9.04)  Gentoo
  • 7.
    O OpenEmbedded  Oque é?  Build Framework pra embedded Linux  bitbake  Arquivos de metadata
  • 8.
    Quem usa?  OpenMoko Idéia de desenvolvimento de celular 100% livre
  • 9.
    Quem usa?  Ångström Distribuição mais “madura” do OE  Dispositivos que aceitam essa distro:  Nokia 770 Internet Tablet  HTC Universal / iMate JasJar  Motorola A780  Psion| Teklogix NetBook Pro  Gumstix and Kouchuk-Bars  Beagle Board  Pandora
  • 10.
    Quem usa?  BeagleBoard ●HW baseado em OMAP3 ● Baixo custo – $ 149 ● Baixo consumo de energia – Máximo 2W ● http://beagleboard.org – Esquema de HW aberto o/
  • 11.
  • 12.
    U-boot: acesso viaMinicom sudo apt-get install minicom minicom --setup minicom Quem usa?
  • 13.
    Quem usa?  PalmPre  Aposta da Palm em reverter o jogo  WebOS
  • 14.
    Quem usa?  KaeilOS Fabricante de Hardware  Suporte Pago
  • 15.
    Internet Tablets  Projetose Softwares  Mozilla Fennec (Firefox pra Mobile)  Brisa UPnP  Canola  CarMan  Tapioca Framework  Maemo Community (No Google Summer of Code)
  • 16.
  • 17.
  • 18.
    ● O queé? É um projeto de Hardware e Software Livre voltado para artistas, designers, hobbystas ou qualquer um interessado em criar objetos e ambientes interativos. Arduino
  • 19.
    ● O queé?  Arduino Programming Language (Baseada em Wiring)  Arduino Development Environment (IDE baseada em Processing)  Pode ser feito a mão (Paperduino, Severino, Toscoduino, etc)  Múltiplas derivações  Comunicação fácil  Ciclo de desenvolvimento rápido  Barato! Arduino
  • 20.
    ● Hardware  MicrocontroladorAtmega168  RISC (131 instruções)  24 Mhz  NVM de 16KBytes (2k usados no bootloader)  1KByte de SRAM  Portas AD  UART  6v – 20v (Recomendado 7v a 12v) Arduino
  • 21.
    ● Software EstruturaBásica ArduinoArduino
  • 22.
    Arduino ● Ciclo deDesenvolvimento
  • 23.
  • 24.
    ● Computadores (ladoComputador) PySerial Arduino
  • 25.
    Arduino ● Dispositivos Móveis PraPyS60 e Bluetooth: lightblue
  • 26.
  • 27.
  • 28.
    PyGame  Criando umjoguinho do tipo Arkanoid
  • 29.
    PyGame  A Classebouncer class Bouncer(pygame.sprite.Sprite): def __init__(self, startpos): pygame.sprite.Sprite.__init__(self) #direcao: 1=direita, -1=esquerda self.direction = 1 #carrega a imagem e a posiciona na tela self.image, self.rect = load_image('bouncer.gif') self.rect.centerx = startpos[0] self.rect.centery = startpos[1] def update(self): #multiplicamos x por 3 pro bouncer mover-seum pouco mais rápido! self.rect.move_ip((self.direction*3,0)) #se o bouncer atingir os limites da tela, invertemos a sua direcao if self.rect.left < 0: self.direction = 1 elif self.rect.right > width: self.direction = -1
  • 30.
    PyGame  A Classeball class Ball(pygame.sprite.Sprite): """classe para a bola""" def __init__(self, startpos): pygame.sprite.Sprite.__init__(self) self.speed = [2,2] #carrega a imagem e a posiciona na tela self.image, self.rect = load_image('ball.gif') self.rect.centerx = startpos[0] self.rect.centery = startpos[1] #salva a posicao inicial para ser reutilizada #quando a bola sair da tela pelo fundo self.init_pos = startpos def update(self): self.rect.move_ip(self.speed) #se a bola atingir os lados da tela, inverte a #direcao horizontal (x) if self.rect.left < 0 or self.rect.right > width: self.speed[0] = -self.speed[0] #se a bola atingir o topo da tela, inverte a #posicao vertical (y) if self.rect.top < 0: self.speed[1] = -self.speed[1] #se a bola atingir o fundo da tela, reseta #a sua posicao if self.rect.bottom > height: self.rect.centerx = self.init_pos[0] self.rect.centery = self.init_pos[1]
  • 31.
    PyGame  Checando eventos(já no mainloop!) #checa eventos de teclado for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() elif event.type == pygame.KEYDOWN: if event.key == pygame.K_LEFT: bouncer.direction = -1 if event.key == pygame.K_RIGHT: bouncer.direction = 1
  • 32.
    PyGame  Reagindo acolisões if bouncer.rect.colliderect(ball.rect): if ball.speed[1] > 0: ball.speed[1] = -ball.speed[1]
  • 33.
    PyGame  Atualizando atela e redesenhando #atualiza os objetos ball.update() bouncer.update() #redesenha a tela screen.fill(black) screen.blit(ball.image, ball.rect) screen.blit(bouncer.image, bouncer.rect) pygame.display.flip()
  • 34.
  • 35.
  • 36.