Fala Pessoal! Tudo bom? 😉
Então, hoje vamos falar de Programação, de Raspberry Pi, de linguagem de programação Python, e por aí vai! 😀
Bom, este post não vai ser tão longo (será?! risos, vocês já me conhecem né), mas a minha ideia de postá-lo surgiu, justamente porque eu também estou “estudando” (estudar sempre é bom 🙂) sobre a placa Raspberry Pi (especificamente a Raspberry Pi 3 Modelo B) e sobre a linguagem de programação “Python“! 🙄
Neste “exercício” para treinar nosso desenvolvimento utilizando a linguagem de programação Python (especificamente a versão Python 3 e se possível com uma IDE), iremos “recriar/emular” o famoso jogo “Snake” (aquele velho jogo da cobrinha que come frutas).
Para começarmos a realizar este feito, ou seja, criar o joguinho e emular/jogar no próprio Raspberry Pi 3, iremos instalar uma biblioteca “externa” ao Raspberry Pi, que neste caso, é uma biblioteca chamada “pygame“.
PS: A título de informação, mas bem importante para sabermos a “origem das coisas” :), a biblioteca “pygame” foi desenvolvida originalmente por Pete Shinners, e a intenção do desenvolvedor foi a de criar uma coleção de módulos Python (sim, escritos utilizando a linguagem de programação Python), exclusivamente projetados para adicionar nova funcionalidade à linguagem Python – funcionalidade, essa, especificamente concebida para facilitar a escrita de jogos utilizando a linguagem de programação Python. Cada um dos módulos presentes na “pygame”, fornece uma função exigida pelos mais modernos jogos, incluindo som, gráficos, suporte de rede, etc.
PS.2: Todavia devemos lembrar que também é completamente possível “criar” jogos sem necessariamente fazer uso da biblioteca externa – “pygame“! Mas não vamos esquecer que utilizando a mesma, o “caminho” fique “facilitado”! 😳
Antes que possamos escrever o programa, claro, necessitamos instalar a biblioteca externa “pygame” para podermos ter acesso a mesma dentro de nosso programa Python, então, caso estejamos já utilizando uma versão/distribuição/variante do sistema operacional Debian (Raspbian por exemplo…), realizar esta tarefa será tão simples quanto digitar a seguinte linha no CONSOLE ou TERMINAL:
sudo apt-get install python-pygame
OBS: No caso de que você tenha uma outra variante/distribuição do sistema operacional, então o mais recomendado é que baixe os arquivos-fonte diretamente do site oficial do “pygame” em http://www.pygame.org/download.shtml
E então, depois destes passos iniciais, vamos finalmente ao código-fonte completo do game Snake – ou melhor – jogo da Cobrinha. 😳 🙄 😎
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 |
# UTILIZANDO BIBLIOTECA EXTERNA DO PYTHON 3 - "pygame" # GAME escrito originalmente por GARETH HALFACREE # Traduzido, Comentado e Modificado por RODRIGO COSTA # Blog: https://EletronicaParaTodos.com # http://EletronicaParaTodos.net # MANAUS 09-07-2017 # ==================================================== #!/usr/bin/env python # Importamos as BIBLIOTECAS externas import pygame, sys, time, random # e "localizamos" (fazemos local as instrucoes), # como se fosse NATIVA do módulo from pygame.locals import * # Inicializamos o pygame pygame.init() # Armazenamos na variavel "fpsClock" as # instrucoes da funcao pygame de tempo # que será utilizada para controlar a # velocidade do jogo - (FramePerSecond) fpsClock = pygame.time.Clock() # Criamos uma nova superfície de exibição # do pygame - a tela (CANVAS) na qual os # objetos internos do jogo serão desenhados playSurface = pygame.display.set_mode((640, 480)) pygame.display.set_caption('Raspberry Snake') # Definição das CORES que serão utilizadas no jogo redColour = pygame.Color(255, 0, 0) blackColour = pygame.Color(0, 0, 0) whiteColour = pygame.Color(255, 255, 255) greyColour = pygame.Color(150, 150, 150) # Devemos inicializar algumas das variaveis do jogo # de modo que estejam prontas para uso. Caso estas # variaveis sejam deixadas em BRANCO quando o jogo # comecar, o nosso PYTHON não saberá o que fazer. snakePosition = [100,100] snakeSegments = [[100,100], [80,100], [60,100]] raspberryPosition = [300,300] raspberrySpawned = 1 direction = 'right' changeDirection = direction # Se temos um conjunto particular de instrucoes # que serao necessarias em varios pontos do nosso # programa, a utilizacao do 'def' para criar uma # funcao, implica que teremos apenas que digitá-la # uma UNICA vez - e altera-la apenas em um unico # ponto caso desejemos alterar o programa posteriormente def gameOver(): gameOverFont = pygame.font.Font('freesansbold.ttf', 72) gameOverSurf = gameOverFont.render('Game Over', True, greyColour) gameOverRect = gameOverSurf.get_rect() gameOverRect.midtop = (320, 10) playSurface.blit(gameOverSurf, gameOverRect) pygame.display.flip() time.sleep(5) pygame.quit() sys.exit() # Iniciamos o LOOP PRINCIPAL. Isso se dá em um # LOOP INFINITO - um loop 'WHILE' do qual jamais # se sai. Desta forma, o jogo pode continuar a # rodar até que o jogador morra por bater em uma # parede ou comer a própria cauda. while True: for event in pygame.event.get(): if event.type == QUIT: pygame.quit() #sys.exit() elif event.type == KEYDOWN: if event.key == K_RIGHT or event.key == ord('d'): changeDirection = 'right' if event.key == K_LEFT or event.key == ord('a'): changeDirection = 'left' if event.key == K_UP or event.key == ord('w'): changeDirection = 'up' if event.key == K_DOWN or event.key == ord('S'): changeDirection = 'down' if event.key == K_ESCAPE: pygame.event.post(pygame.event.Event(QUIT)) # A cobra devera ser proibida de girar imediatamente # sobre ela mesma - se isso ocorrer, a cobra morrera # e o jogo estara terminado. Para evitarmos que isso # ocorra, a direção solicitada pelo usuario - armazenada # em 'changeDirection' - é comparada com a direção atual # em que a cobra está caminhando - armazenada em 'direction', # se elas são direções opostas, a instrução é ignorada # e a cobra continua na mesma direção anterior. if changeDirection == 'right' and not direction == 'left': direction = changeDirection if changeDirection == 'left' and not direction == 'right': direction = changeDirection if changeDirection == 'up' and not direction == 'down': direction = changeDirection if changeDirection == 'down' and not direction == 'up': direction = changeDirection # Com os dados de entrada do usuario conferidos, durante # cada rodada a cobra move-se 20 pixels (que é igual ao # tamanho de cada um de seus segmentos - cobra) if direction == 'right': snakePosition[0] += 20 if direction == 'left': snakePosition[0] -= 20 if direction == 'up': snakePosition[1] -= 20 if direction == 'down': snakePosition[1] += 20 # Linha para fazer com que o corpo da cobra cresca # OBS: Vamos querer que o corpo cresca apenas quando # a cobra comer uma framboesa, caso contrário ela # nao pararia de crescer, comendo ou nao framboesas snakeSegments.insert(0, list(snakePosition)) if snakePosition[0] == raspberryPosition[0] and snakePosition[1] == raspberryPosition[1]: raspberrySpawned = 0 else: snakeSegments.pop() # As linhas a seguir servem para dizer ao Python # para adicionar uma nova framboesa no jogo # caso o usuario tenha comido a existente if raspberrySpawned == 0: x = random.randrange(1,32) y = random.randrange(1,24) raspberryPosition = [int(x*20), int(y*20)] raspberrySpawned = 1 # Vamos criar uma interface grafica porque ate agora nao temos nenhuma playSurface.fill(blackColour) for position in snakeSegments: pygame.draw.rect(playSurface, whiteColour, Rect(position[0], position[1], 20, 20)) pygame.draw.rect(playSurface, redColour, Rect(raspberryPosition[0], raspberryPosition[1], 20, 20)) pygame.display.flip() # Até aqui nao temos ainda um cenario que faca a cobra morrer # o que certamente deixaria o jogo completamente chato. # Vamos entao acrescentar algumas linhas que permitam # que a cobra morra. if snakePosition[0] > 620 or snakePosition[0] < 0: gameOver() if snakePosition[1] > 460 or snakePosition[1] < 0: gameOver() for snakeBody in snakeSegments[1:]: if snakePosition[0] == snakeBody[0] and snakePosition[1] == snakeBody[1]: gameOver() # E para finalizar, utilizamos a variavel 'fpsClock' para # "regular" a velocidade do jogo, caso contrario rodaria # rapido demais para podermos controlar fpsClock.tick(10) |
FINALMENTE, depois de tudo isso, depois de digitar todo o código acima (é muito melhor para quem está aprendendo que utilizar o famoso COPIAR e COLAR), salvamos o programa com o nome que desejarmos (ex: raspberrypicobra.py) e “rodamos” o mesmo selecionando ‘Run Module‘ do menu Run do IDLE IDE, ou genericamente, digitando ‘python raspberrypicobra.py’ no Terminal/Console. O jogo inicia assim que o programa for carregado/compilado.
💡 Pessoal, vou preparar um pequeno video do joguinho rodando aqui mesmo na minha placa Raspberry Pi 3!
Gostaram?
Compartilhem!
Quando compartilhamos conhecimento “engrandecemos” primeiramente a nós mesmos, mas vemos o “mesmo poder” sendo distribuído e oferecido gratuitamente a todos que estejam buscando este mesmo conhecimento para criar na melhor das ideias e intenções, outras ideias bacanas para ajudar e oferecer ao mundo! 💡 😀 ❗
- Medindo e Monitorando a Temperatura com Arduino (Sensor LM35) - 5 de setembro de 2021
- Controle de Cargas através de Entrada Analógica com Arduino - 30 de agosto de 2021
- REVIEW E DICAS – ALICATE AMPERÍMETRO (UNI-T UT210E PRO) - 28 de agosto de 2021