Sunteți pe pagina 1din 42

Verso atual = 14/08/2011

verso inicial : 07/07/2007 - | Andr Koscianski


GRUPO DE
PESQUISA EM
PEDAGOGIA
LDICA
PYTHON : ESTUDO DIRIGIDO









Prefcio



Este pequeno guia vai ajud
tambm poder ajud-lo a melhorar sua habilidade de


Python possui uma vantagem importante em relao a linguagem C e todas as suas derivadas (Java,
C++, C#...): a sintaxe mais simples e evita
problemas e seus respectivos algoritmos

Por isso Python uma tima linguagem inicial.

Para que o trabalho funcione
oriunda da Internet e, sobretudo, resolva os problemas propostos
energia no trabalho voc tem todas as chances de obter bons resultados.


Boa leitura!























3
Este pequeno guia vai ajud-lo a estudar a linguagem de programao Python.
lo a melhorar sua habilidade de programao.

Python possui uma vantagem importante em relao a linguagem C e todas as suas derivadas (Java,
...): a sintaxe mais simples e evita smbolos como { } ; . Isso permite
e seus respectivos algoritmos e menos na sintaxe do cdigo sendo escrito
Por isso Python uma tima linguagem inicial.
funcione preciso dedicar-se. Leia o texto, complemente
resolva os problemas propostos. Fazendo isso
voc tem todas as chances de obter bons resultados.
guia de estudos python
Andr Koscianski
lo a estudar a linguagem de programao Python. Eventualmente, ele
Python possui uma vantagem importante em relao a linguagem C e todas as suas derivadas (Java,
se concentrar mais nos
do cdigo sendo escrito.
se. Leia o texto, complemente-o com informao
ou seja, concentrando










O texto no deve ser usado fora da UTFPR sem o consentimento do autor.





Sumrio

Parte um: Linguagem bsica ................................
1. PRINT e operaes aritmticas
2. Variveis ................................
3. PRINT e nmeros, parte II
4. IMPORT ................................
5. IF ELSE ................................
6. Razes de Equao ................................
7. Entrada de Dados ................................
8. Laos for................................
9. Nmeros aleatrios ................................
10. Nmeros aleatrios em um intervalo
11. Lao WHILE ................................
12. Asteriscos KGB ................................
13. FROM ... IMPORT ................................
14. Sub-rotinas................................
15. Acentuao ................................
16. Laos FOR com listas
Parte dois: PYGAME bsico ................................
17. FROM ... IMPORT parte II
18. Mostrar objeto na tela
19. Mover objeto ................................
20. Figuras com Transparncias
21. Problema: i-i ................................
22. Problema: dois i-is

4
O texto no deve ser usado fora da UTFPR sem o consentimento do autor.
................................................................................................
PRINT e operaes aritmticas ................................................................
................................................................................................................................
parte II ................................................................................................
................................................................................................................................
................................................................................................................................
................................................................................................
................................................................................................
................................................................................................................................
................................................................................................
Nmeros aleatrios em um intervalo ................................................................
................................................................................................
................................................................................................
................................................................................................
................................................................................................
................................................................................................
Laos FOR com listas ................................................................................................
................................................................................................
FROM ... IMPORT parte II................................................................................................
Mostrar objeto na tela................................................................................................
................................................................................................
Transparncias ................................................................
................................................................................................
is ................................................................................................
guia de estudos python
Andr Koscianski
................................................... 7
.................................................................... 8
...................................... 9
............................................ 9
...................................... 10
........................................ 11
..................................................... 12
...................................................... 12
..................................... 13
................................................... 13
.................................................... 13
............................................................ 14
....................................................... 15
................................................... 17
............................................................. 18
............................................................ 18
.............................................. 19
................................................... 20
...................................... 21
........................................... 22
......................................................... 24
.................................................................. 25
...................................................... 26
............................................. 26



23. MRUV, Movimento retilneo uniformemente acelerado
24. MRUV com atrito ................................
25. Controle do teclado
26. Problema: teste da fila de eventos.
27. Estado atual do teclado
28. Problema: i-i com controle
29. Problema: i-i com super
30. Canho anti-areo ................................
31. Escrevendo na tela grfica
Parte trs: Orientao a Objetos bsica em Python
32. Rudimentos de OO em Python , parte I
33. Rudimentos de OO em Python , parte II
34. Objetos so variveis
35. A varivel self de Python
36. Atributos de objetos
37. Avies objetos ................................
38. Esqueleto de jogo: pouso lunar, parte I
39. Esqueleto de jogo: pouso lunar, parte II

5
MRUV, Movimento retilneo uniformemente acelerado ................................
................................................................................................
Controle do teclado ................................................................................................
Problema: teste da fila de eventos. ................................................................
Estado atual do teclado ................................................................................................
i com controle ................................................................
i com super-controle ................................................................
................................................................................................
Escrevendo na tela grfica ................................................................................................
rte trs: Orientao a Objetos bsica em Python ................................................................
Rudimentos de OO em Python , parte I ................................................................
Rudimentos de OO em Python , parte II ................................................................
Objetos so variveis ................................................................................................
de Python ................................................................................................
Atributos de objetos ................................................................................................
................................................................................................
o de jogo: pouso lunar, parte I ................................................................
Esqueleto de jogo: pouso lunar, parte II ................................................................
guia de estudos python
Andr Koscianski
...................................................... 27
................................................... 28
............................................... 29
....................................................... 31
......................................... 31
................................................................ 32
..................................................... 32
................................................. 33
..................................... 34
............................................. 35
................................................ 36
............................................... 36
............................................. 37
...................................... 38
.............................................. 39
.................................................... 40
................................................ 41
............................................... 42





Como este guia funciona


Este guia de estudos composto de uma srie de problemas em

Para que o trabalho corra bem, h algumas dicas.

Em primeiro lugar, procure no
pior, assistir novela ou jornal nacional (estes dois ltimos tero efeitos negativos sobre seu crebro).

Isso vale para qualquer disciplina: jamais estude pensando em outra coisa. Voc s

Segundo conselho, no exagere
estude 30 minutos por dia e depois mude de assunto. Use isso para aprender mais sobre Python e
jogos/PyGame, mas tambm para TODAS as disciplinas d
Estudando mais atento e descansado, seu trabalho render o dobro.


Resolva todos os problemas

1) se um problema for muito fcil, construa a soluo mentalment
ou se sentir inseguro, pode ser melhor implementar

2) se um problema parecer muito difcil, voc pode tentar passar para o problema seguinte. Algumas
vezes a ordem de dificuldade proposta no exatamente a SUA ordem de di


Se isso tudo acima no funcionar apele a um colega ou a um professor.


Mos a obra.

6
Como este guia funciona
Este guia de estudos composto de uma srie de problemas em ordem crescente de dificuldade.
bem, h algumas dicas.
no misturar estudo com rdio, briga com o irmo mais novo ou, muito
pior, assistir novela ou jornal nacional (estes dois ltimos tero efeitos negativos sobre seu crebro).
Isso vale para qualquer disciplina: jamais estude pensando em outra coisa. Voc s
no exagere. Ao invs de estudar cinco horas durante
minutos por dia e depois mude de assunto. Use isso para aprender mais sobre Python e
, mas tambm para TODAS as disciplinas do curso. Fazendo isso voc nunca enjoa ou cansa.
Estudando mais atento e descansado, seu trabalho render o dobro.
na ordem em que aparecem, salvo em dois casos:
1) se um problema for muito fcil, construa a soluo mentalmente. Mas: s
melhor implementar.
2) se um problema parecer muito difcil, voc pode tentar passar para o problema seguinte. Algumas
vezes a ordem de dificuldade proposta no exatamente a SUA ordem de dificuldade.
no funcionar apele a um colega ou a um professor.
guia de estudos python
Andr Koscianski
ordem crescente de dificuldade.
estudo com rdio, briga com o irmo mais novo ou, muito
pior, assistir novela ou jornal nacional (estes dois ltimos tero efeitos negativos sobre seu crebro).
Isso vale para qualquer disciplina: jamais estude pensando em outra coisa. Voc s perder tempo.
. Ao invs de estudar cinco horas durante o fim de semana todo,
minutos por dia e depois mude de assunto. Use isso para aprender mais sobre Python e
o curso. Fazendo isso voc nunca enjoa ou cansa.
salvo em dois casos:
: se surgir alguma dvida
2) se um problema parecer muito difcil, voc pode tentar passar para o problema seguinte. Algumas
ficuldade.





Parte um: Linguagem bsica


Voc deve instalar o interpretador de Python em sua mquina.
default da instalao. Isso significa pressionar Ok e Yes a todas as perguntas durante a instalao.

A ltima verso pode ser encontrada na internet (
ironpython ou outras implementaes. Nada impede, contudo, de test

Voc pode executar comandos Python diretamente. Para saber se o interpretador funciona, faa
como mostra esta figura:

7
Parte um: Linguagem bsica
Voc deve instalar o interpretador de Python em sua mquina. Ao faz-lo bom usar
Isso significa pressionar Ok e Yes a todas as perguntas durante a instalao.
A ltima verso pode ser encontrada na internet (www.python.org). Usaremos o Cpython (e no
ironpython ou outras implementaes. Nada impede, contudo, de test-las).
Voc pode executar comandos Python diretamente. Para saber se o interpretador funciona, faa


Caso no funcione
computador/propriedades/avanado/variveis de
ambiente" se a varivel PATH contem referncia ao
diretrio onde o interpretador Python foi instalado.

Como ltimo recurso, desinstale e instale
novamente o interpretador.










guia de estudos python
Andr Koscianski
lo bom usar o diretrio-
Isso significa pressionar Ok e Yes a todas as perguntas durante a instalao.
Usaremos o Cpython (e no
Voc pode executar comandos Python diretamente. Para saber se o interpretador funciona, faa

funcione, verifique em "meu
computador/propriedades/avanado/variveis de
ambiente" se a varivel PATH contem referncia ao
rpretador Python foi instalado.
Como ltimo recurso, desinstale e instale
novamente o interpretador.




1. PRINT e operaes aritmticas

Vamos ao primeiro problema deste guia.
ativar o interpretador Python (simplesmente d
ambiente por ele fornecido.

Usando apenas o comando print, teste os operadores aritmticos usando nmeros inteiros e
fracionrios. Os operadores so: + - * ** / // e % .

Comece observando esta cpia de tela


Faa testes simples com nmeros

Descubra para que servem os operadores ** e % (ex.: 3**4 e 40 % 3).

Depois, teste parentizao. Por exemplo, calcule



Voc dever incluir vrios parnteses adicionais e s

Em caso de dvida parentize

Lembre-se da ordem de precedncia de operaes. O
voc j sabia. Mas no custava lembrar!).

8
aritmticas
Vamos ao primeiro problema deste guia. Voc pode resolv-lo sem usar um editor de textos! B
ativar o interpretador Python (simplesmente digite: python <ENTER>) e escrever os comandos "dentro" do
Usando apenas o comando print, teste os operadores aritmticos usando nmeros inteiros e
* ** / // e % .
esta cpia de tela para entender como funciona:
Faa testes simples com nmeros grandes e pequenos, positivos e negativos.
Descubra para que servem os operadores ** e % (ex.: 3**4 e 40 % 3).
este parentizao. Por exemplo, calcule
11
137 51
2
1
144
4

parnteses adicionais e sua expresso dever comear assim:
(11 * ( ( 137
Em caso de dvida parentize cada operao.
se da ordem de precedncia de operaes. O resultado de 5-2*2 igual
sabia. Mas no custava lembrar!).
guia de estudos python
Andr Koscianski
um editor de textos! Basta
os comandos "dentro" do
Usando apenas o comando print, teste os operadores aritmticos usando nmeros inteiros e

grandes e pequenos, positivos e negativos.
ver comear assim:
2*2 igual a 1 e no 6. (Ok, ok,





2. Variveis

Assim como a linguagem Basic,
Variveis passam a existir assim que recebem um valor


Python utiliza tipagem dinmica


Percebeu o que aconteceu com a varivel a acima?
colateral negativo. Um programador mediano ou ruim pode escrever cdigo extraodinariamente sujo.
Cdigo bom se aprende lendo.
Wirth (deveria ser obrigatrio no curso de Fundamentos da Programao
linguagem C), S. Maguire (Writing Solid Code)
da linguagem C++).

3. PRINT e nmeros, parte II

Tente este comando:

prompt python

>>>print 1, 2, 3; 4; 5


e em seguida, este:

prompt python

>>>print 1.2151E3 + 6.28E


Explique os resultados que aparecem na tela.

9
Assim como a linguagem Basic, Python dispensa declarao de variveis.
Variveis passam a existir assim que recebem um valor. Veja:

tipagem dinmica. Isso permite certas diabruras impossveis em outras linguagens

Percebeu o que aconteceu com a varivel a acima? Essa liberdade toda pode ter u
m programador mediano ou ruim pode escrever cdigo extraodinariamente sujo.
Cdigo bom se aprende lendo. Uma pequena lista de bons autores / bons programadores
o curso de Fundamentos da Programao), Kernighan & Ritchie
(Writing Solid Code), D. Knuth, A. N. Tenembaum (Data Struct
e nmeros, parte II
prompt python
1, 2, 3; 4; 5
prompt python
>>>print 1.2151E3 + 6.28E-1
Explique os resultados que aparecem na tela.
guia de estudos python
Andr Koscianski
is em outras linguagens:
Essa liberdade toda pode ter um efeito
m programador mediano ou ruim pode escrever cdigo extraodinariamente sujo.
/ bons programadores : Niklaus
, Kernighan & Ritchie (autores da
(Data Structures), Stroustrup (pai
sugesto: aprenda +
sobre isto na
Wikipedia



4. IMPORT

Python possui vrias biblioteca

As bibliotecas so carregada
memria carregando coisas do disco que no sero utilizadas.

Semelhante s declaraes #include
avise sobre as bibliotecas a serem utilizadas.

Isto feito com o comando import

Exemplo 1:
Escreva o cdigo a seguir no bloco de notas ou use o editor N
extenso .PY

teste.py

import math

print math.sqrt (9)



(sqrt = squared root)


Exemplo 2:

prompt python

>>>import math

>>>help (math)


Teste o cdigo acima!
Voc dever pressionar <ENTER> para rolar a lista

10
bibliotecas embutidas e mais um milho de outras na Internet
carregadas conforme voc precisa. A lgica disso clara: no perder tempo e
memria carregando coisas do disco que no sero utilizadas.
#include usadas nas linguagens da famlia C, Python requer que voc lhe
avise sobre as bibliotecas a serem utilizadas.
import.
Escreva o cdigo a seguir no bloco de notas ou use o editor Notepad++. Salve o arquivo com

print math.sqrt (9)

(sqrt = squared root)
prompt python
>>>import math
>>>help (math)
Voc dever pressionar <ENTER> para rolar a lista e <CTRL>+C para interromper
guia de estudos python
Andr Koscianski
embutidas e mais um milho de outras na Internet!
conforme voc precisa. A lgica disso clara: no perder tempo e
usadas nas linguagens da famlia C, Python requer que voc lhe
otepad++. Salve o arquivo com
interromper.





5. IF ELSE

Um exemplo explicar tudo rapidamente

teste-if.py

if 1 > 2 :
print "nunca"
print "nunquinha"
else :
print "ok
print "tem razao"

print "Era isso por hoje."

No cdigo acima existem blocos de
1) a presena de dois pontos sinalizando o incio de um bloco
2) o fato de todas as linhas do bloco serem


Dica:

Nas opes do Notepad++ ou de seu editor predileto,
configure
branco.

Isso pode evitar muitas dores de cabea.









11
Um exemplo explicar tudo rapidamente
print "nunca"
print "nunquinha"
ok"
print "tem razao"
print "Era isso por hoje."
existem blocos de comandos. Observe:
a presena de dois pontos sinalizando o incio de um bloco
o fato de todas as linhas do bloco serem igualmente identadas
Nas opes do Notepad++ ou de seu editor predileto,
configure a troca de tabulaes por espaos em

Isso pode evitar muitas dores de cabea.
guia de estudos python
Andr Koscianski






6. Razes de Equao

Abra o artigo da Wikipedia em portugus sobre a linguagem FORTRAN.

Adapte para Python o cdigo FORTRAN que calcula os zeros de um polinmio de segundo grau,


(caso o artigo da Wikipedia tenha sido modificado, voc no dever ter dificuldade em encontrar a
frmula em outro site).

- E por que voc no coloca a frmula aqui, ora?

- Por que se voc no puder achar a frmula via Google, e


7. Entrada de Dados

Experimente a funo input()

Adapte o programa anterior para que o usurio digite os coeficientes a,b,c.

12
Abra o artigo da Wikipedia em portugus sobre a linguagem FORTRAN.
Adapte para Python o cdigo FORTRAN que calcula os zeros de um polinmio de segundo grau,


(caso o artigo da Wikipedia tenha sido modificado, voc no dever ter dificuldade em encontrar a
E por que voc no coloca a frmula aqui, ora?
Por que se voc no puder achar a frmula via Google, ento est realmente em mau
input().
Adapte o programa anterior para que o usurio digite os coeficientes a,b,c.
guia de estudos python
Andr Koscianski
Adapte para Python o cdigo FORTRAN que calcula os zeros de um polinmio de segundo grau,
(caso o artigo da Wikipedia tenha sido modificado, voc no dever ter dificuldade em encontrar a
nto est realmente em maus lenis...





8. Laos for

Extremamente fcil:


teste-for.py

for i in range(10) :
print i ;

print "Era isso por hoje."





Exerccio:





9. Nmeros aleatrios

Teste isto (e naturalmente experimente modificaes para ver o que acontece)

teste-for.py

import random

print random.random(

print int (100.0 *


Depois, crie um programa para imprimir 10 nmeros aleatrios (usando, claro, um FOR
voc nem precise escrever o programa, se j houver entendido o cdigo acima


10. Nmeros aleatrios em um intervalo


Escreva um programa para gerar 10 nmeros aleatrios. Os nmeros gerados devem estar dentro do
intervalo [25 ; 77].

Restrio: em seu programa voc s pode invocar a funo random 10 vezes.

Dica: use o operador de resto de diviso.

13
for i in range(10) :
print i ;
print "Era isso por hoje."
cio: descubra as diferenas entre range (n), range(a,b)
(e naturalmente experimente modificaes para ver o que acontece)
import random
print random.random()
100.0 * random.random())
programa para imprimir 10 nmeros aleatrios (usando, claro, um FOR
voc nem precise escrever o programa, se j houver entendido o cdigo acima).
Nmeros aleatrios em um intervalo
programa para gerar 10 nmeros aleatrios. Os nmeros gerados devem estar dentro do
m seu programa voc s pode invocar a funo random 10 vezes.
resto de diviso.
guia de estudos python
Andr Koscianski
range(a,b) e xrange (n).
(e naturalmente experimente modificaes para ver o que acontece) :
programa para imprimir 10 nmeros aleatrios (usando, claro, um FOR talvez
programa para gerar 10 nmeros aleatrios. Os nmeros gerados devem estar dentro do
m seu programa voc s pode invocar a funo random 10 vezes.





11. Lao WHILE


Aqui est:

teste-while.py

i = 1

while i < 10 :
print i;
i = i + 1




Problema: efetue duas modificaes no programa do problema anterior.

1) utilize um lao WHILE em lugar de um FOR

2) os nmeros impressos devem ser todos pares

(valem as restries anteriores: random chamada 10 vezes, o intervalo vlido [25 ; 77])






E veja tambm isto:

laco-infinito.py

while 1 :
print "nunca para!" ,


Ok?

Como nas linguagens C e C++, um valor diferente de zero representa


14

while i < 10 :
print i;
i = i + 1
Problema: efetue duas modificaes no programa do problema anterior.
1) utilize um lao WHILE em lugar de um FOR
2) os nmeros impressos devem ser todos pares
anteriores: random chamada 10 vezes, o intervalo vlido [25 ; 77])
infinito.py
print "nunca para!" ,
Como nas linguagens C e C++, um valor diferente de zero representa true; logo, este lao
guia de estudos python
Andr Koscianski
anteriores: random chamada 10 vezes, o intervalo vlido [25 ; 77])
; logo, este lao infinito.





12. Asteriscos KGB

Os problemas a seguir usam laos aninhados e servem para exercitar programao.

Deve ser feitos observando a seqncia
pode saltar para o final da lista.


Astericos KGB: regra geral

Em todos os problemas a seguir:
devem ser usados laos
a impresso na tela s pode ser feita

Por exemplo, para imprimir dois asteriscos:

certo
for i in xrange(2)
PRINT *



KGB , problema 1

Imprima 10 asteriscos em uma linha, assim:
**********



KGB , problema 2

Imprima um bloco 10 X 10 de asteriscos no vdeo
**********
**********
...
**********



KGB , problema 2

Obtenha este desenho na tela
* ** *** **** *****




15

Os problemas a seguir usam laos aninhados e servem para exercitar programao.
Deve ser feitos observando a seqncia de dificuldade proposta. Em todo caso, se quiser se divertir,

Em todos os problemas a seguir:
devem ser usados laos ;
a impresso na tela s pode ser feita um caracter por vez .
Por exemplo, para imprimir dois asteriscos:
certo ERRADO
i in xrange(2)
PRINT *

PRINT **

2 linhas de cdigo
Imprima 10 asteriscos em uma linha, assim:
4 linhas de cdigo
Imprima um bloco 10 X 10 de asteriscos no vdeo
4 linhas de cdigo
Obtenha este desenho na tela

guia de estudos python
Andr Koscianski
Os problemas a seguir usam laos aninhados e servem para exercitar programao.
de dificuldade proposta. Em todo caso, se quiser se divertir,
2 linhas de cdigo
4 linhas de cdigo
4 linhas de cdigo



KGB , problema 3

Obtenha este desenho na tela:
*
**
***
...
**********

KGB , problema 3

Obtenha este desenho na tela:
+
*+
+*+
*+*+
+*+*+
...

KGB , problema 4

Obtenha este desenho na tela:
*
**
***
**
*
**
***
**
... (repetir quantas vezes desejar)


KGB , problema 5

Obtenha este desenho na tela:
* * *
*** *** ***
**************
(repetir horizontalmente 4 ou 5 vezes)


KGB , problema 4

Obtenha este desenho na tela:

***** *****
* * * *
***** ***** ****

16
4 linhas de cdigo
Obtenha este desenho na tela:
7 linhas de cdigo
Obtenha este desenho na tela:
sem recurso, 9 linhas de cdigo
Obtenha este desenho na tela:
(repetir quantas vezes desejar)
14 linhas de cdigo
Obtenha este desenho na tela:
horizontalmente 4 ou 5 vezes)
Obtenha este desenho na tela:
***** ****
guia de estudos python
Andr Koscianski
4 linhas de cdigo
linhas de cdigo
linhas de cdigo
14 linhas de cdigo



13. FROM ... IMPORT

Voc deve lembrar disto

teste.py

import math

print math.sqrt


Ok. Agora compare cuidadosamente o cdigo acima com este:

teste.py

from math import sqrt

print sqrt(9)


Percebeu? Usamos uma sintaxe um pouco diferente para
ir ainda mais longe e escrever assim:

teste.py

from math import *

print sqrt(9)



Problema: explique o que acontece nesta tela:


17
FROM ... IMPORT

print math.sqrt(9) + math.sin(0.1)
compare cuidadosamente o cdigo acima com este:
import sqrt
(9) + math.sin(0.1)
Percebeu? Usamos uma sintaxe um pouco diferente para simplificar as chamadas sqrt(). Podemos
ir ainda mais longe e escrever assim:
import *
(9) + sin(0.1)
: explique o que acontece nesta tela:

guia de estudos python
Andr Koscianski
simplificar as chamadas sqrt(). Podemos





14. Sub-rotinas

Podem ser parametrizadas ou no.

A sintaxe simplssima.

no_parms.py

def bonjour
print "ok?"

def a_plus ():
print "bye.

print "vamos invocar as sub
bonjour ()
a_plus ()


E com parmetros:

with_parms.py

def bonjour (

for i in xrange(n):
print "ok?"


print "vamos
bonjour (10)


15. Acentuao

Python suporta Unicode. Para isso voc deve incluir duas modificaes em seu cdigo.

no_parms.py

# -*- coding: iso

print "bla-bla"

print u"."


18
Podem ser parametrizadas ou no.
():
print "ok?"
():
bye."


print "vamos invocar as sub-rotinas"
parms.py
def bonjour (n):
for i in xrange(n):
print "ok?"
print "vamos invocar a sub-rotina"
)
suporta Unicode. Para isso voc deve incluir duas modificaes em seu cdigo.
coding: iso-8859-1 -*-
bla"
print u"."
primeira linha
prefixo u
guia de estudos python
Andr Koscianski
suporta Unicode. Para isso voc deve incluir duas modificaes em seu cdigo.

primeira linha






16. Laos FOR com


Rode este exemplo.


forlista.py

for x in [2,4,
print x,




Fcil?

Listas so estruturas de dados muito teis. Sua manipulao em Python bastante simples.

19
listas
for x in [2,4,-3,-1,103]:
print x,
Listas so estruturas de dados muito teis. Sua manipulao em Python bastante simples.
guia de estudos python
Andr Koscianski
Listas so estruturas de dados muito teis. Sua manipulao em Python bastante simples.






Parte dois: PYGAME bsico




Do incio das atividades de programao at aqui, foram apenas
E agora j vamos iniciar as explicaes sobre a biblioteca de jogos!


Conforme prometido, o guia bastante objetivo.

Mas, antes de continuar, um conselho dentro de uma pergunta:

- Voc resolveu os problemas propostos?




Para continuar:

Voc precisa da biblioteca PYGAME instalada em sua mquina.

Para instal-la:

1. faa a transferncia (
2. execute o .EXE

A linguagem Python possui todo um mecanismo para gerir bibliotecas e sua instalao.
no seja tratado neste guia.

20
Parte dois: PYGAME bsico
Do incio das atividades de programao at aqui, foram apenas 10 pginas
agora j vamos iniciar as explicaes sobre a biblioteca de jogos!
Conforme prometido, o guia bastante objetivo.
ntes de continuar, um conselho dentro de uma pergunta:
Voc resolveu os problemas propostos?
da biblioteca PYGAME instalada em sua mquina.
faa a transferncia (download)
A linguagem Python possui todo um mecanismo para gerir bibliotecas e sua instalao.
guia de estudos python
Andr Koscianski
10 pginas!.
A linguagem Python possui todo um mecanismo para gerir bibliotecas e sua instalao. Talvez isto






17. FROM ... IMPORT parte II


Digite e salve estes dois programas no mesmo diretrio.

minhalib.py

def minhasub
print "Biblioteca presente"



meuprog.py

import minhalib

minhalib.minhasubrotina ("teste")


Fcil?


Como isto pode ser usado?




















21
IMPORT parte II
Digite e salve estes dois programas no mesmo diretrio.
minhasubrotina (s):
print "Biblioteca presente", s
import minhalib
minhalib.minhasubrotina ("teste")


Exemplo: era uma vez dois amigos, Ana e Carlos.
Ana escreveu um mdulo Python, para
colorido na tela. Ela o gravou com

Carlos copiou o cdigo do placar e o colou
jogo que fez. Ana preferiu usar import placar

Um dia, Ana percebeu um erro no clculo do placar.
corrigiu o erro em 10 minutos, no mdulo placar.py.
Automaticamente, todos os jogos
ficaram corrigidos.

Carlos gastou um dia inteiro procurando e
cdigo do placar dentro de cada jogo.
guia de estudos python
Andr Koscianski

Exemplo: era uma vez dois amigos, Ana e Carlos.
Python, para mostra um placar
. Ela o gravou como placar.PY.
e o colou dentro de cada
Ana preferiu usar import placar
erro no clculo do placar. Ela
0 minutos, no mdulo placar.py.
odos os jogos que utilizavam import
procurando e corrigindo o
dentro de cada jogo.




18. Mostrar objeto na tela


Desenhe uma bola usando o PaintBrush.

No mesmo diretrio, salve o programa a seguir e execute

bola0.py

import pygame

pygame.init ()

tela = pygame.display.set_mode ((320,240))
bola = pygame.image.load ("bo
bolaret = bola.get_rect ()
tela.blit (bola, bolaret)
pygame.display.flip()
a = raw_input ("Voila")








Na prxima pgina vamos analisar cada linha do cdigo.

22
Mostrar objeto na tela
Desenhe uma bola usando o PaintBrush. Grave como BMP.
No mesmo diretrio, salve o programa a seguir e execute-o.
import pygame
pygame.init ()
tela = pygame.display.set_mode ((320,240))
bola = pygame.image.load ("bola.bmp")
bolaret = bola.get_rect ()
tela.blit (bola, bolaret)
pygame.display.flip()
a = raw_input ("Voila")

vamos analisar cada linha do cdigo.
guia de estudos python
Andr Koscianski







#

Linha

0 import pygame
1 pygame.init ()
2 tela = pygame.display.
set_mode ((320,240))
3 bola = pygame.image.load
("bola.bmp")
4 bolaret = bola.get_rect ()
5 tela.blit (bola, bolaret)
6 pygame.display.flip ()
7 a = raw_input ("Voila")

23

Significado
Importa toda a biblioteca pygame.

Inicializa todos os componentes da biblioteca, deixando
pronta para uso.

Pode-se tambm inicializar apenas
individualmente.
mais rpido quando se sabe que apenas um pedao dela
ser usado (ex.: um programa que no tem som, no precisa
inicializar essa parte!).
tela = pygame.display.
set_mode ((320,240))
Cria uma janela grfica com as dimenses especificadas.

Tais dimenses so passadas sub
tupla um conjunto de valores separados por vrgulas e
circundados por parnteses.

Entendeu? Esta chamada de sub-rotina usou apenas UM
parmetro, que a tupla (320, 240).
= pygame.image.load
("bola.bmp")
A varivel bola um pouco mais que uma varivel comum,
como uma varivel inteira que se pode somar

A varivel bola um objeto.

Um objeto pode conter variveis e sub
Neste caso, a varivel bola contem a imagem feita no
PantBrush.
bolaret = bola.get_rect ()
A varivel bolaret guarda o tamanho (comprimento e
altura) da imagem contida no objeto bola.
tela.blit (bola, bolaret)
Veja novamente a linha 2: o objeto tela l obtido usado
aqui.

A sub-rotina blit() carimba a imagem da bola na tela.

Isto um truque: na verdade existem DUAS telas, uma que
voc v e outra que fica escondida.

Todos os desenhos so feitos na tela

A sub-rotina flip() troca essas telas. O resultado
usurio ter a impresso de que o desenho foi feito
instantneamente.

a = raw_input ("Voila")
Sem esta linha o programa terminaria imediatamente.
Voc veria apenas a tela piscar e.. fim.

a = input() no funciona (experimente testar), ento foi
usado raw_input().
guia de estudos python
Andr Koscianski
Significado
os os componentes da biblioteca, deixando-a
apenas pedaos da biblioteca,
mais rpido quando se sabe que apenas um pedao dela
ser usado (ex.: um programa que no tem som, no precisa
m as dimenses especificadas.
Tais dimenses so passadas sub-rotina por meio de uma
um conjunto de valores separados por vrgulas e
rotina usou apenas UM
.
m pouco mais que uma varivel comum,
uma varivel inteira que se pode somar A=B+C.
sub-rotinas.
Neste caso, a varivel bola contem a imagem feita no
o tamanho (comprimento e
o objeto bola.
: o objeto tela l obtido usado
carimba a imagem da bola na tela.
verdade existem DUAS telas, uma que

Todos os desenhos so feitos na tela escondida.
rotina flip() troca essas telas. O resultado que o
a impresso de que o desenho foi feito
rminaria imediatamente.
fim.
a = input() no funciona (experimente testar), ento foi



19. Mover objeto


Teste este programa. ATENO: p


bola1.py

import pygame

pygame.init ()

size

speed = [2, 2]

screen = pygame.display.set_mode (size)
ball = pygame.image.load ("ball.bmp")
ballrect = ball.get_rect ()
screen.blit (ball, ballrect)
pygame.display.flip()

for i in xrange(100):

ballrect = ballrect.move (speed)

print ballrect

screen.fill ((0, 0, 0))
screen.blit (ball, ballrect)
pygame.display.flip
pygame.time.delay



A seta preta (1) mostra atribuies em seqncia:
size recebe a tupla
width recebe 320 e height recebe

A seta branca (2) mostra a criao de uma

Na seta verde (3) mostra as coordenadas contidas em ballrect so movidas.

Na seta vermelha (4) a tela toda preenchi

Na seta laranja (5), pygame manda o programa ficar paralisado durante 10 mili

1)
2)
3)
4)
5)

24
ATENO: para termin-lo voc precisar fechar a janela DOS.
import pygame
pygame.init ()
= width, height = 320, 240
speed = [2, 2]
screen = pygame.display.set_mode (size)
ball = pygame.image.load ("ball.bmp")
ballrect = ball.get_rect ()
screen.blit (ball, ballrect)
pygame.display.flip()
for i in xrange(100):
ballrect = ballrect.move (speed)
print ballrect
screen.fill ((0, 0, 0))
screen.blit (ball, ballrect)
pygame.display.flip ()
pygame.time.delay (10)
mostra atribuies em seqncia:
size recebe a tupla (320, 240)
e height recebe 240.
mostra a criao de uma lista com 2 elementos.
as coordenadas contidas em ballrect so movidas.
a tela toda preenchida (to fill, em ingls) com cor preta (RGB = 0,0,0).
, pygame manda o programa ficar paralisado durante 10 mili
guia de estudos python
Andr Koscianski
fechar a janela DOS.



da (to fill, em ingls) com cor preta (RGB = 0,0,0).
, pygame manda o programa ficar paralisado durante 10 mili-segundos.





20. Figuras com Transparncias

Voc deve ter observado que a figura da bola tem uma estranha borda branca:


Isso acontece pois a figura na verdade um quadrado


Para conseguir esse efeito, avise a pygame que uma das cores da figura deve ser interpretada como
buracos. Ou seja, essa cor representa

Modifique o programa anterior assim:

bola2.py

...

colorkey = ball.get_at ((0,0))
ball.set_colorkey (colorkey, pygame.RLEACCEL)

for i in xrange(100):

...


Na seta vermelha, lemos a cor do pixel superior esquerdo da figura (coordenadas 0,0).
Na seta laranja, avisamos ao objeto ball que essa cor deve ser tratada como transparente.

25
Figuras com Transparncias
Voc deve ter observado que a figura da bola tem uma estranha borda branca:
.
Isso acontece pois a figura na verdade um quadrado. Mas seria bem melhor algo assim:

Para conseguir esse efeito, avise a pygame que uma das cores da figura deve ser interpretada como
buracos. Ou seja, essa cor representar espaos transparentes.
Modifique o programa anterior assim:
colorkey = ball.get_at ((0,0))
ball.set_colorkey (colorkey, pygame.RLEACCEL)
for i in xrange(100):
cor do pixel superior esquerdo da figura (coordenadas 0,0).
seta laranja, avisamos ao objeto ball que essa cor deve ser tratada como transparente.
guia de estudos python
Andr Koscianski
Voc deve ter observado que a figura da bola tem uma estranha borda branca:
. Mas seria bem melhor algo assim:
Para conseguir esse efeito, avise a pygame que uma das cores da figura deve ser interpretada como

cor do pixel superior esquerdo da figura (coordenadas 0,0).
seta laranja, avisamos ao objeto ball que essa cor deve ser tratada como transparente.




21. Problema: i-i


Modifique o programa anterior de forma que
descendo na tela.

Voc precisar usar um comando IF e tambm



22. Problema: dois


Modifique o programa i-i

Voc dever criar uma segunda bola com o PaintBrush. Precisar tam
bola2, que receber a figura lida do disco

ball2 = pygame.image.load ("ball
ballrect2 = ball.get_rect ()

Voc tambm precisar modificar
mesmo lugar da tela (uma sobre a outra).

26
i
anterior de forma que a bola faa um movimento de
um comando IF e tambm precisar mudar o contedo da varivel
dois i-is
para que existam duas bolas de cores diferentes pulando na tela.
Voc dever criar uma segunda bola com o PaintBrush. Precisar tambm de uma segunda varivel,
bola2, que receber a figura lida do disco
= pygame.image.load ("ball2.bmp")
ballrect2 = ball.get_rect ()
modificar a varivel ballrect2, para evitar que as duas bolas apaream no
da tela (uma sobre a outra).
guia de estudos python
Andr Koscianski

faa um movimento de i-i, subindo e
mudar o contedo da varivel speed.
para que existam duas bolas de cores diferentes pulando na tela.
bm de uma segunda varivel,
, para evitar que as duas bolas apaream no





23. MRUV, Movimento retilneo uniformemente acelerado


Vamos modificar o primeiro

Quando a bola se move na tela, possui uma certa velocidade, certo?
A cada vez que o lao executado, a imagem da bola
pixels mais longe. Quanto maior o nmero de pixels, maior a velocidade.

Vamos ento mudar a velocidade
acontece com uma bola de verdade.

Como?

A melhor maneira aplicar Fsica de verdade. Comece lembrando desta frmula:


A varivel da frmula corresponde, no programa, varivel

medida em que o tempo passa (= cada
dever ser re-calculada usando essa frmula.

Outra forma de trabalhar e neste caso mais fcil


Fisicamente a mesma idia, mas agora no dependemos mais de

Para aplicar (2), observe que
chamada pygame.time.delay().

Para implementar o programa, voc deve criar uma
velocidadeantiga. Deve relacionar essas variveis com a frmula (2).

Finalmente, assim que a bola toca o cho, voc
Isso muito fcil; basta mudar o sinal da velocidade:


Dica: a acelerao deve ser fixa e seria bom voc comear com um valor baixo
programa rodar corretamente (sem travar), voc aumentar esse nmero at achar o valor certo.

27
MRUV, Movimento retilneo uniformemente acelerado
primeiro programa do i-i, para dar um toque de realismo fsico.
Quando a bola se move na tela, possui uma certa velocidade, certo?
A cada vez que o lao executado, a imagem da bola apagada e depois surge novamente alguns
ixels mais longe. Quanto maior o nmero de pixels, maior a velocidade.
Vamos ento mudar a velocidade e acelerar a bola, fazendo ela cair cada vez mais rpido
acontece com uma bola de verdade.
A melhor maneira aplicar Fsica de verdade. Comece lembrando desta frmula:

(1)
da frmula corresponde, no programa, varivel speed.
medida em que o tempo passa (= cada iterao do lao principal do programa
calculada usando essa frmula.
e neste caso mais fcil assim:

(2)
Fisicamente a mesma idia, mas agora no dependemos mais de

. Percebeu?
Para aplicar (2), observe que corresponde uma iterao do lao. o valor que voc usou na
Para implementar o programa, voc deve criar uma varivel velocidadenova e uma
velocidadeantiga. Deve relacionar essas variveis com a frmula (2).
Finalmente, assim que a bola toca o cho, voc pode faz-la pular!
mudar o sinal da velocidade:

(3)
acelerao deve ser fixa e seria bom voc comear com um valor baixo
programa rodar corretamente (sem travar), voc aumentar esse nmero at achar o valor certo.
guia de estudos python
Andr Koscianski
MRUV, Movimento retilneo uniformemente acelerado
i, para dar um toque de realismo fsico.
apagada e depois surge novamente alguns
, fazendo ela cair cada vez mais rpido como
A melhor maneira aplicar Fsica de verdade. Comece lembrando desta frmula:
principal do programa), a velocidade
. Percebeu?
corresponde uma iterao do lao. o valor que voc usou na
varivel velocidadenova e uma
algo como 0.001. Se o
programa rodar corretamente (sem travar), voc aumentar esse nmero at achar o valor certo.







24. MRUV com atrito


Continuando o programa anter

Isso acontece porque ela perde energia. Isso acontece de vrias formas.
parte da energia perdida pela frico entre a bola e o ar
outra parte gasta criando barulho
tambm h perdas fazendo o cho vibrar
e gasta uma parcela de


Incluir todas as equaes de Mecnica envolvidas seria um trabalho insano.

Mas h uma sada simples, tipicamente usada por engenheiros.

Como no possvel medir todos os efeitos acima, arredondamos tudo dentro de um coeficiente.
um nmero um pouco mgico, mas que se for bem calibrado vai nos poupar muito trabalho.

Faa o seguinte: quando a bo
subtraia um pouco dessa velocidade. Tecnicamente, o que estamos fazendo dizer que a bola perdeu
momento (ou energia cintica).

A frmula a ser aplicada quando a bola toca o cho :


Entendeu? Uma parcela da velocidade evapora = energia perdida.

Modifique o programa usando essa frmula.

Ateno: a frmula est um pouco complicada em excesso e seria muito bom simplific
menos clculos significa obter um programa que roda mais depressa, algo que muito importante e muito
valorizado por todo programador de jogos. Com mais CPU livre possvel enriquecer o jogo.

Para simplificar a frmula acima, isole a varivel
A frmula mais simples possvel contem apenas uma operao de multiplicao.

28
com atrito
Continuando o programa anterior, voc sabe que uma bola de verdade pula cada vez mais baixo.
Isso acontece porque ela perde energia. Isso acontece de vrias formas.
arte da energia perdida pela frico entre a bola e o ar;
utra parte gasta criando barulho ( foi preciso gastar energia para criar uma onda de som);
fazendo o cho vibrar;
gasta uma parcela de energia fazendo a bola se deformar.
Incluir todas as equaes de Mecnica envolvidas seria um trabalho insano.
imples, tipicamente usada por engenheiros.
Como no possvel medir todos os efeitos acima, arredondamos tudo dentro de um coeficiente.
um nmero um pouco mgico, mas que se for bem calibrado vai nos poupar muito trabalho.
Faa o seguinte: quando a bola toca o cho, mude o sinal da velocidade mas ao mesmo tempo
subtraia um pouco dessa velocidade. Tecnicamente, o que estamos fazendo dizer que a bola perdeu
A frmula a ser aplicada quando a bola toca o cho :


Entendeu? Uma parcela da velocidade evapora = energia perdida.
Modifique o programa usando essa frmula.
: a frmula est um pouco complicada em excesso e seria muito bom simplific
significa obter um programa que roda mais depressa, algo que muito importante e muito
valorizado por todo programador de jogos. Com mais CPU livre possvel enriquecer o jogo.
Para simplificar a frmula acima, isole a varivel

(isto , coloque-a em evidncia).


A frmula mais simples possvel contem apenas uma operao de multiplicao.
guia de estudos python
Andr Koscianski
ior, voc sabe que uma bola de verdade pula cada vez mais baixo.
( foi preciso gastar energia para criar uma onda de som);

Como no possvel medir todos os efeitos acima, arredondamos tudo dentro de um coeficiente.
um nmero um pouco mgico, mas que se for bem calibrado vai nos poupar muito trabalho.
la toca o cho, mude o sinal da velocidade mas ao mesmo tempo
subtraia um pouco dessa velocidade. Tecnicamente, o que estamos fazendo dizer que a bola perdeu
: a frmula est um pouco complicada em excesso e seria muito bom simplific-la. Usar
significa obter um programa que roda mais depressa, algo que muito importante e muito
valorizado por todo programador de jogos. Com mais CPU livre possvel enriquecer o jogo.
a em evidncia).
A frmula mais simples possvel contem apenas uma operao de multiplicao.





25. Controle do teclado

At agora usamos apenas as sub
congelado at que o usurio use a tecla <ENTER>.

Evidentemente isto no serve para controlar um jogo: a entrada de dados deve acontecer
funcionamento do mesmo, sem paraliz




As setas laranjas so automaticamente
cliques de mouse e os coloca na fila do aplicativo dono da tela que recebeu os dados.

As setas vermelhas so gerenciada

As setas verdes mostram um caminho alternativo tambm oferecido pelo S.O.;
e imediatamente o estado pressionado/no pressionado de uma tecla qualquer.
vermelhas) mostram o que aconteceu no
teclado.

O estado passado da entrada

Se quisermos o estado atual
para fazer isso. Essa funo deve pedir ao SO (seja ele Windows, Linux, MacOS...) para examinar o teclado.

Vamos comear pela lgica das setas vermelhas e ler o estado passado do teclado. Veja o programa
na prxima pgina.

caminho

29
Controle do teclado
At agora usamos apenas as sub-rotinas input() e raw_input(). Essas rotinas
a tecla <ENTER>.
Evidentemente isto no serve para controlar um jogo: a entrada de dados deve acontecer
funcionamento do mesmo, sem paraliz-lo.
automaticamente gerenciadas pelo Sistema Operacional.
cliques de mouse e os coloca na fila do aplicativo dono da tela que recebeu os dados.
As setas vermelhas so gerenciadas pelos programas aplicativos.
um caminho alternativo tambm oferecido pelo S.O.;
o estado pressionado/no pressionado de uma tecla qualquer. As filas de eventos (setas
e aconteceu no passado recente.As linhas verdes acessam o estado
da entrada suficiente na maioria das vezes mesmo em jogos.
atual da entrada, em Python, precisamos de alguma funo de bibliotec
para fazer isso. Essa funo deve pedir ao SO (seja ele Windows, Linux, MacOS...) para examinar o teclado.
Vamos comear pela lgica das setas vermelhas e ler o estado passado do teclado. Veja o programa
Sistema
Operacional
fila de
eventos
fila de
eventos
fila de
eventos
Leitura direta (sem
espera na fila)
caminho-1
caminho-2
guia de estudos python
Andr Koscianski
Essas rotinas deixam o programa
Evidentemente isto no serve para controlar um jogo: a entrada de dados deve acontecer durante o

gerenciadas pelo Sistema Operacional. Ele recebe teclas e
cliques de mouse e os coloca na fila do aplicativo dono da tela que recebeu os dados.
um caminho alternativo tambm oferecido pelo S.O.; ele permite ler direta
As filas de eventos (setas
As linhas verdes acessam o estado atual do
mesmo em jogos.
alguma funo de biblioteca
para fazer isso. Essa funo deve pedir ao SO (seja ele Windows, Linux, MacOS...) para examinar o teclado.
Vamos comear pela lgica das setas vermelhas e ler o estado passado do teclado. Veja o programa
Word
Excel
prog.
Python
Leitura direta (sem
espera na fila)al




Digite e teste:

eventos_teclado.py

import pygame
from pygame.locals import *

pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption('Pygame Caption')
pygame.mouse.set_visible(0)

done = False
while not done:
for event in pygame.event.get():
if (event.type == KEYUP) or
(event.type == KEYDOWN):
print event
if (event.key == K_ESCAPE):




Aqui est um exemplo de sada.


A seta verde mostra como escrever uma linha de cdigo muito longa em Python
caracter barra invertida \ .

A seta vermelha mostra um lao
rotina que l a fila de eventos do programa

...
fila_de_
for event in
...



1
Note como esta frase contem lista e fila
possveis. Uma fila no permite insero/remoo de elementos no meio

30
.py
import pygame
from pygame.locals import *
pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption('Pygame Caption')
pygame.mouse.set_visible(0)
done = False
while not done:
for event in pygame.event.get():
if (event.type == KEYUP) or \
(event.type == KEYDOWN):
print event
if (event.key == K_ESCAPE):
done = True
Aqui est um exemplo de sada.
escrever uma linha de cdigo muito longa em Python
um lao for ; esse lao itera sobre uma lista. Essa lista
fila de eventos do programa
1
. Voc tambm poderia programar esse lao assim:
fila_de_eventos = pygame.event.get()
for event in fila_de_eventos:

ote como esta frase contem lista e fila. So estruturas de dados diferentes quanto s operaes
permite insero/remoo de elementos no meio.
guia de estudos python
Andr Koscianski


escrever uma linha de cdigo muito longa em Python: quebrando-a com o
. Essa lista retornada pela
m poderia programar esse lao assim:
. So estruturas de dados diferentes quanto s operaes




26. Problema: teste da fila de eventos.

A biblioteca pygame possui uma funo
instantes.

Lembrou? (Ela j foi usada dentro deste guia).

Use essa rotina no programa de leitura do teclado e descubra se, enquanto o programa est
paralizado, a fila de eventos ainda alimentada pelo S.O.


27. Estado atual do teclado

Agora vamos usar uma funo para ler o estado atual do teclado, sem consultar a fila de eventos.
Essa funo ser bastante til em jogos.

Veja:

estado_teclado.py

import pygame
from pygame.locals import *

pygame.init()

screen = pygame.display.set_mode((100,100))

acc = 0
while (acc <
L = pygame.key.get_pressed()

pygame.event.get()

if L[K_SPACE]:
acc += 1
else:
acc = 0

print acc ,
pygame.time.delay (5)


Na seta vermelha (1), obtemos de pygame uma lista
representa o estado pressionado/livre de uma tecla.
definidas: K_SPACE, K_a , K_b ...

Na seta vermelha(2), chamamos uma funo de pygame; sem essa chamada este programa no
funciona. O motivo? Hmm...

Na seta laranja(3) verificamos se o elemento da lista L correspondente barra de espao contem
True ou False.
1)
2)
3)

31
Problema: teste da fila de eventos.
possui uma funo que paraliza a execuo do programa durante alguns
Lembrou? (Ela j foi usada dentro deste guia).
Use essa rotina no programa de leitura do teclado e descubra se, enquanto o programa est
paralizado, a fila de eventos ainda alimentada pelo S.O.
Estado atual do teclado
funo para ler o estado atual do teclado, sem consultar a fila de eventos.
Essa funo ser bastante til em jogos.
estado_teclado.py
import pygame
from pygame.locals import *
pygame.init()
screen = pygame.display.set_mode((100,100))
while (acc < 50):
L = pygame.key.get_pressed()
pygame.event.get()
if L[K_SPACE]: #barra de espaco pressionada?
acc += 1

acc = 0
print acc ,
pygame.time.delay (5)
Na seta vermelha (1), obtemos de pygame uma lista de valores booleanos. Cada elemento d
representa o estado pressionado/livre de uma tecla. A lista pode ser indexada usando constantes pr
chamamos uma funo de pygame; sem essa chamada este programa no
Na seta laranja(3) verificamos se o elemento da lista L correspondente barra de espao contem
guia de estudos python
Andr Koscianski
que paraliza a execuo do programa durante alguns
Use essa rotina no programa de leitura do teclado e descubra se, enquanto o programa est
funo para ler o estado atual do teclado, sem consultar a fila de eventos.
spaco pressionada?
. Cada elemento dessa lista
A lista pode ser indexada usando constantes pr-
chamamos uma funo de pygame; sem essa chamada este programa no
Na seta laranja(3) verificamos se o elemento da lista L correspondente barra de espao contem




28. Problema: i-i com controle


Volte aos problemas envolvendo uma bola pulando (ou i

Modifique o programa para que a bola seja
<ENTER>.


29. Problema: i-i com super

Volte ao problema anterior, do i

Descubra os cdigos para as teclas de seta esquerda, direita, cima e baixo.

Modifique o programa para movimentar a bola na direo desejada, enquanto a tecla
correspondente estiver pressionada.

Ao soltar a tecla, a bola para de se mover.

Dica: todo o controle passa pela varivel

32
i com controle
as envolvendo uma bola pulando (ou i-i...).
Modifique o programa para que a bola seja capturada/liberada quando for pressionada a tecla
i com super-controle
Volte ao problema anterior, do i-i com controle.
cdigos para as teclas de seta esquerda, direita, cima e baixo.
Modifique o programa para movimentar a bola na direo desejada, enquanto a tecla
correspondente estiver pressionada.
Ao soltar a tecla, a bola para de se mover.
sa pela varivel speed.
guia de estudos python
Andr Koscianski

liberada quando for pressionada a tecla

Modifique o programa para movimentar a bola na direo desejada, enquanto a tecla





30. Canho anti-areo

(1)
Desenhe um projtil no PaintBrush.

Escreva um programa que dispara projteis verticalmente, de baixo para cima,
pressiona a barra de espao.

Apenas um projtil deve aparecer na tela. Ele surge ao pressionar a tecla, sobe at o topo da tela e
desaparece.

A tecla <ESC> deve encerrar o programa.

(2)
Inclua no seu programa um objeto (um avio) que cruza a tela da esquerda para a direita. Ao
o lado direito, ele simplesmente reaparece do lado esquerdo.

(3)
Crie um teste de coliso. Se o projtil ficar muito prximo do avio, voc ganha um ponto.

Para isso, use esta frmula:



e este cdigo:
IF d < dmin:
pontos += 1

(4)
Crie um desenho de uma exploso e mostre

(5)
Altere o clculo de pontuao: quanto mais prximo o tiro passar do avio, mais pontos voc ganha.

(6)
Calibre suas coordenadas para

(7)
Coloque dois avies na tela, voando em direes (velocidades) opostas e altitudes diferentes.

(8)
Coloque vrios avies na tela. Use vetores contendo posio e velocidade dos avies.
Por exemplo, a velocidade e posio do
velocidadeX[2] velocidadeY[2] posX[2] posY[2]

33
areo
Desenhe um projtil no PaintBrush.
Escreva um programa que dispara projteis verticalmente, de baixo para cima,
Apenas um projtil deve aparecer na tela. Ele surge ao pressionar a tecla, sobe at o topo da tela e
A tecla <ESC> deve encerrar o programa.
Inclua no seu programa um objeto (um avio) que cruza a tela da esquerda para a direita. Ao
o lado direito, ele simplesmente reaparece do lado esquerdo.
Crie um teste de coliso. Se o projtil ficar muito prximo do avio, voc ganha um ponto.



pontos += 1
Crie um desenho de uma exploso e mostre-a quando o avio for acertado.
Altere o clculo de pontuao: quanto mais prximo o tiro passar do avio, mais pontos voc ganha.
Calibre suas coordenadas para atingir o centro do avio.
avies na tela, voando em direes (velocidades) opostas e altitudes diferentes.
na tela. Use vetores contendo posio e velocidade dos avies.
Por exemplo, a velocidade e posio do avio 2 estaro guardados em:
velocidadeX[2] velocidadeY[2] posX[2] posY[2]
guia de estudos python
Andr Koscianski
Escreva um programa que dispara projteis verticalmente, de baixo para cima, quando o jogador
Apenas um projtil deve aparecer na tela. Ele surge ao pressionar a tecla, sobe at o topo da tela e
Inclua no seu programa um objeto (um avio) que cruza a tela da esquerda para a direita. Ao vazar
Crie um teste de coliso. Se o projtil ficar muito prximo do avio, voc ganha um ponto.

Altere o clculo de pontuao: quanto mais prximo o tiro passar do avio, mais pontos voc ganha.
avies na tela, voando em direes (velocidades) opostas e altitudes diferentes.
na tela. Use vetores contendo posio e velocidade dos avies.




31. Escrevendo na tela grfica

Depois de implementar o ltimo programa, n

Agora falta mostrar um placar no vdeo.

O programa a seguir mostra como fazer isso.

teste.py
import pygame

pygame.init ()

screen = pygame.display.set_mode ((200,100))

#cor de fundo
screen.fill ((0, 0, 255))

#fontes funcionando?
if pygame.font:

#escolha fonte default
font= pygame.font.Font(None, 22)

#crie o texto
text=font.render("ola mundo!", 1, (255, 250, 0))

#obtenha o retangulo que contem o texto
textpos = text.get_rect()

#carimbe o texto na tela
screen.blit(text, (50,50))


pygame.display.flip()

#aguarde o usuario
x = raw_input()

Problema: a partir deste exemplo, crie um placar para seu jogo de canho anti

34
Escrevendo na tela grfica
Depois de implementar o ltimo programa, ns j temos um jogo completo!
Agora falta mostrar um placar no vdeo.
mostra como fazer isso.
import pygame
pygame.init ()
screen = pygame.display.set_mode ((200,100))
#cor de fundo
screen.fill ((0, 0, 255))
#fontes funcionando?
if pygame.font:
#escolha fonte default
font= pygame.font.Font(None, 22)
#crie o texto
text=font.render("ola mundo!", 1, (255, 250, 0))
#obtenha o retangulo que contem o texto
textpos = text.get_rect()
#carimbe o texto na tela
screen.blit(text, (50,50))
pygame.display.flip()
#aguarde o usuario digitar algo
x = raw_input()
: a partir deste exemplo, crie um placar para seu jogo de canho anti
guia de estudos python
Andr Koscianski

text=font.render("ola mundo!", 1, (255, 250, 0))
: a partir deste exemplo, crie um placar para seu jogo de canho anti-areo.








Parte trs: Orientao a Objetos


As partes um e dois deste guia apresentaram uma viso geral sobre Python e

Se voc resolveu todos os problemas propostos, j capaz de programar desde jogos simples, como
FORCA ou JOGO da VELHA, at alguns com figuras em movimento, como BREAKOUT ou ALIENS INVASION.

Vale um lembrete importante.

Este guia no tem o objetivo de ensinar todos os detalhes.

Excelente.


A prxima parte do guia descreve em linhas gerais o uso de Orientao a Objetos em Python. Voc
cetamente precisar conhecer esses recursos para poder avanar em

Programas grandes devem ser divididos em pedaos. Dividi
organiz-los. No caso de jogos, natural que cada personagem do jogo (avio, robo, tiro, bicho
programado dentro de um objeto.

35
o a Objetos bsica em Python
As partes um e dois deste guia apresentaram uma viso geral sobre Python e
Se voc resolveu todos os problemas propostos, j capaz de programar desde jogos simples, como
FORCA ou JOGO da VELHA, at alguns com figuras em movimento, como BREAKOUT ou ALIENS INVASION.
Vale um lembrete importante.
objetivo de ensinar todos os detalhes. O guia tem o objetivo de guiar
A prxima parte do guia descreve em linhas gerais o uso de Orientao a Objetos em Python. Voc
cetamente precisar conhecer esses recursos para poder avanar em direo a programas mais complexos.
Programas grandes devem ser divididos em pedaos. Dividi-los em objetos uma tima forma de
los. No caso de jogos, natural que cada personagem do jogo (avio, robo, tiro, bicho
guia de estudos python
Andr Koscianski
As partes um e dois deste guia apresentaram uma viso geral sobre Python e Pygame.
Se voc resolveu todos os problemas propostos, j capaz de programar desde jogos simples, como
FORCA ou JOGO da VELHA, at alguns com figuras em movimento, como BREAKOUT ou ALIENS INVASION.
O guia tem o objetivo de guiar. Entende?
A prxima parte do guia descreve em linhas gerais o uso de Orientao a Objetos em Python. Voc
direo a programas mais complexos.
los em objetos uma tima forma de
los. No caso de jogos, natural que cada personagem do jogo (avio, robo, tiro, bicho-papo) seja




32. Rudimentos de OO em Python

Vamos comear analisando este trecho de cdigo:

monstro1.py

class Monstro():

def diga_alo(self):
print "alo"

jorgival = Monstro()

jorgival.diga_alo()


Aqui criada uma classe de monstros, que sabem escrever alo no vdeo.

Em seguida criado um monstro chamado jorgival e, finalmente, jorgival diz alo.

Uma classe como uma forma de bolo: a partir dela voc pode
Uma classe contem funes.
Objetos fabricados com a classe podem usar (chamar) essas funes.

33. Rudimentos de OO em Python , parte II

Vamos ampliar um pouco o programa anterior.

monstro2.py
class Monstro():

peso = 100

def diga_alo(self):
print "alo"

def diga_peso(self):
print "Eu peso ", self.peso, " toneladas."


jorgival = Monstro()
anaiaia = Monstro()

jorgival.peso = 277

jorgival.diga_peso()
anaiaia .diga_peso()

Agora um objeto monstro contem duas rotinas e uma

Cada objeto possui suas prprias variveis
como mostra o cdigo, o peso de cada monstro pode ser diferente.

36
Rudimentos de OO em Python , parte I
analisando este trecho de cdigo:
onstro(): # de praxe letra maiuscula
def diga_alo(self):
print "alo"
onstro()
jorgival.diga_alo()
Aqui criada uma classe de monstros, que sabem escrever alo no vdeo.
m monstro chamado jorgival e, finalmente, jorgival diz alo.
Uma classe como uma forma de bolo: a partir dela voc pode fabricar objetos
contem funes.
Objetos fabricados com a classe podem usar (chamar) essas funes.
Rudimentos de OO em Python , parte II
Vamos ampliar um pouco o programa anterior.
onstro():
peso = 100
def diga_alo(self):
print "alo"
def diga_peso(self):
print "Eu peso ", self.peso, " toneladas."
onstro()
onstro()
jorgival.peso = 277
jorgival.diga_peso()
.diga_peso()
Agora um objeto monstro contem duas rotinas e uma varivel.
Cada objeto possui suas prprias variveis: neste exemplo, cada monstro tem seu prprio peso.
como mostra o cdigo, o peso de cada monstro pode ser diferente.
guia de estudos python
Andr Koscianski
# de praxe letra maiuscula
m monstro chamado jorgival e, finalmente, jorgival diz alo.
fabricar objetos.
print "Eu peso ", self.peso, " toneladas."
este exemplo, cada monstro tem seu prprio peso. E,




34. Objetos so variveis

Problema: escreva no programa uma rotina que recebe um

Essa rotina deve receber um parmetro que , logicamente, o monstro.

Exemplo de chamada:

monstro2.py

jorgival.diga_

engorde (jorgival)

jorgival.diga_

37
Objetos so variveis
: escreva no programa uma rotina que recebe um monstro e aumenta seu peso em 10%.
Essa rotina deve receber um parmetro que , logicamente, o monstro.
.diga_peso() #mostra 277 na tela
engorde (jorgival)
.diga_peso() #mostra 304.7 na tela
guia de estudos python
Andr Koscianski
monstro e aumenta seu peso em 10%.




35. A varivel self

As sub-rotinas de uma classe so conhecidas como
entre mtodos de uma classe e sub-rotinas comuns.

Quando invocamos um mtodo, ele deve agir em


jorgival.diga_

anaiaia .diga_


Ou seja: a mesma sub-rotina, mas trabalhando para um monstro diferente.

Pergunta: como o mtodo sabe qual o monstro que est sendo utilizado?
Resposta: usando o parmetro

Veja este exemplo:

monstro_self.py
class monstro

peso = 100

def diga_peso
print "Eu peso ", self.peso, " toneladas."

jorgival = Monstro
anaiaia = Monstro

jorgival.diga_peso
anaiaia .diga_peso ()

Monstro.diga_peso
Monstro.diga_peso (anaiaia)


Na seta vermelha (1) feita uma chamada comum, que voc j conhece

Na seta amarela (2) chamda
avisando funo que o monstro a ser us

Para a linguagem Python, as duas chamadas so iguais.

Ao ler o cdigo da seta vermelha, o compilador imediatamente identifica o parmetro self=jorgival.
Ao ler o cdigo da seta amarela, novamente self=jorgival.

So duas maneiras de escrever a mesma coisa.
comum. Ela corresponde ao que se faz em C++, Java, C# e outras linguagens com orientao a objetos.

1)
2)

38
de Python
rotinas de uma classe so conhecidas como mtodos. E existe uma diferena importante
rotinas comuns.
Quando invocamos um mtodo, ele deve agir em um determinado objeto:
.diga_peso()
.diga_peso()
rotina, mas trabalhando para um monstro diferente.
: como o mtodo sabe qual o monstro que est sendo utilizado?
: usando o parmetro self .

class monstro ():
peso = 100
def diga_peso (self):
print "Eu peso ", self.peso, " toneladas."
onstro ()
onstro ()
jorgival.diga_peso ()
anaiaia .diga_peso ()
onstro.diga_peso (jorgival)
onstro.diga_peso (anaiaia)
(1) feita uma chamada comum, que voc j conhece, ao monstro jorgival.
chamda a funo diga_peso da classe monstro. Nessa
avisando funo que o monstro a ser usado jorgival.
Para a linguagem Python, as duas chamadas so iguais.
Ao ler o cdigo da seta vermelha, o compilador imediatamente identifica o parmetro self=jorgival.
Ao ler o cdigo da seta amarela, novamente self=jorgival.
escrever a mesma coisa. A forma mostrada na seta vermelha a mais
. Ela corresponde ao que se faz em C++, Java, C# e outras linguagens com orientao a objetos.
guia de estudos python
Andr Koscianski
uma diferena importante
rotina, mas trabalhando para um monstro diferente.
: como o mtodo sabe qual o monstro que est sendo utilizado?
print "Eu peso ", self.peso, " toneladas."
, ao monstro jorgival.
. Nessa chamada estamos
Ao ler o cdigo da seta vermelha, o compilador imediatamente identifica o parmetro self=jorgival.
seta vermelha a mais
. Ela corresponde ao que se faz em C++, Java, C# e outras linguagens com orientao a objetos.




36. Atributos de objetos

Vamos aprender mais uma coisa sobre a varivel

Veja este cdigo:

atributos.py
class Monstro ():

peso = 100
nome = ""


def batizar
self.nome = string

def diga_peso (self):
peso = 123

print "Ola, sou o monstro ", self.nome

print "Variavel local vale ", peso

print "Eu tenho ", self.peso, " toneladas."


x = Monstro ()

x.batizar ("cleocivaldo")
x.diga_peso ()


Na seta vermelha (1) so criadas
peso
nome

Na setas amarelas (2) os atributos de um determinado monstro so usados. S possvel saber qual
o monstro, quando a rotina chamada (lembrou para que serve o parmetro
self.peso
self.nome

Na seta azuL (3), voc v uma varivel solta
self.peso e peso so diferentes.

E esta a sada do programa acima:


1)
3)
2)
2)

39
Atributos de objetos
coisa sobre a varivel self.
onstro ():
peso = 100
""
batizar (self, string):
self.nome = string
def diga_peso (self):
peso = 123
print "Ola, sou o monstro ", self.nome
print "Variavel local vale ", peso
print "Eu tenho ", self.peso, " toneladas."
onstro ()
x.batizar ("cleocivaldo")
x.diga_peso ()
Na seta vermelha (1) so criadas variveis que pertencem a um monstro (ou ATRIBUTOS)
Na setas amarelas (2) os atributos de um determinado monstro so usados. S possvel saber qual
o monstro, quando a rotina chamada (lembrou para que serve o parmetro self ?)
uma varivel solta. Ela pertence sub-rotina, no ao objeto

E esta a sada do programa acima:

guia de estudos python
Andr Koscianski
print "Eu tenho ", self.peso, " toneladas."
(ou ATRIBUTOS):
Na setas amarelas (2) os atributos de um determinado monstro so usados. S possvel saber qual
?):
no ao objeto. Note que



37. Avies objetos

Aperfeioamento de um programa

Crie uma classe avio que contem coordenadas x,y e velocidade vx,vy

avioes.py

N_AVIOES = 10

...

class Aviao():

rect_aviao=[]
vel_x = 0
vel_y = 0
pos_x = 0
pos_y = 0

...

aviao = []

for idx in xrange(
aviao[idx] = Aviao()

aviao[idx].v
aviao[idx].pos_x = random.random() * 10



Para movimentar os avies, use um lao assim:


for idx in xrange (
aviao[idx].


e crie um mtodo dentro da classe


class Aviao():

...

def mover(self):

aux = self.rect.move((self.vel_x, self.vel_y))

self.rect = aux




40
objetos
Aperfeioamento de um programa: volte ao jogo do canho anti-areo.
avio que contem coordenadas x,y e velocidade vx,vy e um conjunto de avies:
= 10
class Aviao():
rect_aviao=[]
vel_x = 0
vel_y = 0
pos_x = 0
pos_y = 0
for idx in xrange(N_AVIOES):
aviao[idx] = Aviao()
aviao[idx].vel_x = random.random() * 10
aviao[idx].pos_x = random.random() * 10
Para movimentar os avies, use um lao assim:
xrange (N_AVIOES):
aviao[idx].mover ()
e crie um mtodo dentro da classe Avio, assim:
class Aviao():
def mover(self):
aux = self.rect.move((self.vel_x, self.vel_y))
self.rect = aux
guia de estudos python
Andr Koscianski
conjunto de avies:
aux = self.rect.move((self.vel_x, self.vel_y))



38. Esqueleto de jogo: pouso lunar


Vamos exercitar um pouco mais n
conhecido. Comeamos por um dos programas de i
guia.

(1)
Primeiro, crie uma classe Nave().
classe deve poder se mover na tela.

Programe a rotina de movimento de forma que s
reaparecer no canto esquerdo e vice

(2)
Inclua na classe Nave() uma varivel de acelerao,
(self.acc), servir para calcular a velocidade usando esta frmula:


O valor constante 0.1 na frmula acima serve para representar um campo gravitacional que atrai a
nave para o cho. Voc dever calibrar

Inicialmente, faa aparecer a nave na tela, atribua o
deve obter uma nave que cai no cho,

(3)
Agora inclua no programa a capacidade de ler o
exemplo a barra de espao. Enquanto essa tecla estiver acionada, a varivel
O valor do incremento deve ser algo em torno de um dcimo da fora da gravidade.

Assim que o usurio solta essa tecla, imediatamente a varivel
resolver esse problema, observe com ateno o programa


(4)
Coloque um comando IF no cdigo, de forma que se a nave
muito elevada, ela explode.

(5)
Inclua um placar grfico na tela, que mostra a velocidade atual da nave.

41
Esqueleto de jogo: pouso lunar, parte I
Vamos exercitar um pouco mais nossos conhecimentos de Mecnica e criar um jogo bastante
um dos programas de i-i que voc fez, como o de MRUV da seo
Primeiro, crie uma classe Nave(). Assim como a bola (ou o avio), a imagem controlada por esta

Programe a rotina de movimento de forma que se a nave vazar o canto direito da tela, ela
e vice-versa.
Inclua na classe Nave() uma varivel de acelerao, acc. Essa varivel, que faz parte da Nave()
, servir para calcular a velocidade usando esta frmula:

0.1 .
O valor constante 0.1 na frmula acima serve para representar um campo gravitacional que atrai a
nave para o cho. Voc dever calibrar esse valor por tentativa e erro, assim como no programa do MRUV.
Inicialmente, faa aparecer a nave na tela, atribua o valor self.acc = 0 e simule movimento. Voc
deve obter uma nave que cai no cho, acelerando, exatamente como o programa da bola fazia.
a capacidade de ler o teclado. Voc precisa de
Enquanto essa tecla estiver acionada, a varivel self.acc
O valor do incremento deve ser algo em torno de um dcimo da fora da gravidade.
Assim que o usurio solta essa tecla, imediatamente a varivel self.acc deve receber ze
resolver esse problema, observe com ateno o programa-exemplo da seo 27 deste guia.
Coloque um comando IF no cdigo, de forma que se a nave colidir no cho com uma velocidade
Inclua um placar grfico na tela, que mostra a velocidade atual da nave.
guia de estudos python
Andr Koscianski
ossos conhecimentos de Mecnica e criar um jogo bastante
voc fez, como o de MRUV da seo 23 deste
a imagem controlada por esta
vazar o canto direito da tela, ela
. Essa varivel, que faz parte da Nave()
O valor constante 0.1 na frmula acima serve para representar um campo gravitacional que atrai a
esse valor por tentativa e erro, assim como no programa do MRUV.
= 0 e simule movimento. Voc
exatamente como o programa da bola fazia.
. Voc precisa de uma nica tecla por
self.acc deve ser incrementada.

deve receber zero. Para
deste guia.
colidir no cho com uma velocidade




39. Esqueleto de jogo: pouso lunar

Agora que a parte I do jogo est funcionando, vamos em frente.

(1)
Inclua mais uma varivel na Nave:

(2)
Agora programe as teclas de seta esquerda (K_LEFT) e seta direita (K_RIGHT) para modificar o
valor da varivel self.accX. Quando
incrementado, exatamente da mesma forma como voc fez com a varivel
Siga o mesmo raciocnio e programe a tecla K_LEFT para decrementar a varivel

(3)
Em seguida, inclua no cdigo esta frmula:


Ela muito parecida com a frmula (2) da seo
horizontal da nave. A multiplicao por
o usurio acelere a nave, pressionando as teclas de seta e mudando o valor de

A frmula deve ser calculada
para incluir a frmula dentro da classe Nave().

O lao principal do programa pode


while (True):

#leia teclado
# h = espaco apertado/nao

minhanave.controlar_aceleracao_Vertical (v)
minhanave.controlar_aceleracao_Horizontal (h)

minhanave.atualizar_velocidade_Vertical ()
minhanave.atualizar_velocidade_Horizontal ()

minhanave.mover ()
minhanave.testar_aterrisagem ()

pygame.time.delay (5)

(4)
ltimo passo: desenhe no PaintBrush
jogador deve conseguir pousar a nave exatamente sobre a plataforma, com uma velocidade verti
muito grande. Se a velocidade estiver muito alta, ou se o pouso for longe demais da plataforma, a nave
explode!

42
Esqueleto de jogo: pouso lunar, parte II
Agora que a parte I do jogo est funcionando, vamos em frente.
Inclua mais uma varivel na Nave: self.accX. Essa varivel contem a acelerao horizontal
Agora programe as teclas de seta esquerda (K_LEFT) e seta direita (K_RIGHT) para modificar o
Quando a tecla K_RIGHT estiver apertada, o valor de
da mesma forma como voc fez com a varivel self.acc e a tecla K_ESPACE.
programe a tecla K_LEFT para decrementar a varivel
inclua no cdigo esta frmula:

0.9

.
Ela muito parecida com a frmula (2) da seo 23. Aqui, a varivel V
A multiplicao por 0.9 faz que a nova velocidade seja menor que a antiga
o usurio acelere a nave, pressionando as teclas de seta e mudando o valor de self.acc
calculada cada iterao do lao principal do programa. Um local
para incluir a frmula dentro da classe Nave(). Entende o motivo?
O lao principal do programa poder ficar mais ou menos assim:
while (True):
leia teclado; v = seta esquerda/direita,
# h = espaco apertado/nao
nhanave.controlar_aceleracao_Vertical (v)
nhanave.controlar_aceleracao_Horizontal (h)
minhanave.atualizar_velocidade_Vertical ()
minhanave.atualizar_velocidade_Horizontal ()
minhanave.mover ()
minhanave.testar_aterrisagem ()
pygame.time.delay (5)
e no PaintBrush uma plataforma de pouso no paint-brush e mostre
jogador deve conseguir pousar a nave exatamente sobre a plataforma, com uma velocidade verti
muito grande. Se a velocidade estiver muito alta, ou se o pouso for longe demais da plataforma, a nave
guia de estudos python
Andr Koscianski
acelerao horizontal da Nave.
Agora programe as teclas de seta esquerda (K_LEFT) e seta direita (K_RIGHT) para modificar o
tiver apertada, o valor de self.accX deve ser
e a tecla K_ESPACE.
programe a tecla K_LEFT para decrementar a varivel self.hacc.
varivel VX contem a velocidade
faz que a nova velocidade seja menor que a antiga a menos que
self.accX.
o lao principal do programa. Um local mais lgico


brush e mostre-a na tela. O
jogador deve conseguir pousar a nave exatamente sobre a plataforma, com uma velocidade vertical no
muito grande. Se a velocidade estiver muito alta, ou se o pouso for longe demais da plataforma, a nave

S-ar putea să vă placă și