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

Preview:

DESCRIPTION

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

Citation preview

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 (b\g) 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 A\D

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 objetosball.update()bouncer.update() #redesenha a telascreen.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)