Warning: Invalid argument supplied for foreach() in /home/hugodoria/hdoria.archlinux-br.org/blog/wp-includes/classes.php on line 255
"Olá, Mundo!" com Python no PSP | Hugo Doria

“Olá, Mundo!” com Python no PSP

Como falei no post anterior, comprei um PSP recentemente e entre uma jogatina e outra descobri várias coisas bacanas que se podia fazer nele, incluindo programar em python. Infelizmente só hoje tive tempo de fuçar um pouco sobre o assunto e escrever meu primeiro código em python psp: o famoso "olá, mundo!".

Para rodar python no PSP eu precisei do PSP Stackless Python, um port da linguagem para o PSP feito por um brasileiro: Carlos Eduardo. A última versão do port é  2.5.2, que já dá para fazer bastante coisa.

Infelizmente no site do projeto há pouca documentação disponível (pior ainda se você procurar em pt-br). Como me interessei no assunto, e até para ajudar o Carlos, resolvi criar um tutorial básico mostrando como fiz para escrever um "Olá, Mundo!" na tela do PSP. Obviamente, dá para fazer muito mais que isso. :P

"Instalando" o python

O primeiro passo é "instalar" o PSP Stackless Python no seu PSP. Baixe a versão mais atual no site do projeto. Procure por StacklessPSP-2.5.2_R1.zip:

Descompactando o arquivo baixando você encontra: EBOOT.PBP e python.zip. Tudo o que você precisa fazer é copiar estes dois arquivos para o diretório PSP/GAME, que fica dentro do memory stick. Pronto, a "instalação" foi feita. :-)

NOTA: Recomendo que você crie um sub-diretório em PSP/GAME chamada "python", por exemplo, e coloque os dois arquivos dentro dele. Isso ajuda a manter uma melhor organização.

Para verificar é só ligar seu PSP e ir em GAME -> Memory Stick. Se tudo foi feito corretamente você verá o Stackless Python pronto para ser rodado:

Stackless Python

O "Olá, Mundo!"

Sempre que o python for executado, ele procurará um arquivo chamado script.py dentro do mesmo diretório onde estão o EBOOT.PBP e o python.zip. É neste arquivo (script.py) que vamos colocar o nosso código.

Abra seu editor de texto preferido e cole o código abaixo:

# -*- encoding: utf-8 -*-
 
import psp2d
 
def main(mensagem):
 
    tela  = psp2d.Screen()
    fundo = psp2d.Image(480, 272)
    fonte = psp2d.Font('font.png')
 
    tela.blit(fundo)
    fonte.drawText(tela, 0, 0, mensagem)
    tela.swap()
 
    while True:
        joystick = psp2d.Controller()
        if joystick.circle:
            break
 
if __name__ == '__main__':
    try:
        main('Ola, mundo! =)')
    except:
        import traceback
        traceback.print_exc(file = file('erro.txt', 'w'))

Depois é só copiar este arquivo para dentro do mesmo diretório onde está o python e o EBOOT.PBP. PSP/GAME, ou PSP/GAME/python se você criou um subdiretório como eu recomendei.

Agora é só ligar seu PSP novamente, rodar o python e tchã-dan:

ola python

Seu primeiro script em python estará rodando. :-) Legal, né?

Entendendo o código

Vou explicar melhor o código. Como o foco aqui não é ensinar a linguagem em si não vou me prender a conceitos da mesma e vou explicar apenas a parte necessária para se imprimir o "Olá, mundo!".

Quem já programa em python já deve estar familiarizado com a estrutura do código (identação, definição de função e tratamento de erros). Se ainda não programa recomendo que entre no site do python brasil e dê uma olhada nos ótimos tutoriais que existem por lá.

Enfim, vamos lá:

import psp2d

Aqui estamos importando o módulo psp2d. Com ele podemos fazer todo tipo de desenho 2d na tela, inclusive escrever o texto que queremos. :-)

Existem outros módulos que você usar como, por exemplo:

  • pspnet - Módulo com classes e funções relacionadas à rede
  • pspsnd - Módulo que permite o controle de som e música
  • pspos - Módulo com funções específicas do PSP

Se quiser uma referência completa destes módulos visite http://python-psp.net/pspdoc/ .

    tela  = psp2d.Screen()

A classe "Screen" representa a tela do PSP e você sempre precisará de uma para poder fazer qualquer coisa.

    fundo = psp2d.Image(480, 272)

Essa linha serve para criar o fundo da tela, com as mesmas dimensões dela. No caso, você está definindo 480 para a largura e 272 para altura.

    fonte = psp2d.Font('font.png')

Aqui estamos instanciando uma Fonte. Precisamos de uma para poder mostrar um texto, claro. Infelizmente não existe nenhuma fonte embutida, então você precisará baixar uma. O tipo da fonte é SFonte.

A font.png que eu usei no exemplo pode ser baixada aqui. Você precisa colocá-la no mesmo diretório do python.

    tela.blit(fundo)

O método blit serve para copiar um objeto para sua instância. No caso, estamos copiando o fundo para a tela.

    fonte.drawText(tela, 0, 0, mensagem)

O método drawText é usado para desenharmos o texto na tela. Seu uso é:

fonte.drawText(tela, posicaoX, posicaoY, mensagem)

No caso estamos desenhando na tela, na posição 0x 0y, o conteúdo da variável mensagem.

    tela.swap()

Para se desenhar na tela são necessários dois buffers. Isso significa que ao invés de termos um buffer representando a tela, temos dois. Um é o buffer da visualização em si (display buffer), e o outro é o buffer do desenho (draw buffer).

Todas as opções de desenho são direcionadas ao buffer de desenho, que não é mostrado na tela. O método "swap" do objeto Screen troca o buffer de desenho e o buffer de visualização, fazendo com que o que desenhos na tela seja, de fato, mostrado nela.

O código mostrado aqui é o referente ao desenho do texto na tela.

  while True:
        joystick = psp2d.Controller()
        if joystick.circle:
            break

Este trecho do código está instanciando a classe Controller, que serve para reconhecer os botões do PSP e, dessa forma, permitir que você possa definir ações. O código acima está basicamente dizendo que se o botão circulo for pressionado é para ele sair do programa. O while True garante que isso fique em loop até que o botão seja pressionado.

if __name__ == '__main__':
    try:
        main('Ola, mundo! =)')
    except:
        import traceback
        traceback.print_exc(file = file('erro.txt', 'w'))

O código acima basicamente faz com que o programa, ao rodar, chame o método main, passando a frase "Ola, mundo! =)" como parâmetro. Caso aconteça algum erro o mesmo deve ser salvo em um arquivo chamado "erro.txt".

Bem, é isso. Vou continuar brincando com o python no PSP e fazer alguns joguinhos. Se você interessou pelo assunto recomendo entrar no sites abaixo para mais informações e tutoriais:



16 Responses to ““Olá, Mundo!” com Python no PSP”

  1. Evandro Viana disse:

    Parabens! Depois que eu vi que o PSP roda python estou pensando num pro natal!

  2. Ótimo post. Continue com a iniciativa, realmente materia sobre o assunto em pt-br é quase nulo. Parabéns!

  3. Mallakka disse:

    Massa, pena não ter um PSP pra testar =)

  4. Hugo, eu estava ultimamento screvendo meus codigos de pequenas ferramentas em Ruby, mas vendo os vários posts sobre Python, e conhecendo mais ele no PythonBrasil.com.br, resolvi migrar para esta linguagem, para poder, primeiro, conhecer mais do poder, e em segundo para poder ampliar meus horizontes como programador, pois vejo que pode-se fazer muuuuuuuuuuuuita coisa mesmo com Python !
    Parabéns pelo post …

  5. [...] encontrei pouca documentação disponível (pior ainda se você procurar em pt-br) resolvi criar um tutorial básico mostrando como fiz para escrever um “Olá, Mundo!” na tela do PSP. Obviamente, dá para fazer muito mais que isso. [...]

  6. Marden disse:

    Aeee Nozey, parabens pelo post. Agora sim, vou aprender python ;)

  7. Fernando Belem disse:

    opa…. funcionou fácil…

  8. PotHix disse:

    Æ!!

    Muito legal cara!
    Sou programador Ruby e achei bem interessante a idéia de brincar com linguagens interpretadas assim no PSP!

    Fui procurar um projeto Ruby no mesmo esquema desse de Python, mas não achei muita coisa…Vou dar uma brincada com de Python por enquanto e vamos ver! =)

    Parabens pelo Post!

    Há braços

  9. Oi ,
    Parabéns pelo post .
    Agora fiquei curioso para brincar com ps2 programando python. hehehe

  10. Cool stuff >:)
    nerdy but cool ^^

  11. Tomás disse:

    Hugo feliz com seu PSP!!!
    hueahueauhaehua

    Me manda teu savegame do Crimsogem Saga!?!?!?

    =D

  12. Silveira Neto disse:

    Sensacional. Eu já tive um celular com suporte a Python e eu podia ter um terminal interativo Python a mão. É uma das coisas mais úteis que eu já tive.

  13. Mauro disse:

    Eu estou tentando fazer o programa rodar no psp , mas não estou conseguindo , o problema acredito que esta sendo a fonte , como faço para baixar e qual é a certa? pois o link para o site que vc deixou esta fora do ar.

    Obrigado

  14. Diogo disse:

    Oi. Muito legal, porém não acho mais documentação do psp2d, etc…
    http://python-psp.net/pspdoc/ não esta funcando…
    tu não sabe onde teria essa informação?
    ou tu não teria uma copia da documentacao?

  15. Thiago disse:

    Oi,
    Parabéns pelo seu post!! Ótima iniciativa. Estava muito chato tentar desenvolver homebrews em C. rs.
    Estava quase desistindo de tentar rodar python no psp devido a pouca documentação existente. Agora me animei :).
    Só uma pergunta, quando eu rodei o código acima, a tela do psp ficou meio borrada na parte superior. Se você souber do que estou falando, voce sabe qual a causa disso?

    Obrigado.

Leave a Reply