Trabalho Prático #1
Trabalho Prático #1
1) Objetivo
Desenvolvimento de um trabalho prático para a aplicação dos conhecimentos adquiridos sobre programação básica em C, ou seja, programação seqüencial e condicional.
2) Problema
O problema consiste na implementação de um antigo jogo de fórmula 1. A idéia é fazer uma versão simplificada deste, sem obstáculos e sem pista móvel. O jogo é formado pelo carro do jogador que se movimenta horizontalmente e pelos carros adversários que se movimentam verticalmente. O objetivo do jogo é que o jogador evite o maior número possível de carros adversários. Os carros adversários descem na tela e o jogador através de deslocamentos horizontais do seu carro tenta evitar colisões. O jogo termina quando o jogador não tiver mais carros (vidas) disponíveis.
[pic]
O jogo possui as seguintes regras:
a. - A área de jogo compreende uma faixa de 24 linhas e de 30 colunas da tela de texto, sabendo que a tela completa possui 24 linhas por 80 colunas.
- Existem 2 tipos de carros no jogo. O carro do jogador e os carros adversários (no mínimo devem ter 5 carros adversários simultaneamente na tela).
- Os carros podem ser representados por um conjunto de caracteres textuais adequado ou por um conjunto de caracteres semi-gráficos (ver tabela ASCII).
- A pista de fórmula 1 deve ser representada por um conjunto de caracteres textuais adequado, tipo "|" ou por um conjunto de caracteres semi-gráficos. A pista será uma reta, não contendo curvas nem obstáculos de qualquer sorte.
- O jogo possui 2 velocidades, a saber: velocidade 1 e velocidade 2. Estas velocidades estão relacionadas com a velocidade com que os carros adversários descem na tela. A velocidade atual deve ficar impressa na tela de jogo. Sempre que desejar, o jogador poderá alterar a velocidade do jogo através de uma tecla pré-definida no teclado.
- A posição horizontal do carro do jogador deve ser controlada pelo teclado, através das setas esquerda e direita (ou outra combinação de teclas).
- O carro do jogador deverá ocupar sempre as últimas linhas da tela (não é permitido movimento vertical, só horizontal).
- A posição inicial dos carros adversários deve ser determinada aleatoriamente, sendo que a sua trajetória não será mais alterada até passar pelo carro do jogador. Assim, não é permitido movimento horizontal dos carros adversários durante a descida, somente movimento vertical.
- O jogador possui no máximo 3 vidas, ou seja, ele poderá colidir até 3 vezes com um dos carros adversários. Quando ocorrer a quarta colisão, o jogo deverá ser suspenso e o jogador deverá ser informado que perdeu o jogo através de uma mensagem na tela (Por exemplo: Game Over).
- Sempre que houver uma colisão, será retirada uma vida do jogador, os carros adversários que por ventura estejam descendo serão suprimidos e novos carros adversários começarão a descer.
- O escore do jogador deverá ser exibido na tela. Cada carro adversário evitado pelo jogador vale 100 pontos e a cada 5000 pontos, o jogador ganha uma vida adicional que será computada como crédito. Assim, caso o jogador perca suas 3 vidas, antes de terminar o jogo, deverá ser verificado quantos créditos o jogador possui. Caso o jogador possua vidas adicionais, o jogo continuará até que ele não possua mais vidas adicionais. O crédito deverá ser exibido na tela.
Dicas de Implementação:
Devem ser utilizadas as funções da biblioteca CONIO.H (vide referência). Esta biblioteca oferece funções para limpeza da tela, posicionamento do cursor, escolha de cores, leitura do teclado, etc.
DICA: Se forem utilizadas cores, é necessário empregar a função cprintf(...) ao invés de
printf(...), caso contrário as cores não aparecerão.
É importante lembrar que um jogo não pode ficar esperando o usuário pressionar uma tecla, portanto deverá ser utilizada a função kbhit(), que retorna 1 se uma tecla tiver sido pressionada (mas não espera!). Depois, basta ler a tecla:
char tecla;
...
if (kbhit()) tecla = getch(); // só lê se uma tecla for pressionada, não fica esperando
... continua
É possível que o jogo fique muito rápido. Para minimizar esse efeito, sugere-se a utilização de uma função de retardo, como delay(int tempo), que faz com que o processador espere tempo milissegundos.
Um número aleatório pode ser gerado através das funções rand() e random(int num), definidas na biblioteca STDLIB.H (consultar o help para verificar o modo de utilização destas funções).
3) Critérios de avaliação:
3.a) Trabalho a ser desenvolvido individualmente ou em duplas
3.b) Apresentação mínima:
3.b.1) arquivo com o texto do programa fonte
3.b.2) comentários mínimos exigidos no programa fonte:
- nomes dos alunos
- data da última alteração
- comentários a respeito de variáveis e cálculos realizados
- comentário sobre a combinação de teclas a ser utilizada para jogar (deslocamento do carro do jogador e alteração de velocidade)
3.b.3) listagem do programa, com a correta indentação
3.c) Trabalhos com erros de sintaxe (compilação) não serão aceitos.
3.d) Em caso de erro de semântica (conteúdo), o peso final do trabalho pode sofrer
uma redução de até 100 % do peso inicial.
3.e) Em caso de comprovação de fraude escolar os pesos de todos os trabalhos
envolvidos serão automaticamente anulados.
4) Entrega do trabalho:
4.a) Data de entrega: 19 / 09 / 2000, impreterivelmente.
4.b) O arquivo contendo o programa fonte do trabalho deve ser entregue em disquete 3 1/2" HD, rotulado com os nomes completos.
4.c) O nome do arquivo do programa fonte a ser entregue deve ser constituído pelos
últimos sobrenomes dos nomes, seguidas do dígito "1".
Exemplo: Ana Paula Lemos e Robson Silva, seria: LemosSilva1.C
4.d) A listagem deve ser entregue diretamente ao professor até a data de entrega prevista.
................
................
In order to avoid copyright disputes, this page is only a partial summary.
To fulfill the demand for quickly locating and searching documents.
It is intelligent file search solution for home and business.