Este é um jogo de corrida desenvolvido em Python usando a biblioteca Pygame. O jogador controla um carro que deve evitar obstáculos, coletar pads de aceleração e lidar com obstáculos que reduzem a velocidade.
- Funcionalidades
- Requisitos
- Estrutura do Código
- Instalação
- Uso
- Como Jogar
- Contribuições
- Autores
- Licença
- Controle do Carro: O jogador pode mover o carro para a esquerda e para a direita usando as teclas de seta.
- Obstáculos Aleatórios: Obstáculos são gerados de forma procedural e aleatória na pista.
- Colisão: O jogo detecta colisões entre o carro e os obstáculos, resultando no fim do jogo.
- Boost de Velocidade: O jogador pode coletar pads para ativar um boost de velocidade por um tempo limitado.
- Aumento de Dificuldade: A velocidade dos obstáculos aumenta em 15% a cada 20 segundos.
- Rolagem Infinita: A pista de corrida rola infinitamente, proporcionando uma experiência de jogo contínua.
- Pontuações Salvas: As pontuações são salvas em um arquivo para que o jogador possa ver seu progresso e recordes.
- Menu de Pausa: O jogo pode ser pausado, e o jogador pode ver suas pontuações durante a pausa.
- Início com Atraso: O jogo começa com um atraso de 3 segundos para que os obstáculos não apareçam imediatamente.
- Python 3.x
- Pygame
O código está organizado em vários arquivos para facilitar a manutenção e a legibilidade. Aqui está uma visão geral dos principais arquivos e classes:
A classe GameLogic contém a lógica principal do jogo. Ela gerencia a posição do carro, a posição e movimento dos obstáculos e pads, a velocidade do jogo, e as colisões. Também gerencia o menu de pausa e opções.
-
Atributos:
car_x,car_y: Posição do carro.obst_startx,obst_starty: Posição inicial dos obstáculos.pad_startx,pad_starty: Posição inicial dos pads.speed_basic,speed_boost,speed_slow: Velocidades diferentes para o jogo.distance: Distância percorrida pelo carro.
-
Métodos:
__init__(): Inicializa as variáveis do jogo, como a posição do carro, velocidade, posições e velocidades dos obstáculos e pads, e inicializa a animação e spritesheet.main_loop(screen): Loop principal do jogo. Gerencia os eventos, atualiza as posições dos objetos, verifica colisões, e renderiza a tela.reset(): Reseta o estado do jogo para as configurações iniciais.reset_obstacle(): Reseta a posição e escala de um obstáculo.reset_pad(): Reseta a posição e escala de um pad.reset_slow_obstacle(): Reseta a posição e escala de um obstáculo de redução de velocidade.render(screen, boost_active): Renderiza os elementos do jogo na tela.collision_check(x1, y1, car, x2, y2, obstacle, scale): Verifica a colisão entre o carro e um obstáculo ou pad.pause_menu(screen): Exibe o menu de pausa e gerencia a lógica de pausa.options_menu(screen): Exibe o menu de opções e gerencia as configurações do jogo, como resolução, volume, e linguagem.draw_transparent_background(screen, alpha): Desenha um fundo transparente na tela.draw_text(text, font, color, surface, x, y): Desenha texto na tela.
Responsável por desenhar elementos na tela, incluindo o carro, obstáculos, pads e animações.
Gerencia a animação da pista, criando um efeito de rolagem infinita.
A classe Menu gerencia a interface do menu principal do jogo, incluindo as opções de iniciar o jogo e sair.
- Métodos:
__init__(): Inicializa as variáveis de volume e estado das opções.draw_transparent_background(screen, alpha): Desenha um fundo transparente na tela do menu.draw_text(text, font, color, surface, x, y): Desenha texto na tela do menu.main_menu(screen, name_player): Gerencia o loop do menu principal, exibindo botões e respondendo a eventos do usuário.
Além da GameLogic e Menu, o código utiliza várias funções e classes de módulos importados para desenhar botões, gerenciar gráficos, e gerenciar pontuações.
- Módulo
buttons: Contém funções para desenhar botões e gerenciar as opções do jogo. - Módulo
graphics: Contém funções para renderizar gráficos, textos, animações, e gerenciar a interface de usuário. - Módulo
sprite: Contém definições de sprites para o carro, obstáculos, e pads. - Módulo
score_manager: Contém funções para salvar e recuperar pontuações.save_score(score): Salva a pontuação atual em um arquivo JSON.get_high_score(): Retorna a maior pontuação salva.display_scores(screen): Exibe as 5 melhores pontuações na tela.
main.py: Arquivo principal que inicia o jogo.config.py: Contém constantes e configurações globais, como dimensões da tela, limites da pista e cores.buttons.py: Funções para desenhar e gerenciar botões.graphics.py: Contém classes e funções relacionadas ao renderização, animações e exibição de textos.sprite.py: Contém a inicialização de sprites e máscaras para colisão.score_manager.py: Gerenciamento de pontuações.game_logic.py: Contém a lógica principal do jogo, incluindo o loop do jogo, controle do carro, movimentação de obstáculos, detecção de colisões e gerenciamento de pontuações.
-
Clone este repositório:
git clone https://github.com/APB-Abner/Game_Python.git
-
Navegue até o diretório do projeto:
cd Game_Python -
Instale as dependências:
pip install pygame
Para iniciar o jogo, execute o arquivo principal:
python main.py-
Movimentação:
- Use a tecla
←(seta esquerda) para mover o carro para a esquerda. - Use a tecla
→(seta direita) para mover o carro para a direita.
- Use a tecla
-
Coletar Pads:
- Colete pads que aparecem na pista para acumular boosts.
-
Ativar Boost:
- Pressione a barra de espaço (
SPACE) para ativar o boost de velocidade (requer 3 pads coletados).
- Pressione a barra de espaço (
-
Pausar Jogo:
- Pressione a tecla
PouESCpara pausar o jogo.
- Pressione a tecla
-
Reiniciar após Colisão:
- Pressione
Rpara reiniciar o jogo após uma colisão. - Pressione
Qpara sair do jogo após uma colisão.
- Pressione
No menu de pausa, você pode:
- Continuar: Continuar jogando
- Opções: Abrir o menu de opções
- Sair: Sair do jogo
No menu de opções ainda não é possível fazer nada!
Contribuições são bem-vindas! Sinta-se à vontade para abrir issues e pull requests.
- Faça um fork do projeto
- Crie sua feature branch (
git checkout -b minha-nova-feature) - Commit suas mudanças (
git commit -am 'Adiciona nova feature') - Faça um push para a branch (
git push origin minha-nova-feature) - Abra um pull request
- Abner de Paiva Barbosa: RM 558468
- Beatriz Vieira de Novais: RM 554746
- Fernando Luiz Silva Antonio: RM 555201
- Mariana Neugebauer Dourado: RM 550494
- Thomas de Almeida Reichmann: RM 554812
Este projeto está licenciado sob a licença MIT.