Capa
Seções
NOTÍCIAS

DOWNLOAD

ANÁLISES

COMPRAS

BOLETIM

WIRED NEWS

IDG NOW!

PC WORLD

AJUDA

COLUNISTAS


 digite + enter


NOSSA PRIMEIRA SIMULAÇÃO
Luciano Ramalho MAGNET

Agora já sabemos tudo o que precisávamos para implementar um jogo simples, como havíamos prometido no capítulo anterior. Trata-se de uma simulação de pouso lunar, em modo texto. Esse programinha é baseado em um jogo clássico escrito para calculadoras HP-25. Nossa versão é bem mais fácil de entender que o original para calculadora (cuja listagem apareceu na seção A Web como Ela É da Magnet número 3). Em vez de explicar linha por linha o funcionamento do programa, colocamos comentários abundantes na própria listagem, delimitados pelo sinal #. Lembre-se de que não é preciso digitar os comentários (e o programa inteiro pode ser simplesmente copiado do site da Magnet). Esse simulador de alunissagem é um game de recursos mínimos, mas ainda assim deve valer alguns minutos de diversão, especialmente se você curte a física newtoniana ensinada no colegial.

O jogo da alunissagem

 O jogo da alunissagem
 # lunar.py
 # importar funcao sqrt do modulo math
 from math import sqrt

 x = 500.    # altitude em pes
 v = -50.    # velocidade em pes/s
 g = -5. # aceleracao gravitacional lunar em pes/s/s
 t = 1.  # tempo entre jogadas em segundos
 comb = 120. # quantidade de combustível

 print 'Simulacao de alunissagem'
 print
 print '(digite a quantidade de combustivel a queimar)'


 fmt = 'Alt: %6.2f  Vel: %6.2f  Comb: %3d'
 while x > 0:	# enquanto nao tocamos o solo
     msg = fmt % (x, v, comb) # montar mensagem
     if comb > 0:	# ainda temos combustivel?
         # obter quantidade de combustivel a queimar
         resp = raw_input(msg + ' Queima = ')
         try:    # converter resposta em numero
             queima = float(resp)
         except: # a resposta nao era um numero
             queima = 0
         if queima > comb: # queimou mais do que tinha?
             queima = comb # entao queima o que tem
         comb = comb - queima    # subtrai queimado
         a = g + queima    # acel = grav + queima
     else:    # sem combustivel
         print msg   # mensagem sem perguntar
         a = g   # aceleracao = gravidade
     x0 = x	# armazenar posicao inicial
     v0 = v	# armazenar velocidade inicial
     x = x0 + v0*t + a*t*t/2     # calc. nova posicao
     v = v0 + a*t                # calc. nova vel.
 # se o loop acabou, tocamos no solo (x <= 0)
 vf = sqrt(v0*v0 + 2*-a*x0)  # calcular vel. final
 print '>>>CONTATO! Velocidade final: %6.2f' % (-vf)
 # avaliar pouso de acordo com a velocidade final
 if vf == 0:
     msg = 'Alunissagem perfeita!'
 elif vf <= 2:
     msg = 'Alunissagem dentro do padrao.'
 elif vf <= 10:
     msg = 'Alunissagem com avarias leves.'
 elif vf <= 20:
     msg = 'Alunissagem com avarias severas.'
 else:
     msg = 'Modulo lunar destruido no impacto.'
 print '>>>' + msg

Como jogar

Seu objetivo é desacelerar a nave, queimando combustível na dosagem certa ao longo da queda, para tocar o solo lunar com uma velocidade bem próxima de zero. Se você quiser, pode usar um diagrama como o mostrado abaixo (colocamos em nosso site um desses em branco, para você imprimir e usar). As unidades estão no sistema inglês, como no original. O mais importante é você saber que cada 5 unidades de combustível queimadas anulam a aceleração da gravidade. Se queimar mais do que 5 unidades, você desacelera; menos do que 5, você ganha velocidade. Primeiro, pratique seus pousos preocupando-se apenas com a velocidade final. Depois você pode aumentar a dificuldade, estabelecendo um limite de tempo: por exemplo, o pouso tem que ocorrer em exatos 13 segundos. Uma última dica: cuidado para não queimar combustível cedo demais. Se você subir, vai acabar caindo de uma altura ainda maior! Boas alunissagens!

Copyright © 1999 MAGNET
Introdução

Somadora infinita

Mais sobre o while

Loops (quase) infinitos

Um programa mais tolerante

Como tratar um erro de verdade

Associação de nomes a valores

Resolvendo o Orçamento da República

Nossa primeira simulação

Copyright© 1996 - 2003 Terra Networks S.A. Todos os direitos reservados. All rights reserved.