Vous êtes sur la page 1sur 6

20/09/12

Tutoriais PyGame - Linha a Linha Exemplo Chimp


Pygame Tutoriais

linha por linha Chimp


por Pete Shinners pete@shinners.org
Reviso 2.2, 17 jun 2004

Introduo
Nos pygame exemplos h um exemplo simples chamado, "chimpanz". Este exemplo simula um macaco punchable movendo uma pequena tela com promessas de riqueza e de recompensa. O exemplo de si muito simples, e um pouco mais fino em errorchecking cdigo. Este programa de exemplo demonstra muitas das habilidades do pygame, como a criao de uma janela de grficos, carregamento de imagens e arquivos de som, processamento de texto, SF, e evento bsico e manuseio do mouse. O programa e as imagens podem ser encontradas no interior da distribuio fonte padro de pygame. Para a verso 1.3 do pygame, este exemplo foi totalmente reescrito para adicionar recursos mais um par e verificao de erros correta. Este sobre dobrou o tamanho do exemplo original, mas agora nos d muito mais para olhar, assim como o cdigo que eu posso recomendar a reutilizao de seus prprios projetos. Este tutorial ir percorrer o bloco de cdigo por bloco. Explicando como funciona o cdigo. Tambm haver meno de como o cdigo pode ser melhorado eo que errorchecking poderia ajudar. Este um tutorial exellent para as pessoas que esto fazendo a primeira olhada no pygame cdigo. Uma vez pygame est totalmente instalado, voc pode encontrar e executar o demo do chimpanz para si mesmo no diretrio de exemplos.

(No, este no um anncio de banner, a sua imagem de tela a)

fonte completo

Mdulos de importao
Este o cdigo que importa todos os mdulos necessrios para o seu programa. Ele tambm verifica a disponibilidade de alguns dos mdulos opcionais pygame.
ipr o,ss mot s y ipra pgm moto yae *pgm.oasd ipra yaelcl e moto s nopgm.ot pit'tn,fne dfcet " e yaefn: rn Aeo ots eiine s nopgm.ie:pit'vs d sm dfcet " e yaemxr rn Aio e o, eiine

Primeiro, ns importamos o padro "os" e "sistemas" mdulos python. Elas nos permitem fazer coisas como criar caminhos independentes de plataforma de arquivo. Na prxima linha, ns importamos o pacote pygame. Quando pygame importado ele importa todos os mdulos pertencentes a pygame. Alguns mdulos pygame so opcionais, e se eles no forem encontrados, o seu valor definido como "None". H um especial pygame mdulo chamado "moradores". Este mdulo contm um subconjunto de pygame . Os membros deste mdulo so comumente usados constantes e funes que se mostraram teis para colocar dentro no espao global do seu programa. Este mdulo locais inclui funes como "Rect" para criar um objeto retangular e constantes muitos como "QUIT, HWSURFACE" que so usados interagir com o resto do pygame . para Importando o mdulo locais no espao global como este totalmente opcional. Se voc optar por no import-lo, todos os membros de moradores esto sempre disponveis no pygame mdulo. Finalmente, decidimos imprimir uma mensagem de aviso legal se os mdulos de fonte ou de som em pygame no esto disponveis.

Recursos de carga
Aqui temos duas funes que podem ser usados carregar imagens e sons. Vamos olhar para cada funo individualmente nesta seo. para
dfla_mg (oe clre =Nn) e odiae nm, ooky oe: flnm =o.ahji (dds,nm) ulae spt.on 'ao' oe tne et: iae =pgm.mg.od(oecmlt) mgm yaeiaela nm opeo ect pgm.ro,mnae: xeo yaeerr esgm ipii ' pse crea aiae:"oe mrmr No osvl argr mgm nm, lvna mnae SseEi, eatr esgm ytmxt iaecnetiae =( mg.ovr mgm ) s clre noNn: e ooky oe s clre -: e ooky 1 clre =iaegta (00) ooky mg.e_t (,) iaestclre (ooky RECE) mg.e_ooky clre, LACL rtra aiae,iaegtrc ( eonr mgm mg.e_et )

www.pygame.org/docs/tut/chimp/ChimpLineByLine.html

1/6

20/09/12

Tutoriais PyGame - Linha a Linha Exemplo Chimp

Esta funo recebe o nome de uma imagem para carregar. Tambm opcionalmente recebe um argumento que pode usar para definir um colorkey para a imagem. A colorkey usado em grficos para representar uma cor da imagem, que transparente. A primeira coisa que essa funo faz criar um caminho completo para o arquivo. Neste exemplo, todos os recursos esto em um "dados" subdiretrio. Ao utilizar a funo os.path.join, um caminho que ser criado obras para qualquer plataforma do jogo est sendo executado. seguida, carregar a imagem usando a funo pygame.image.load. Ns envolvemos esta funo em um try / exceto bloco, por isso, se h um problema de carregar a imagem, podemos sair normalmente. Depois que a imagem carregada, fazemos uma chamada importante para a funo CONVERT (). Isso faz com que uma nova cpia de uma superfcie e converte seu formato, cor e profundidade para coincidir com a exibio. Isto significa blitting a imagem para a tela vai acontecer to rapidamente quanto possvel. ltima, definimos o colorkey para a imagem. Se o usurio forneceu um argumento para o argumento colorkey usamos esse valor como o colorkey para a imagem. Isso geralmente apenas ser uma cor valor RGB, como (255, 255, 255) para o branco. Voc tambm pode passar um valor de -1 como o colorkey. Neste caso, a funo de pesquisa da cor no pixel topleft da imagem, e utilizar essa cor para o colorkey.

dfla_on (oe: e odsud nm) cas NnSud lse oeon: dfjg (ef:ps e oo sl) as s nopgm.ie: e yaemxr vla NnSud( otr oeon ) flnm =o.ahji (dds,nm) ulae spt.on 'ao' oe tne et: =smpgm.ie.on (oecmlt) o yaemxrSud nm opeo ect pgm.ro,mnae: xeo yaeerr esgm ipii ' pse crea sm' wv mrmr No osvl argr o:, a lvna mnae SseEi, eatr esgm ytmxt rtra sm eonr o

Em seguida a funo de carregar um arquivo de som. A primeira coisa que esta funo faz verificar se o mdulo pygame.mixer foi importado corretamente. Se no, ele retorna uma instncia pequena classe que tem um mtodo de reproduo manequim. Isto ir agir o suficiente como um objeto de som normal para este jogo a correr sem qualquer verificao de erro extra. Esta funo similar a funo de carregamento de imagem, mas lida com alguns problemas diferentes. Primeiro vamos criar um caminho completo para a imagem, som e carregar o arquivo de som dentro de um try / exceto bloco. Ento, ns simplesmente devolver o objeto de som carregado.

Objeto Classes jogo


Aqui iremos criar duas classes para representar os objetos em nosso jogo. Quase toda a lgica para o jogo vai para essas duas classes. Vamos olhar sobre eles um de cada vez aqui.
Pnod cas (yaesrt.pie: uh e lse pgm.pieSrt) " "oeu pnocraon tl,sgid omue " " Mv m uh erd a ea euno os" " df_ ii_ (ef: e _ nt_ sl) pgm.pieSrt._nt_(ef #caa iiilzdrSrt yaesrt.pie_ii_ sl) hmr ncaiao pie sl.mg,sl.etla_mg =(fs.m' -) efiae efrc odiae 'itbp, 1 sl.ucig=0 efpnhn dfudt (ef: e pae sl) "oe opnocmbs n psod mue Mvr uh o ae a oi o os" ps=pgm.os.e_o ( o yaemuegtps ) sl.etmdo =ps efrc.itp o s sl.ucig e efpnhn: sl.etmv_p(,1) efrc.oei 5 0 dfsc (lo sl) e oo av, ef: "eon vraer s opnocld cmoav" Rtra eddio e uh oie o lo s nosl.ucig e efpnhn: sl.ucig=1 efpnhn hto =sl.etifae(5 -) ibx efrc.nlt -, 5 vla hto.oldrc (agtrc) otr ibxclieet tre.et dfupnh(ef: e nuc sl) "hmd pr pxropnopr t" Caao aa ua uh aa rs sl.ucig=0 efpnhn

Aqui criamos uma classe para representar o punho jogadores. Ela derivada a partir da classe Sprite includas no mdulo pygame.sprite. A funo __ init__ chamado quando novas instncias desta classe so criados. A primeira coisa que fazemos ter a certeza de chamar a funo __ init__ para a nossa classe base. Isso permite que a funo da Sprite __ init__ para preparar nosso objeto para uso como um sprite. Este jogo utiliza uma das classes do Grupo sprites de desenho. Essas classes podem desenhar sprites que tm uma "imagem" e "rect" atributo. Simplesmente mudando esses dois atributos, o processador ir desenhar a imagem atual na posio atual. Todos os sprites tem um mtodo update (). Esta funo geralmente chamado uma vez por quadro. onde voc deve colocar o cdigo que se move e atualiza as variveis o sprite. O mtodo update () para para o punho move o punho para a localizao do ponteiro do mouse. Ele tambm compensa a posio punho ligeiramente se o punho est na "perfurao". Estado as duas funes seguintes perfurador () e unpunch () alterar o estado de perfurao para o punho. O mtodo soco () tambm retorna um valor verdadeiro se o punho est colidindo com o sprite determinado objectivo.

cas Cip(yaesrt.pie: lse hm pgm.pieSrt) " "oeu bcomcc n tl.Pd grra " Mv m ih aao a ea oe ia mcc qad pruao " " aao uno efrd. "

www.pygame.org/docs/tut/chimp/ChimpLineByLine.html

2/6

20/09/12

Tutoriais PyGame - Linha a Linha Exemplo Chimp


df_ ii_ (ef: e _ nt_ sl) pgm.pieSrt._nt_(ef #caa itaie Srt yaesrt.pie_ii_ sl) hmr nilzr pie sl.mg,sl.etla_mg =(cipbp,-) efiae efrc odiae 'hm.m' 1 tl =pgm.ipa.e_ufc ( ea yaedslygtsrae ) sl.rasre.e_et=( efae cengtrc ) sl.ettpet=1,1 efrc.olf 0 0 sl.oe=9 efmv sl.iz =0 efdzy dfudt (ef: e pae sl) "na o grr dpned d etd d mccs Adr u ia, eedno o sao e aao" s sl.iz: e efdzy sl.si ( ef_pn ) mi: as sl.wl ( ef_ak ) df_ak(ef: e wl sl) "oe omcc e td atl,etasomrnseteiae" Mvr aao m oa ea rnfra a xrmdds Nwo sl.etmv =(sl.oe 0) ePs efrc.oe (efmv, ) s nosl.racnan (ePs: e efae.otis Nwo) s sl.etlf <efae.eto \ e efrc.et sl.ralf u sl.etrgt sl.rargt efrc.ih> efae.ih: sl.oe=sl.oe efmv -efmv Nwo sl.etmv =(sl.oe 0) ePs efrc.oe (efmv, ) sl.mg =pgm.rnfr.lp(efiae 1 0 efiae yaetasomfi sl.mg, , ) sl.et=Nwo efrc ePs df_pn(ef: e si sl) "ia aiae d mcc" Grr mgm o aao cnr =sl.etcne eto efrc.etr sl.iz +=1 efdzy 2 s sl.iz>=30 e efdzy 6: sl.iz =0 efdzy sl.mg =sl.rgnl efiae efoiia mi: as gr =pgm.rnfr.oae ie yaetasomrtt sl.mg =rto(efoiia,sl.iz) efiae oa sl.rgnl efdzy sl.et=sl.mg.e_et(eto=cnr) efrc efiaegtrc cnr eto dfpruao(ef: e efrd sl) "sofr cmqeomcc pr cmragrr Is a o u aao aa oea ia" s nosl.iz: e efdzy sl.iz =1 efdzy sl.rgnl=sl.mg efoiia efiae

A classe chimpanz est fazendo um pouco mais de trabalho do que o punho, mas nada mais complexo. Esta classe ir mover o chimpanz frente e para trs em toda a tela. Quando o macaco perfurado, ele vai girar em torno de efeito excitante. Esta categoria tambm derivada da classe Sprite base, e inicializado o mesmo que o punho. Durante a inicializao, a classe tambm define o atributo "rea" para ser o tamanho da tela de exibio. A funo de atualizao para o chimpanz simplesmente olha para o actual estado de "tonto", o que verdade quando o macaco est girando de um soco. Ele chama um _spin ou o mtodo _walk. Estas funes so prefixados com um sublinhado. Este apenas um idioma padro do Python, que sugere que estes mtodos s deve ser usado pela classe chimpanz. Ns poderamos ir to longe a ponto de darlhes um duplo sublinhado, o que diria a python para realmente tentar faz-los mtodos privados, mas ns no precisamos de tal proteo. :) O mtodo de caminhada cria uma nova posio para o macaco movendo o rect atual por um deslocamento dado. Se esta nova posio atravessa fora da rea de exibio da tela, ele inverte o movimento de deslocamento. Ela tambm espelha a imagem usando a funo pygame.transform.flip. Este um efeito bruto que faz com que o macaco parece que ele est girando a direo que ele est se movendo. rotao O mtodo chamado quando o macaco atualmente "tonto". O atributo tonto usado para armazenar o valor actual de rotao. Quando o macaco girou a toda a volta (360 graus) que redefine a imagem de macaco de volta para a verso original no rotacionada. Antes de chamar a funo transform.rotate, voc vai ver o cdigo faz uma referncia local para a funo simplesmente chamado de "girar". No h necessidade de fazer isso, para este exemplo, apenas feito aqui para manter o comprimento da linha seguinte, um pouco mais curto. Note-se que ao chamar a funo de rotao, estamos sempre girando a partir da imagem de macaco original. Quando em rotao, existe uma pequena perda de qualidade. Repetidamente girando a mesma imagem ea qualidade seria ainda pior a cada vez. Alm disso, durante a rotao de uma imagem, o tamanho da imagem ir realmente mudar. Isto porque os cantos da imagem ser girada para fora, fazendo com que a imagem maior. Temos certeza de que o centro da nova imagem corresponde ao centro da imagem antiga, ento ele gira sem se mover. ltimo mtodo perfurado () que conta a sprite para entrar no seu estado tonto. Isso far com que a imagem para comear a girar. Ele tambm faz uma cpia da imagem atual com o nome "original".

Tudo inicializar
Antes de ns pode fazer muito com pygame, precisamos ter certeza de seus mdulos so inicializados. Neste caso, tambm ir abrir uma janela de grficos simples. Agora estamos na funo main () do programa, que executado tudo.
pgm.nt( yaeii ) tl =pgm.ipa.e_oe(48 6) ea yaedslystmd (6, 0) pgm.ipa.e_ato (Fbed mcc ' yaedslystcpin "er o aao ) pgm.os.e_iil () yaemuestvsbe 0

A primeira linha para inicializar pygame cuida de um pouco de trabalho para ns. Ele verifica atravs dos importados pygame mdulos e tenta inicializar cada um deles. possvel voltar e verificar se os mdulos falhou ao inicializar, mas no vai incomodar aqui. Tambm possvel tomar o controlo muito mais e inicializar cada mdulo especfico mo. Esse tipo de controle, geralmente no necessria, mas est disponvel se voc desejar. seguida, configurar a exibio modo grfico. Note-se que o mdulo de pygame.display usado para controlar todas as configuraes de exibio. Neste caso estamos pedindo uma simples janela magro. Existe um tutorial inteiro separado sobre como configurar o modo grfico, mas se realmente no me importo, pygame vai fazer um bom trabalho de conseguir alguma coisa que funciona. Pygame vai escolher a melhor profundidade de cor, desde que no tenham apresentado um. ltima vamos definir o ttulo da janela e desligar o cursor do mouse para a janela. Muito bsico de fazer, e agora temos uma pequena janela preta pronto para fazer o que pedimos. Normalmente, os padres de cursor para visvel, de modo que no h necessidade de realmente definir o
www.pygame.org/docs/tut/chimp/ChimpLineByLine.html 3/6

20/09/12

Tutoriais PyGame - Linha a Linha Exemplo Chimp

estado, a menos que queremos esconder.

Criar o fundo
Nosso programa vai ter mensagem de texto no fundo. Seria bom para ns para criar uma nica superfcie para representar o fundo e usar repetidamente isso. O primeiro passo consiste em criar superfcie.
bcgon =pgm.ufc (cengtsz () akrud yaeSrae sre.e_ie ) fnobcgon.ovr =( ud akrudcnet ) bcgon.il(20 20 20) akrudfl (5, 5, 5)

Isto cria uma superfcie nova para ns que do mesmo tamanho que a janela do mostrador. Observe a chamada extra para converter () depois de criar o Surface. O convertido sem argumentos far com que nossa fundo o mesmo formato que a janela de exibio, que vai nos dar os resultados mais rpidos. Ns tambm preencher todo o fundo com uma cor branco-ish slido. Preenchimento leva uma tripla RGB como o argumento de cor.

Coloque texto no fundo, centrado


Agora que temos uma superfcie de fundo, vamos comear o texto apresentado a ele. Ns s fazer isso se vemos o mdulo pygame.font importou corretamente. Se no, ns simplesmente pular esta seo.
s pgm.ot e yaefn: fn =pgm.otFn (oe 3) ot yaefn.ot Nn, 6 tx =fn.edr(Pme Ocipn egna $$$,1 (0 1,1) et otrne "uml hmaz, ahr " , 1, 0 0) txps=tx.e_et(etr bcgon.e_it =( /2 eto etgtrc cnex akrudgtwdh ) ) bcgon.lt(et,txps akrudbi txo eto)

Como voc pode ver, existem alguns passos para obter este feito. Primeiro temos que criar o objeto de fonte e torn-lo em uma nova superfcie. Em seguida, encontrar o centro do que a superfcie de novo e blit (colar)-o para o fundo. A fonte criado com o mdulo de fonte de fonte () do construtor. Normalmente voc ir passar o nome de um arquivo de fonte TrueType para esta funo, mas tambm podemos passar Nenhum, que vai usar uma fonte padro. O construtor Font tambm precisa saber o tamanho da fonte que deseja criar. Ns ento tornar essa fonte em uma nova superfcie. A funo de renderizao cria uma nova superfcie que o tamanho apropriado para o nosso texto. Neste caso, dizemos render para criar texto antialiased (para uma boa aparncia lisa) e usar uma cor cinza escuro. seguida, precisamos encontrar a posio central do texto na nossa tela. Criamos um "Rect" objeto a partir das dimenses de texto, o que nos permite facilmente atribu-lo ao centro da tela. Finalmente blit (blit como um copiar ou colar) o texto na imagem de fundo.

O fundo enquanto a Instalao Acabamentos


Ns ainda temos uma janela preta na tela. Permite mostrar o nosso plano, enquanto aguardamos os outros recursos para carregar.
sre.lt(ud,(,0) cenbi fno 0 ) pgm.ipa.lp( yaedslyfi )

Este ser o nosso blit fundo inteiro para a janela de exibio. O blit auto-explicativo, mas que sobre esta rotina flip? Em pygame, alteraes na superfcie da tela no so imediatamente visveis. Normalmente, uma exposio deve ser atualizado em reas que foram alteradas para que sejam visveis para o usurio. Com dupla exibe buffer, o indicador deve ser trocado (ou virou) para que as mudanas se tornam visveis. Neste caso, a tampa () funciona bem, porque simplesmente manipula a rea de janela inteira e trata ambas as superfcies e singlebuffered doublebufferes.

Prepare objeto de jogo


Aqui ns criamos todos os objetos que o jogo vai precisar.
wifsudla_on =(wifwv) hf_on odsud 'hf.a' pnhsudla_on =(pnhwv) uc_on odsud 'uc.a' cipn=Cipn( hmaz hmaz ) pnoPno=( uh uh )

www.pygame.org/docs/tut/chimp/ChimpLineByLine.html

4/6

20/09/12

Tutoriais PyGame - Linha a Linha Exemplo Chimp

alpie =pgm.pieRnePan(pno cipn) lsrts yaesrt.edrli (uh, hmaz) rlgo=pgm.ieCok( ei yaetm.lc )

Primeiro temos de carregar dois efeitos de som usando a funo load_sound ns definido acima. Ento vamos criar uma instncia de cada uma de nossas aulas de sprite. E, por ltimo, criamos um grupo de Sprite, que conter todos os nossos sprites. Ns realmente usar um grupo especial chamado de sprite RenderPlain. Este grupo sprite pode tirar todas as sprites que ela contm para a tela. Ele chamado RenderPlain porque existem grupos rende realmente mais avanados. Mas para o nosso jogo, s precisamos de desenho simples. Criamos o grupo chamado "allsprites" passando uma lista com todos os sprites que deve pertencer ao grupo. Poderamos, mais tarde, adicionar ou remover sprites deste grupo, mas neste jogo no vai precisar. objeto O relgio criamos ser usado para ajudar a controlar framerate nosso jogo. vamos us-lo no circuito principal do nosso jogo para ter certeza de no correr muito rpido.

Loop principal
Nada muito aqui, apenas um lao infinito.
eqat 1 nuno : coktc (0 lc.ik 6)

Todos os jogos rodam em uma espcie de loop. A ordem normal das coisas verificar o estado da entrada do computador e usurio, mover e atualizar o estado de todos os objetos, e depois lev-los para a tela. Voc vai ver que este exemplo no diferente. Ns tambm fazer uma chamada para o nosso objeto de relgio, o que far com que nosso jogo no correr mais rpido do que 60 quadros por segundo.

Lidar com todos os eventos de entrada


Este um caso extremamente simples de trabalhar a fila de eventos.
pr oeet e pgm.vn.e (: aa vno m yaeeetgt ) s eettp = QI: e vn.ye = UT vla otr ei eettp = Kyoneeetky= KECP: lf vn.ye = eDw vn.e = _SAE vla otr ei eettp = MUEUTNON lf vn.ye = OSBTODW: s fs.uc (hmaz) e itpnh cipn: pnhsudpa ( #sc uc_on.ly ) oo cippnhd( hm.uce ) mi: as wifsudpa ( #suae hf_on.ly ) adds ei eettp = MUEUTNP lf vn.ye = OSBTOU: fs.nuc ( itupnh )

Primeiro temos todos os eventos disponveis pygame e passar atravs de cada um deles. Os dois primeiros testes ver se o usurio parar o nosso jogo, ou pressionada a tecla de escape. Nestes casos, basta retornar a partir da funo main () eo programa termina de forma limpa. seguida, basta verificar para ver se o boto do mouse foi pressionado ou liberado. Se o boto foi pressionado, pedimos que o objeto punho se colidiu com o chimpanz. Ns jogamos o efeito de som adequado, e se o macaco foi atingido, dizemoslhe para comear a girar (chamando sua socou () mtodo).

Atualizar os Sprites
alpie.pae( lsrtsudt )

Grupos Sprite tem um mtodo de atualizao (), que simplesmente chama o mtodo de atualizao para todos os sprites que ele contm. Cada um dos objetos vo se mover, dependendo do estado que esto dentro Este o lugar onde o chimpanz vai passar de um lado para o outro passo, ou girar um pouco mais, se ele foi recentemente perfurado.

Desenhe toda a cena


Agora que todos os objetos esto no lugar certo, o tempo para desenh-los.
sre.lt(ud,(,0) cenbi fno 0 ) alpie.rw(ea lsrtsda tl) pgm.ipa.lp( yaedslyfi )

A chamada blit primeiro vai desenhar o fundo para a tela inteira. Isso apaga tudo o que vimos a partir do quadro anterior (ligeiramente ineficiente, mas bom o suficiente para este jogo). Em seguida, chamar o mtodo draw () do recipiente sprite. Uma vez que este recipiente sprite realmente uma instncia do grupo sprite "DrawPlain", ele sabe como desenhar nossos sprites. Por fim, virar () o contedo do buffer de pygame de software da dupla para a tela. Isso faz com que tudo o que temos desenhado visvel de uma vez.
www.pygame.org/docs/tut/chimp/ChimpLineByLine.html 5/6

20/09/12

Tutoriais PyGame - Linha a Linha Exemplo Chimp

Game Over
O usurio sair, hora de limpar Limpando o jogo a correr em pygame extremamente simples. Na verdade, desde todas as variveis automaticamente destrudos, ns so realmente no tem que fazer nada.

www.pygame.org/docs/tut/chimp/ChimpLineByLine.html

6/6

Vous aimerez peut-être aussi