SlideShare uma empresa Scribd logo
1 de 51
Baixar para ler offline
Como Fazer Seu Próprio
Gameboy
Rafael de Moura Moreira
Durante o lero-lero inicial, baixem a IDE do Arduino!
<https://www.arduino.cc/en/Main/Software>
(ou digite “arduino ide” no Google)
Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 2
@author
Rafael de Moura Moreira <rafaelmmoreira@gmail.com>
Professor substituto na Universidade Federal de Itajubá (UNIFEI)
(Quase) Mestre em Ciência e Tecnologia da Computação pela UNIFEI
Engenheiro de Computação pela UNIFEI
@rafaelmmoreira
Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 3
O que não veremos
Como fazer seu Gameboy com
Raspberry Pi + impressão 3D
<https://www.thingiverse.com/thin
g:382485>
Como fazer seu Gameboy com
Raspberry Pi + Gameboy
quebrado
<https://superpiboy.wordpress.com>
Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 4
O que não veremos
Como fazer seu Gameboy com
Raspberry Pi + impressão 3D
<https://www.thingiverse.com/thin
g:382485>
Como fazer seu Gameboy com
Raspberry Pi + Gameboy
quebrado
<https://superpiboy.wordpress.com>
Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 5
O que veremos
projeto de hardware projeto de software
Como Fazer Seu Próprio Gameboy #cpbr11
void loopUpdate(){
if (key != mov){
switch(key){
case 'U’:
mov = key;
if (linha > 0)
linha--;
break;
case 'D’:
mov = key;
if (linha < 3)
linha++;
break;
case 'L’:
mov = key;
if (coluna > 0)
coluna--;
break;
case 'R’:
mov = key;
if (coluna < 15)
coluna++;
break;
Rafael de Moura Moreira 6
Conhecendo nosso equipamento
Arduino (Uno ou Mega) Pão de Queijo Development
Board (PQDB)
Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 7
Arduino (Uno/Mega)
Microcontrolador Atmega 16MHz, 2kB (Uno) / 8kB (Mega) SRAM
Pinos de entrada e saída digital e analógica
Hardware aberto e livre
IDE grátis
Barato ($)
Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 8
Pão de Queijo Development Board (PQDB)
Shield didático para estudo de embarcados
Compatível com pinos do Arduino Uno (qualquer
microcontrolador)
Contém saída digital (LED RGB), analógica (buzzer), entradas
digitais (botões), entradas analógicas (potenciômetro e sensores),
LCD e display de 7 segmentos
Hardware aberto e livre
Desenvolvido em Minas Gerais, uai!
Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 9
Projeto de hardware
O hardware da maioria dos sistemas computacionais pode ser
subdividido da seguinte maneira:
Como Fazer Seu Próprio Gameboy #cpbr11
ENTRADA PROCESSAMENTO SAÍDA
Dispositivos através dos
quais fornecemos
informações para o
computador
CPU + memória
Realiza as operações
Dispositivos através dos
quais obtemos
informações do
computador
Rafael de Moura Moreira 10
Projeto de hardware
Entradas: 8 botões (4 direções, A,
B, Start, Select)
Processamento: Processador
personalizado baseado no Z80 e
Intel 8080 @ 4.19MHz, 8kB SRAM
+ 8kB VRAM
Saídas: LCD 160x144, auto-
falantes
Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 11
Projeto de hardware
Entradas: 8 botões (4 direções, A,
B, Start, Select)
Processamento: Processador
personalizado baseado no Z80 e
Intel 8080 @ 4.19MHz, 8kB SRAM
+ 8kB VRAM
Saídas: LCD 160x144, auto-
falantes
Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 12
Projeto de hardware
Objetivos: que o meu console precisa fazer?
Viabilidade técnica: como eu faço meu console fazer o que eu quero?
Custos: até quanto eu posso cobrar pelo meu console?
Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 13
Projeto de hardware
Objetivos: que o meu console precisa fazer?
É portátil ou doméstico? Precisa de alto desempenho gráfico? Usa
internet? Aceita acessórios alternativos (guitarra do Guitar Hero,
volante de corrida etc)? Deverá ser compatível com algum console já
existente?
Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 14
Projeto de hardware
Viabilidade técnica: como eu faço meu console fazer o que eu quero?
Qual processador aguentaria rodar o que imaginei? Quanta memória
devo usar? Quais portas de entrada e saída usarei? O que o joystick
deve ter? Como será o case para garantir dissipação adequada de
calor? Caso seja portátil, qual o tamanho e formato adequado para o
case? Caso seja portátil, qual bateria aguenta várias horas sem deixar
o equipamento pesado ou superaquecido?
Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 15
Projeto de hardware
Custos: até quanto eu posso cobrar pelo meu console?
Quanto meus clientes estão dispostos a pagar? Quanto meus
concorrentes estão cobrando? Eu consigo ter margem de lucro
cobrando esse preço por esse equipamento? Preciso fazer ajustes no
projeto para caber no orçamento?
Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 16
Projeto de hardware
Vamos definir o que precisamos para o nosso curso?
Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 17
Projeto de hardware
Objetivos:
1) Queremos aprender a fazer algo estilo Gameboy, portanto deverá
ser portátil e deverá rodar jogos retrô.
2) Temos pouco tempo de curso, então deverá ser fácil de montar e
programar.
Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 18
Projeto de hardware
Viabilidade técnica:
1) Para ser portátil e fácil de montar, é ideal usar uma plaquinha já
pré-montada com microcontrolador.
2) Para ser fácil de programar, deve ser uma plaquinha com bom
suporte a software e documentação fácil na internet.
3) Para rodar jogo retrô, não é necessário processador poderoso ou
muita memória.
Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 19
Projeto de hardware
Custo:
O mais barato possível! O projeto não é comercial, muitos de nós
somos estudantes e é fácil queimar/danificar componentes :)
Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 20
Projeto de hardware
Processador: Arduino Uno
8 bits, 16MHz, 2kB SRAM – suficiente para jogos leves, com pouco
gráfico
20~40 reais, fácil de encontrar
Grande disponibilidade de documentação, bibliotecas e exemplos
na internet
Usado para ensinar programação e eletrônica para iniciantes
Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 21
Projeto de hardware
Entradas: 10 botões digitais
Suficiente para fazer um layout de joystick estilo Super Nintendo
Fácil de programar, retornam 2 valores diferentes (0 ou 1)
Preço em centavos
Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 22
Projeto de hardware
Saída: LCD 16x2
Fácil de programar, os desenhos são representados como caracteres
Gráficos estilo “dot matrix”, como os do Gameboy
Preço: 5 a 20 reais
Desvantagem: resolução baixa, gráficos subdivididos em retângulos
na tela
Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 23
Projeto de hardware
Saída alternativa: LCD Nokia 5110 (a tela de celular Nokia antigo!)
Tela gráfica verdadeira
Gráficos estilo “dot matrix”, como os do Gameboy
Preço: na faixa dos 20 reais
Relativamente fácil de programar, mas menos do que o LCD 16x2
Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 24
Projeto de hardware
Devido ao tempo limitado, neste curso usaremos o display LCD 16x2.
Ao final desta apresentação há links com documentação para quem
quiser montar o circuito com o Nokia 5110 em casa!
Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 25
Projeto de hardware
Esquemático
Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 26
Interface Hardware-Software
É importante facilitar a vida dos desenvolvedores dos jogos.
Trabalhar diretamente com o hardware dificulta o desenvolvimento
dos jogos, prolonga e encarece o projeto e pode resultar em jogos
abaixo do ideal.
Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 27
Interface Hardware-Software
“Desenvolvedores tiveram problemas para criar jogos para o Saturn. (…) sem experiência
avançada em programação de jogos era difícil de desenvolver algo para ele porque seu hardware
era muito complexo. Estima-se que 1 em 100 programadores realmente conseguiam usar todo o
seu potencial. (…) e como desenvolvedores estavam com dificuldade para fazer os jogos, eles
optaram pelo Playstation.”
<http://www.dcshooters.co.uk/sega/saturn/saturn.php>
Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 28
Interface Hardware-Software
Fabricantes de hardware geralmente disponibilizam camadas
intermediárias de software que se comunica com o hardware, como
sistemas operacionais, drivers de dispositivo e bibliotecas.
Essas camadas intermediárias fornecem aos programadores funções
fáceis de utilizar, que não exigem conhecimento avançado do
hardware, facilitando tanto o desenvolvimento quanto a
portabilidade do código.
Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 29
Interface Hardware-Software
key = kpReadKey();
Código para ler qual botão foi
pressionado utilizando um driver
pronto
Trecho de ~50% do código da
leitura do botão no driver
Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 30
Interface Hardware-Software
Como projetar um bom driver ou biblioteca de hardware:
1) Ler o datasheet do dispositivo e entender o que ele faz, qual o
formato dos dados que ele recebe e qual o formato dos dados que
ele entrega
2) Identificar quais recursos o usuário irá precisar usar
3) As funções deverão exigir e fornecer dados em formato amigável
para o usuário – elas são responsáveis por colocar no formato
adequado para o hardware, não o usuário!
4) Boa documentação: nomes intuitivos e boas explicações de como
usar
Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 31
Interface Hardware-Software
Para este curso, devido a limitações de tempo, não desenvolveremos
os drivers – vamos utilizar os fornecidos pelos fabricantes da PQDB e
partir para o desenvolvimento de um joguinho!
Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 32
Interface Hardware-Software
Como ler qual botão foi pressionado:
A função kpReadKey() retorna um caractere informando qual tecla
foi pressionada: (U)p, (D)own, (L)eft, (R)ight, (A), (B), (X), (Y), (S)elect
ou (s)tart.
Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 33
Interface Hardware-Software
Como desenhar na tela:
A função lcdCreateChar(posição, desenho) copia um desenho binário
(8x5) em uma certa posição da memória do LCD.
É com ela que criaremos os gráficos do nosso joguinho. Posteriormente
utilizaremos lcdChar(numero) para colocar na tela o desenho salvo na
posição “numero” da memória.
Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 34
Criando o nosso primeiro jogo
Um bom código não deve apenas funcionar bem – ele deve ser limpo,
organizado e o mais legível possível.
Isso facilita o trabalho em grupo e o processo de debug.
Boas técnicas de programação incluem o uso de nomes intuitivos para
funções e variáveis, o uso de comentários explicando o que cada
trecho faz e o uso de padrões populares para cada tipo de programa.
Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 35
Criando o nosso primeiro jogo
Uma forma de dividir o processamento do jogo é em 3 etapas:
Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 36
Criando o nosso primeiro jogo
Uma forma de dividir o processamento do jogo é em 3 etapas:
Input: Processar
as entradas (ex:
usuário apertou
direcional para
esquerda)
Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 37
Criando o nosso primeiro jogo
Uma forma de dividir o processamento do jogo é em 3 etapas:
Update:
atualizar as in-
formações do
jogo (ex: posição
do jogador no
mapa, testar se
houve colisão,
gerar inimigos etc)
Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 38
Criando o nosso primeiro jogo
Uma forma de dividir o processamento do jogo é em 3 etapas:
Render:
Atualizar a tela
do jogo
Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 39
Criando o nosso primeiro jogo
Proposta de joguinho: um jogo de carrinho estilo Enduro (Atari 2600,
1983) onde o jogador deve desviar de obstáculos (no original, outros
carrinhos).
Vamos estudar a lógica do joguinho. O código-fonte está no GitHub:
<https://github.com/rafaelmmoreira>
Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 40
Criando o nosso primeiro jogo
Vamos subdividir o LCD em 4 linhas. Ou seja, cada “caractere” dele
corresponderá a 2 linhas. Assim teremos mais espaço para o jogo.
Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 41
Criando o nosso primeiro jogo
Como cada desenho ocupa um caractere inteiro, e só temos 2 linhas
de caracteres, teremos que fazer diferentes combinações de cada
desenho:
1) Carrinho em cima do retângulo
2) Carrinho embaixo do retângulo
3) Obstáculo em cima do retângulo
4) Obstáculo embaixo do retângulo
5) Carrinho em cima e obstáculo embaixo
6) Carrinho embaixo e obstáculo em cima
Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 42
Criando o nosso primeiro jogo
Cada quadradinho pintado corresponde a “1”, enquanto cada
quadradinho em branco corresponde a “0”.
Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 43
Criando o nosso primeiro jogo
Todo código de Arduino possui uma função setup(), que é executada
uma vez ao início do programa, e uma função loop(), que é repetida
enquanto o dispositivo estiver ligado.
Utilizaremos a setup() para fazer a inicialização do hardware e para
salvar nossos desenhos na tela. A função loop() chamará, em
sequência, cada uma das 3 funções que vimos antes: loop_input(),
loop_update() e loop_render().
Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 44
Criando o nosso primeiro jogo
loop_input():
Apenas lê qual tecla o usuário pressionou e a armazena. Caso
nenhuma tecla tenha sido pressionada, armazena 0 (zero).
Note no código-fonte que a função possui um loop. Por que?
Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 45
Criando o nosso primeiro jogo
loop_update():
Verifica qual tecla foi apertada e move a posição do carrinho no
mapa (aumentar ou diminuir linhas e colunas).
Movimenta o carrinho para frente na estrada (desloca o mapa inteiro
1 casa para trás) e realiza um sorteio para saber se novos obstáculos
aparecerão.
Testa se houve Game Over (posição do carrinho no mapa =
obstáculo).
Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 46
Criando o nosso primeiro jogo
loop_render():
Limpa a tela, posiciona o cursor na primeira posição e percorre a
matriz desenhando seu conteúdo.
Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 47
Antes de partir para a atividade prática, vamos dar os devidos
créditos aos envolvidos!
Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 48
Agradecimentos
Aos professores Rodrigo “Max” Almeida e “Carlão” Valério da UNIFEI e ao
Thiago Lima do Embarcados pelo convite, pelo apoio e pelo equipamento!
À equipe da Campus Party pelo evento fantástico!
À minha namorada Brenda (essa que está ficando com vergonha agora)
por todo o apoio e por me acompanhar na correria dos últimos dias!
E a todos vocês que estão passando sua noite de sábado estudando
embarcados com a gente!
Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 49
Referências e links úteis
• Projeto PQDB no GitHub – inclui drivers e toda a documentação de
hardware: <https://github.com/projetopqdb/>
• Portal Embarcados – inclui vários tutoriais com Arduino e ensina a
fazer a sua própria PQDB! <https://www.embarcados.com.br/>
• Game Programming Patterns – ótima referência para
programação de jogos! <http://gameprogrammingpatterns.com/>
• Livro: Programação de Sistemas Embarcados – R. M. A. Almeida, C.
H. V. Moraes, T. F. P. Seraphim – Ed. Elsevier - é daí que surgiu a
PQDB. Um curso completo de programação de embarcados que
não exige conhecimentos prévios. Parte do mais básico e chega em
assuntos avançados.
Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 50
DESAFIO HANDS-ON
Leia com atenção o código do jogo e entenda o que está acontecendo. Em seguida, implemente
algo de novo nele.
DICA: pense em como sua proposta afeta cada uma das 3 partes do loop: input, update e render.
Caso ajude, estes slides estão disponíveis em: <https://www.slideshare.net/rafaelmmoreira>
Exemplos:
• Uma tela de Game Over
• Uma tela de Pause (caso o usuário aperte Start)
• Um míssil que explode uma caixinha
• Um meio de mostrar o placar (1 ponto por caixinha ultrapassada)
• Um meio de aumentar a velocidade conforme o jogo avança
• Modo 2 jogadores (P2 utiliza os botões A, B, X e Y como direcional)
• Outras ideias criativas!
Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 51

Mais conteúdo relacionado

Semelhante a Como Fazer Seu Próprio Gameboy - CPBR11

Implementação de Aplicações Móveis e Jogos com Python - Aula 6
Implementação de Aplicações Móveis e Jogos com Python - Aula 6Implementação de Aplicações Móveis e Jogos com Python - Aula 6
Implementação de Aplicações Móveis e Jogos com Python - Aula 6Flávio Ribeiro
 
1484850831[pdj]e book gameengine
1484850831[pdj]e book gameengine1484850831[pdj]e book gameengine
1484850831[pdj]e book gameengineLuis Caio
 
T19_LM3: Projeto final e documentação de planificação
T19_LM3: Projeto final e documentação de planificaçãoT19_LM3: Projeto final e documentação de planificação
T19_LM3: Projeto final e documentação de planificaçãoCarlos Santos
 
Planejamento de uma Rede para uma Lan House + Custo Benefício..."AMD vs INTEL"
Planejamento de uma Rede para uma Lan House + Custo Benefício..."AMD vs INTEL"Planejamento de uma Rede para uma Lan House + Custo Benefício..."AMD vs INTEL"
Planejamento de uma Rede para uma Lan House + Custo Benefício..."AMD vs INTEL"Ponce Edition
 
It’s all about the game
It’s all about the gameIt’s all about the game
It’s all about the gameBruno Cicanci
 
Microcontroladores pic
Microcontroladores picMicrocontroladores pic
Microcontroladores picCesar Prim
 
O mínimo de Integração Contínua que todo projeto deveria ter
O mínimo de Integração Contínua que todo projeto deveria terO mínimo de Integração Contínua que todo projeto deveria ter
O mínimo de Integração Contínua que todo projeto deveria terÁtilla Silva Barros
 
Aprenda m+ sobre o windows 7 e o pc fp.técnico
Aprenda m+ sobre o windows 7 e o pc  fp.técnicoAprenda m+ sobre o windows 7 e o pc  fp.técnico
Aprenda m+ sobre o windows 7 e o pc fp.técnicoFBTEC-INFO
 
V2 - Microcontroladores: a revolucao do arduino
V2 - Microcontroladores: a revolucao do arduinoV2 - Microcontroladores: a revolucao do arduino
V2 - Microcontroladores: a revolucao do arduinoSamir Siqueira
 
AULA 06 - REVISÃO DE CONCEITOS INICIAIS DE ALGORITMOS
AULA 06 - REVISÃO DE CONCEITOS INICIAIS DE ALGORITMOSAULA 06 - REVISÃO DE CONCEITOS INICIAIS DE ALGORITMOS
AULA 06 - REVISÃO DE CONCEITOS INICIAIS DE ALGORITMOSprofjotamarcosduarte
 
Python para programadores Ruby
Python para programadores RubyPython para programadores Ruby
Python para programadores RubyEric Hideki
 
Como identificar placa-mae do computadorComo identificar placa mãe do meu com...
Como identificar placa-mae do computadorComo identificar placa mãe do meu com...Como identificar placa-mae do computadorComo identificar placa mãe do meu com...
Como identificar placa-mae do computadorComo identificar placa mãe do meu com...Daniel GC
 
Seminário de Sistemas Embarcados - Análise sobre Super Nintendo e PlayStation 4
Seminário de Sistemas Embarcados - Análise sobre Super Nintendo e PlayStation 4Seminário de Sistemas Embarcados - Análise sobre Super Nintendo e PlayStation 4
Seminário de Sistemas Embarcados - Análise sobre Super Nintendo e PlayStation 4Thiago Fortunato
 
Conf Impressora Oki
Conf Impressora OkiConf Impressora Oki
Conf Impressora Okimaureen3008
 
Desenvolvimento de jogos com Cocos2d-x
Desenvolvimento de jogos com Cocos2d-xDesenvolvimento de jogos com Cocos2d-x
Desenvolvimento de jogos com Cocos2d-xBruno Cicanci
 

Semelhante a Como Fazer Seu Próprio Gameboy - CPBR11 (20)

Implementação de Aplicações Móveis e Jogos com Python - Aula 6
Implementação de Aplicações Móveis e Jogos com Python - Aula 6Implementação de Aplicações Móveis e Jogos com Python - Aula 6
Implementação de Aplicações Móveis e Jogos com Python - Aula 6
 
01_2 - Hardware.pdf
01_2 - Hardware.pdf01_2 - Hardware.pdf
01_2 - Hardware.pdf
 
1484850831[pdj]e book gameengine
1484850831[pdj]e book gameengine1484850831[pdj]e book gameengine
1484850831[pdj]e book gameengine
 
T19_LM3: Projeto final e documentação de planificação
T19_LM3: Projeto final e documentação de planificaçãoT19_LM3: Projeto final e documentação de planificação
T19_LM3: Projeto final e documentação de planificação
 
Trabalho de informatica
Trabalho de informaticaTrabalho de informatica
Trabalho de informatica
 
Planejamento de uma Rede para uma Lan House + Custo Benefício..."AMD vs INTEL"
Planejamento de uma Rede para uma Lan House + Custo Benefício..."AMD vs INTEL"Planejamento de uma Rede para uma Lan House + Custo Benefício..."AMD vs INTEL"
Planejamento de uma Rede para uma Lan House + Custo Benefício..."AMD vs INTEL"
 
It’s all about the game
It’s all about the gameIt’s all about the game
It’s all about the game
 
Microcontroladores pic
Microcontroladores picMicrocontroladores pic
Microcontroladores pic
 
Raspberry pi
Raspberry piRaspberry pi
Raspberry pi
 
WRVA 2015
WRVA 2015WRVA 2015
WRVA 2015
 
O mínimo de Integração Contínua que todo projeto deveria ter
O mínimo de Integração Contínua que todo projeto deveria terO mínimo de Integração Contínua que todo projeto deveria ter
O mínimo de Integração Contínua que todo projeto deveria ter
 
Aprenda m+ sobre o windows 7 e o pc fp.técnico
Aprenda m+ sobre o windows 7 e o pc  fp.técnicoAprenda m+ sobre o windows 7 e o pc  fp.técnico
Aprenda m+ sobre o windows 7 e o pc fp.técnico
 
V2 - Microcontroladores: a revolucao do arduino
V2 - Microcontroladores: a revolucao do arduinoV2 - Microcontroladores: a revolucao do arduino
V2 - Microcontroladores: a revolucao do arduino
 
AULA 06 - REVISÃO DE CONCEITOS INICIAIS DE ALGORITMOS
AULA 06 - REVISÃO DE CONCEITOS INICIAIS DE ALGORITMOSAULA 06 - REVISÃO DE CONCEITOS INICIAIS DE ALGORITMOS
AULA 06 - REVISÃO DE CONCEITOS INICIAIS DE ALGORITMOS
 
Python para programadores Ruby
Python para programadores RubyPython para programadores Ruby
Python para programadores Ruby
 
Como identificar placa-mae do computadorComo identificar placa mãe do meu com...
Como identificar placa-mae do computadorComo identificar placa mãe do meu com...Como identificar placa-mae do computadorComo identificar placa mãe do meu com...
Como identificar placa-mae do computadorComo identificar placa mãe do meu com...
 
Realidade Aumentada
Realidade AumentadaRealidade Aumentada
Realidade Aumentada
 
Seminário de Sistemas Embarcados - Análise sobre Super Nintendo e PlayStation 4
Seminário de Sistemas Embarcados - Análise sobre Super Nintendo e PlayStation 4Seminário de Sistemas Embarcados - Análise sobre Super Nintendo e PlayStation 4
Seminário de Sistemas Embarcados - Análise sobre Super Nintendo e PlayStation 4
 
Conf Impressora Oki
Conf Impressora OkiConf Impressora Oki
Conf Impressora Oki
 
Desenvolvimento de jogos com Cocos2d-x
Desenvolvimento de jogos com Cocos2d-xDesenvolvimento de jogos com Cocos2d-x
Desenvolvimento de jogos com Cocos2d-x
 

Como Fazer Seu Próprio Gameboy - CPBR11

  • 1. Como Fazer Seu Próprio Gameboy Rafael de Moura Moreira
  • 2. Durante o lero-lero inicial, baixem a IDE do Arduino! <https://www.arduino.cc/en/Main/Software> (ou digite “arduino ide” no Google) Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 2
  • 3. @author Rafael de Moura Moreira <rafaelmmoreira@gmail.com> Professor substituto na Universidade Federal de Itajubá (UNIFEI) (Quase) Mestre em Ciência e Tecnologia da Computação pela UNIFEI Engenheiro de Computação pela UNIFEI @rafaelmmoreira Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 3
  • 4. O que não veremos Como fazer seu Gameboy com Raspberry Pi + impressão 3D <https://www.thingiverse.com/thin g:382485> Como fazer seu Gameboy com Raspberry Pi + Gameboy quebrado <https://superpiboy.wordpress.com> Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 4
  • 5. O que não veremos Como fazer seu Gameboy com Raspberry Pi + impressão 3D <https://www.thingiverse.com/thin g:382485> Como fazer seu Gameboy com Raspberry Pi + Gameboy quebrado <https://superpiboy.wordpress.com> Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 5
  • 6. O que veremos projeto de hardware projeto de software Como Fazer Seu Próprio Gameboy #cpbr11 void loopUpdate(){ if (key != mov){ switch(key){ case 'U’: mov = key; if (linha > 0) linha--; break; case 'D’: mov = key; if (linha < 3) linha++; break; case 'L’: mov = key; if (coluna > 0) coluna--; break; case 'R’: mov = key; if (coluna < 15) coluna++; break; Rafael de Moura Moreira 6
  • 7. Conhecendo nosso equipamento Arduino (Uno ou Mega) Pão de Queijo Development Board (PQDB) Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 7
  • 8. Arduino (Uno/Mega) Microcontrolador Atmega 16MHz, 2kB (Uno) / 8kB (Mega) SRAM Pinos de entrada e saída digital e analógica Hardware aberto e livre IDE grátis Barato ($) Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 8
  • 9. Pão de Queijo Development Board (PQDB) Shield didático para estudo de embarcados Compatível com pinos do Arduino Uno (qualquer microcontrolador) Contém saída digital (LED RGB), analógica (buzzer), entradas digitais (botões), entradas analógicas (potenciômetro e sensores), LCD e display de 7 segmentos Hardware aberto e livre Desenvolvido em Minas Gerais, uai! Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 9
  • 10. Projeto de hardware O hardware da maioria dos sistemas computacionais pode ser subdividido da seguinte maneira: Como Fazer Seu Próprio Gameboy #cpbr11 ENTRADA PROCESSAMENTO SAÍDA Dispositivos através dos quais fornecemos informações para o computador CPU + memória Realiza as operações Dispositivos através dos quais obtemos informações do computador Rafael de Moura Moreira 10
  • 11. Projeto de hardware Entradas: 8 botões (4 direções, A, B, Start, Select) Processamento: Processador personalizado baseado no Z80 e Intel 8080 @ 4.19MHz, 8kB SRAM + 8kB VRAM Saídas: LCD 160x144, auto- falantes Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 11
  • 12. Projeto de hardware Entradas: 8 botões (4 direções, A, B, Start, Select) Processamento: Processador personalizado baseado no Z80 e Intel 8080 @ 4.19MHz, 8kB SRAM + 8kB VRAM Saídas: LCD 160x144, auto- falantes Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 12
  • 13. Projeto de hardware Objetivos: que o meu console precisa fazer? Viabilidade técnica: como eu faço meu console fazer o que eu quero? Custos: até quanto eu posso cobrar pelo meu console? Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 13
  • 14. Projeto de hardware Objetivos: que o meu console precisa fazer? É portátil ou doméstico? Precisa de alto desempenho gráfico? Usa internet? Aceita acessórios alternativos (guitarra do Guitar Hero, volante de corrida etc)? Deverá ser compatível com algum console já existente? Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 14
  • 15. Projeto de hardware Viabilidade técnica: como eu faço meu console fazer o que eu quero? Qual processador aguentaria rodar o que imaginei? Quanta memória devo usar? Quais portas de entrada e saída usarei? O que o joystick deve ter? Como será o case para garantir dissipação adequada de calor? Caso seja portátil, qual o tamanho e formato adequado para o case? Caso seja portátil, qual bateria aguenta várias horas sem deixar o equipamento pesado ou superaquecido? Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 15
  • 16. Projeto de hardware Custos: até quanto eu posso cobrar pelo meu console? Quanto meus clientes estão dispostos a pagar? Quanto meus concorrentes estão cobrando? Eu consigo ter margem de lucro cobrando esse preço por esse equipamento? Preciso fazer ajustes no projeto para caber no orçamento? Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 16
  • 17. Projeto de hardware Vamos definir o que precisamos para o nosso curso? Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 17
  • 18. Projeto de hardware Objetivos: 1) Queremos aprender a fazer algo estilo Gameboy, portanto deverá ser portátil e deverá rodar jogos retrô. 2) Temos pouco tempo de curso, então deverá ser fácil de montar e programar. Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 18
  • 19. Projeto de hardware Viabilidade técnica: 1) Para ser portátil e fácil de montar, é ideal usar uma plaquinha já pré-montada com microcontrolador. 2) Para ser fácil de programar, deve ser uma plaquinha com bom suporte a software e documentação fácil na internet. 3) Para rodar jogo retrô, não é necessário processador poderoso ou muita memória. Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 19
  • 20. Projeto de hardware Custo: O mais barato possível! O projeto não é comercial, muitos de nós somos estudantes e é fácil queimar/danificar componentes :) Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 20
  • 21. Projeto de hardware Processador: Arduino Uno 8 bits, 16MHz, 2kB SRAM – suficiente para jogos leves, com pouco gráfico 20~40 reais, fácil de encontrar Grande disponibilidade de documentação, bibliotecas e exemplos na internet Usado para ensinar programação e eletrônica para iniciantes Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 21
  • 22. Projeto de hardware Entradas: 10 botões digitais Suficiente para fazer um layout de joystick estilo Super Nintendo Fácil de programar, retornam 2 valores diferentes (0 ou 1) Preço em centavos Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 22
  • 23. Projeto de hardware Saída: LCD 16x2 Fácil de programar, os desenhos são representados como caracteres Gráficos estilo “dot matrix”, como os do Gameboy Preço: 5 a 20 reais Desvantagem: resolução baixa, gráficos subdivididos em retângulos na tela Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 23
  • 24. Projeto de hardware Saída alternativa: LCD Nokia 5110 (a tela de celular Nokia antigo!) Tela gráfica verdadeira Gráficos estilo “dot matrix”, como os do Gameboy Preço: na faixa dos 20 reais Relativamente fácil de programar, mas menos do que o LCD 16x2 Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 24
  • 25. Projeto de hardware Devido ao tempo limitado, neste curso usaremos o display LCD 16x2. Ao final desta apresentação há links com documentação para quem quiser montar o circuito com o Nokia 5110 em casa! Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 25
  • 26. Projeto de hardware Esquemático Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 26
  • 27. Interface Hardware-Software É importante facilitar a vida dos desenvolvedores dos jogos. Trabalhar diretamente com o hardware dificulta o desenvolvimento dos jogos, prolonga e encarece o projeto e pode resultar em jogos abaixo do ideal. Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 27
  • 28. Interface Hardware-Software “Desenvolvedores tiveram problemas para criar jogos para o Saturn. (…) sem experiência avançada em programação de jogos era difícil de desenvolver algo para ele porque seu hardware era muito complexo. Estima-se que 1 em 100 programadores realmente conseguiam usar todo o seu potencial. (…) e como desenvolvedores estavam com dificuldade para fazer os jogos, eles optaram pelo Playstation.” <http://www.dcshooters.co.uk/sega/saturn/saturn.php> Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 28
  • 29. Interface Hardware-Software Fabricantes de hardware geralmente disponibilizam camadas intermediárias de software que se comunica com o hardware, como sistemas operacionais, drivers de dispositivo e bibliotecas. Essas camadas intermediárias fornecem aos programadores funções fáceis de utilizar, que não exigem conhecimento avançado do hardware, facilitando tanto o desenvolvimento quanto a portabilidade do código. Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 29
  • 30. Interface Hardware-Software key = kpReadKey(); Código para ler qual botão foi pressionado utilizando um driver pronto Trecho de ~50% do código da leitura do botão no driver Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 30
  • 31. Interface Hardware-Software Como projetar um bom driver ou biblioteca de hardware: 1) Ler o datasheet do dispositivo e entender o que ele faz, qual o formato dos dados que ele recebe e qual o formato dos dados que ele entrega 2) Identificar quais recursos o usuário irá precisar usar 3) As funções deverão exigir e fornecer dados em formato amigável para o usuário – elas são responsáveis por colocar no formato adequado para o hardware, não o usuário! 4) Boa documentação: nomes intuitivos e boas explicações de como usar Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 31
  • 32. Interface Hardware-Software Para este curso, devido a limitações de tempo, não desenvolveremos os drivers – vamos utilizar os fornecidos pelos fabricantes da PQDB e partir para o desenvolvimento de um joguinho! Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 32
  • 33. Interface Hardware-Software Como ler qual botão foi pressionado: A função kpReadKey() retorna um caractere informando qual tecla foi pressionada: (U)p, (D)own, (L)eft, (R)ight, (A), (B), (X), (Y), (S)elect ou (s)tart. Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 33
  • 34. Interface Hardware-Software Como desenhar na tela: A função lcdCreateChar(posição, desenho) copia um desenho binário (8x5) em uma certa posição da memória do LCD. É com ela que criaremos os gráficos do nosso joguinho. Posteriormente utilizaremos lcdChar(numero) para colocar na tela o desenho salvo na posição “numero” da memória. Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 34
  • 35. Criando o nosso primeiro jogo Um bom código não deve apenas funcionar bem – ele deve ser limpo, organizado e o mais legível possível. Isso facilita o trabalho em grupo e o processo de debug. Boas técnicas de programação incluem o uso de nomes intuitivos para funções e variáveis, o uso de comentários explicando o que cada trecho faz e o uso de padrões populares para cada tipo de programa. Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 35
  • 36. Criando o nosso primeiro jogo Uma forma de dividir o processamento do jogo é em 3 etapas: Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 36
  • 37. Criando o nosso primeiro jogo Uma forma de dividir o processamento do jogo é em 3 etapas: Input: Processar as entradas (ex: usuário apertou direcional para esquerda) Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 37
  • 38. Criando o nosso primeiro jogo Uma forma de dividir o processamento do jogo é em 3 etapas: Update: atualizar as in- formações do jogo (ex: posição do jogador no mapa, testar se houve colisão, gerar inimigos etc) Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 38
  • 39. Criando o nosso primeiro jogo Uma forma de dividir o processamento do jogo é em 3 etapas: Render: Atualizar a tela do jogo Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 39
  • 40. Criando o nosso primeiro jogo Proposta de joguinho: um jogo de carrinho estilo Enduro (Atari 2600, 1983) onde o jogador deve desviar de obstáculos (no original, outros carrinhos). Vamos estudar a lógica do joguinho. O código-fonte está no GitHub: <https://github.com/rafaelmmoreira> Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 40
  • 41. Criando o nosso primeiro jogo Vamos subdividir o LCD em 4 linhas. Ou seja, cada “caractere” dele corresponderá a 2 linhas. Assim teremos mais espaço para o jogo. Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 41
  • 42. Criando o nosso primeiro jogo Como cada desenho ocupa um caractere inteiro, e só temos 2 linhas de caracteres, teremos que fazer diferentes combinações de cada desenho: 1) Carrinho em cima do retângulo 2) Carrinho embaixo do retângulo 3) Obstáculo em cima do retângulo 4) Obstáculo embaixo do retângulo 5) Carrinho em cima e obstáculo embaixo 6) Carrinho embaixo e obstáculo em cima Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 42
  • 43. Criando o nosso primeiro jogo Cada quadradinho pintado corresponde a “1”, enquanto cada quadradinho em branco corresponde a “0”. Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 43
  • 44. Criando o nosso primeiro jogo Todo código de Arduino possui uma função setup(), que é executada uma vez ao início do programa, e uma função loop(), que é repetida enquanto o dispositivo estiver ligado. Utilizaremos a setup() para fazer a inicialização do hardware e para salvar nossos desenhos na tela. A função loop() chamará, em sequência, cada uma das 3 funções que vimos antes: loop_input(), loop_update() e loop_render(). Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 44
  • 45. Criando o nosso primeiro jogo loop_input(): Apenas lê qual tecla o usuário pressionou e a armazena. Caso nenhuma tecla tenha sido pressionada, armazena 0 (zero). Note no código-fonte que a função possui um loop. Por que? Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 45
  • 46. Criando o nosso primeiro jogo loop_update(): Verifica qual tecla foi apertada e move a posição do carrinho no mapa (aumentar ou diminuir linhas e colunas). Movimenta o carrinho para frente na estrada (desloca o mapa inteiro 1 casa para trás) e realiza um sorteio para saber se novos obstáculos aparecerão. Testa se houve Game Over (posição do carrinho no mapa = obstáculo). Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 46
  • 47. Criando o nosso primeiro jogo loop_render(): Limpa a tela, posiciona o cursor na primeira posição e percorre a matriz desenhando seu conteúdo. Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 47
  • 48. Antes de partir para a atividade prática, vamos dar os devidos créditos aos envolvidos! Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 48
  • 49. Agradecimentos Aos professores Rodrigo “Max” Almeida e “Carlão” Valério da UNIFEI e ao Thiago Lima do Embarcados pelo convite, pelo apoio e pelo equipamento! À equipe da Campus Party pelo evento fantástico! À minha namorada Brenda (essa que está ficando com vergonha agora) por todo o apoio e por me acompanhar na correria dos últimos dias! E a todos vocês que estão passando sua noite de sábado estudando embarcados com a gente! Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 49
  • 50. Referências e links úteis • Projeto PQDB no GitHub – inclui drivers e toda a documentação de hardware: <https://github.com/projetopqdb/> • Portal Embarcados – inclui vários tutoriais com Arduino e ensina a fazer a sua própria PQDB! <https://www.embarcados.com.br/> • Game Programming Patterns – ótima referência para programação de jogos! <http://gameprogrammingpatterns.com/> • Livro: Programação de Sistemas Embarcados – R. M. A. Almeida, C. H. V. Moraes, T. F. P. Seraphim – Ed. Elsevier - é daí que surgiu a PQDB. Um curso completo de programação de embarcados que não exige conhecimentos prévios. Parte do mais básico e chega em assuntos avançados. Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 50
  • 51. DESAFIO HANDS-ON Leia com atenção o código do jogo e entenda o que está acontecendo. Em seguida, implemente algo de novo nele. DICA: pense em como sua proposta afeta cada uma das 3 partes do loop: input, update e render. Caso ajude, estes slides estão disponíveis em: <https://www.slideshare.net/rafaelmmoreira> Exemplos: • Uma tela de Game Over • Uma tela de Pause (caso o usuário aperte Start) • Um míssil que explode uma caixinha • Um meio de mostrar o placar (1 ponto por caixinha ultrapassada) • Um meio de aumentar a velocidade conforme o jogo avança • Modo 2 jogadores (P2 utiliza os botões A, B, X e Y como direcional) • Outras ideias criativas! Como Fazer Seu Próprio Gameboy #cpbr11Rafael de Moura Moreira 51