Olá, Guilherme,
> Alguem já fez aquele joguinho de celular Snake no pygame?
> Eu to querendo fazer um, mas como sou meio iniciante ta meio
> complicado.
Olha, eu nunca cheguei a fazer um desses, mas acho que não deve ser
muito complicado. O quão iniciante tu é? Sabendo mais ou menos qual a
tua experiência, tanto com programação em geral quanto de jogos, fica
mais fácil saber que tipo de material poderíamos indicar.
> eu andei olhando os codigos dos jogos snake que tem no pygame.org
> mas ta complicado de enteder
Bom, eu não te culpo por não entender :)
Acabei de dar uma olhada e procurei por "snake" no site da pygame[1] e
me parece que há uma competição interna pra fazer o menor código
possível XD
Esse tipo de código não costuma ser muito amigável não...
(Bom, o meu gmail acabou de avisar que veio uma resposta e parece que
o Roberto Fagá te mandou umas idéias de como implementar. Dê uma
olhada nas dicas dele e entre em contato em caso de dificuldades)
[]'s
[1] http://www.pygame.org/tags/snake
--
Kao Cardoso Félix
Página pessoal: http://www.inf.ufrgs.br/~kcfelix
Blog: http://kaofelix.blogspot.com
È ..o Snake tem a seguinte característica:
é um tipo de jogo que __era__ fácil programar, em comparação com
outros conceitos de jogos, justamente por que o jeito de armazenar
as coordenadas de cada parte do corpo da cobra, podia ser otimizado
em função de como o computador organiza os dados na memória quando se
programa em nível amis baixo.
Ai, o jogo aproveitava inclusive recursos de hardware (em
implementações bem anteriores até à clássica versão em QBasic que
acompanhava as ultimas versões do DOS e o Windows 3.1, em 1990!! )
Por exemplo: como o Roberto Fagá explicou, as coordenadas da cobra
ficavam num vetor mapeado direto na memoria - e você tinha um
ponteiro para um endereço desse vetor onde escrevia as coordenadas da
cabeça da cobra, e ao fazer isso:
- colocava um espaço (isso mesmo, um espaço em branco - essas
implementações eram em modo texto), na coordenada que estava no lugar
da cabeça anteriormente - que passa a ser o ponto imediatamente
depois da cauda
- colocava um asterisco nas coordenadas da nova cabeça. esse
asterisco ficava na tela e só era substituido por um espaço em branco
quando a cauda o alcançava.
(no conjunto ASCII, asterisco ("*") é caracter que cobre a maior
área visivel, sendo o "ideal" para representar elementos de jogo em
modo texto nessa epoca)
E em geral, em vez da "matriz Grande" que o Roberto coloca, a própria
memória de video texto servia como "mapa" - ou seja, o byte que era
testado para saber se havia ocorrido uma colisão era um byte
armazenado direto na memoria de vídeo. (isso é bem mais simples do
que pode parecer, pra turma da geração pós modo-gráfico, em que o
vídeo sempre fica bastante abstraido)
Para fazer o jogo em python, hoje, o jeito mais limpo seria esquecer
tudo isso - ter uma cobra que seja um objeto sequência, em que o
iotem[0] seja sempre a coodenada da cabeça - e cada frame, toda a
cobra é desenhada numa pintura vazia do mapa.
Mesmo ao emular o comportamento da cobra " de baixo nível", o ideal,
claro, 'eimplementar tanto mapa quanto cobra como objetos - que
tenham métodos para se mover, se desenhar na tela física (o mapa
matriz de hoje é necessariamente uma abstração que será consultada
para saber quais objetos de imagem serão copiados nas regiões
correspondentes da janela do objeto que representa a imagem
rasterizada - isso é, em pixels. (Em pygame, um objeto Surface))
Alias, eu recomendaria mesmo a criação de niveis de classes
diferentes:
um nível lógico, onde você emula as informaçoes do mapa e da cobra
como era feito antigamente - isso é como o Roberto explicou - e cira
uma sub-classe das mesmas que se tornam "a par" das
representaçóes "fisicas" necessárias - isso é , implementam métodos
para se desenhar na tela usando um framework de jogos, tocar som,
etc...)
Em suma: fazer o jogo da cobrinha hoje é mais difícil do que na decada
de 80. Mesmo quando estamos com python com vários framework
pythonicos multimidia a disposicao, e competindo com C ou Basic lá
atrás - isso por conta da complexidade e camadas de abstração que
estão presentes nos sistemas operacionais - incluindo a interface -
hoje.
js
-><-
>
> []'s
>
> [1] http://www.pygame.org/tags/snake
Olha só - fiz uma implementação que vou usar amanhã na palestra em SP.
acabei de colocar no repositório da lista.
Se alguém for fazer alterações, peço para registrar no arquivo
ChangeLog.
http://python-gamedev-brasil.googlecode.com/svn/trunk/snakes/
>
> Eu to querendo fazer um, mas como sou meio iniciante ta meio
> complicado.
>
> eu andei olhando os codigos dos jogos snake que tem no pygame.org
> mas ta complicado de enteder
>
> alguem teria um código ou um jogo que fez, que seja de facil
> compreensão
>
>
> desde já agradeço, abs.
>
js
-><-
João, acabei de baixar e dar uma olhada no teu código. Parabéns, está
muito legal! Gostei como as coisas estão claras e a representação dos
conceitos é bem direta (bem diferente daqueles códigos de 12 linhas do
site da pygame, hehehehe).