Preciso fazer com que a foca do tanque nade ( isso eu já fiz) e depois de
algum tempo suba para a superfície e respire, depois volte a nadar.
Não consigo achar o algoritmo para que ela suba e respire na superfície.
#include <stdlib.h>
#include <time.h>
#include <allegro.h>
/* +----------------------------------------+ +
| A . MARGEM_SUPERIOR
| +--------------------------------+ Q +
| | | U
| | | A
| | | R
| | | I
| | | O
| | | |
| | | A
| | | L
| | | T
| | | U
| +--------------------------------+ R +
| A . MARGEM_INFERIOR
+-------------AQUARIO_LARGURA------------+ +
+ . + + . +
MARGEM_ESQUERDA MARGEM_DIREITA */
#define AQUARIO_LARGURA 640
#define AQUARIO_ALTURA 480
#define PEIXE_LARGURA 50
#define PEIXE_ALTURA 34
#define MARGEM_ESQUERDA 0
#define MARGEM_DIREITA 0
#define MARGEM_SUPERIOR 0
#define MARGEM_INFERIOR 70
int main(void){
// parâmetros do aquário
BITMAP *fundo;
// parâmetros do peixe
BITMAP *peixe;
int posicaoX, posicaoY, direcaoX, direcaoY,
velocidadeX, velocidadeY, incrementoX, incrementoY, retorno;
// inicialize o sistema do Allegro
allegro_init();
// inicialize o controlador do teclado
install_keyboard();
// inicialize o controlador de temporizadores
install_timer();
// inicialização do gerador de numeros aleatórios
srand(time(NULL));
// definição da profundidade de cor
// http://pt.wikipedia.org/wiki/Profundidade_de_cor
set_color_depth(desktop_color_depth());
// inicialize o modo gráfico com uma resolução de tela de 640x480 píxeis
retorno = set_gfx_mode(GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0);
if (retorno != 0) {
allegro_message(allegro_error);
return 1;
}
set_window_title("Aquario - pressione a tecla Esc para sair do programa");
fundo = load_bmp("tanque.bmp", NULL);
peixe = load_bmp("foca.bmp", NULL);
posicaoX = 100 + rand() % 300;
posicaoY = 100 + rand() % 200;
direcaoX = rand() % 2 == 0 ? -1 : 1;
direcaoY = rand() % 2 == 0 ? -1 : 1;
velocidadeX = rand() % 8;
velocidadeY = rand() % 8;
incrementoX = rand() % 4;
incrementoY = rand() % 4;
while(!key[KEY_ESC]) // enquanto não for pressionada a tecla ESC, ...
{
// desloque o peixe!
if (rand() % 8 == 0) {
if (rand() % 16 == 0) direcaoX = -direcaoX;
if (rand() % 16 == 0) direcaoY = -direcaoY;
incrementoX = rand() % 4 + 1;
incrementoY = rand() % 4 + 1;
velocidadeX = (velocidadeX + incrementoX) % 8 + 1;
velocidadeY = (velocidadeY + incrementoY) % 8 + 1;
posicaoX = posicaoX + direcaoX * velocidadeX;
posicaoY = posicaoY + direcaoY * velocidadeY;
if (posicaoX < MARGEM_ESQUERDA) {
posicaoX = MARGEM_ESQUERDA;
direcaoX = -direcaoX;
}
if (posicaoX + PEIXE_LARGURA >= AQUARIO_LARGURA - MARGEM_DIREITA) {
posicaoX = AQUARIO_LARGURA - MARGEM_DIREITA - PEIXE_LARGURA - 1;
direcaoX = -direcaoX;
}
if (posicaoY < MARGEM_SUPERIOR) {
posicaoY = MARGEM_SUPERIOR;
direcaoY = -direcaoY;
}
if (posicaoY + PEIXE_ALTURA >= AQUARIO_ALTURA - MARGEM_INFERIOR) {
posicaoY = AQUARIO_ALTURA - MARGEM_INFERIOR - PEIXE_ALTURA - 1;
direcaoY = -direcaoY;
}
// sem bufferização
blit(fundo, screen, 0, 0, 0, 0, AQUARIO_LARGURA, AQUARIO_ALTURA);
// a cor violeta-claro (#ff00ff) é tratada como transparente pela
// função draw_sprite().
if (direcaoX == 1) draw_sprite(screen, peixe, posicaoX, posicaoY);
else draw_sprite_h_flip(screen, peixe, posicaoX, posicaoY);
}
// pausa de 20 milissegundos
rest(20);
}
//end program
allegro_exit();
return 0;
}
END_OF_MAIN()

Colocar "urgente" no enunciado não fará com que você obtenha uma resposta mais rapidamente. As pessoas responderão assim que souberem e tiverem tempo hábil para tal. Não sei nada de Allegro, então não vou nem tentar responder. Mas para não passar em branco, sugiro que você reformate sua mensagem, pois ela está meio ilegível, está complicado de ler (fonte muito grande no começo, comentários sobre as margens mal formatados etc). Boa sorte!
Para a formatação do código fonte você deve identar o código com 4 espaços extras. Veja mais informações em: http://umamao.com/editing-help. Como a Andrea falou, o "urgente" na resposta não fará com que você obtenha a resposta mais rapidamente. A minha dica com relação a isso é: faça a pergunta direito e depois passe o link para algumas pessoas que você acha que saibam responder.