Skip to content

Instantly share code, notes, and snippets.

@maluta
Created March 15, 2010 17:57
Show Gist options
  • Save maluta/333102 to your computer and use it in GitHub Desktop.
Save maluta/333102 to your computer and use it in GitHub Desktop.
/* nessa versão o avião nunca pega o pombo */
#include <stdio.h>
#include <stdlib.h>
#define dprintf if (debug) printf
const char debug = 0; /* or 0 if you want disable debug */
/* algumas constantes */
const int ang_fuga = 45;
int distancia = 100;
enum {
delay_pombo = 4,
delay_aviao
};
struct pombo_t {
unsigned int ang;
char dir;
long d;
};
struct aviao_t {
unsigned int ang;
char dir;
long d;
};
void init(struct pombo_t *p, struct aviao_t *a) {
p->ang = 0;
p->dir = -1;
p->d = distancia;
a->ang = p->ang;
a->dir = -1;
a->d = 0;
}
int main() {
struct pombo_t pombo;
struct aviao_t aviao;
init(&pombo,&aviao);
unsigned long long timer=0;
for (;;timer++) { /* start */
if ( pombo.d == aviao.d ) {
printf("%u,%d\n",pombo.d,pombo.ang);
printf("%u,%d\n",aviao.d,aviao.ang);
printf("pego em %u ciclos \n",timer);
exit(1);
}
dprintf("%u,%d,%d\n",pombo.d,pombo.ang,pombo.dir);
dprintf("%u,%d,%d\n",aviao.d,aviao.ang,aviao.dir);
if (timer%delay_pombo == 0) {
dprintf("-- pombo verifica --\n");
if (aviao.ang == pombo.ang) {
pombo.ang += ang_fuga; /* muda o angulo */
if (pombo.ang >= 360)
pombo.ang = pombo.ang % 360; /* normaliza */
}
if(aviao.dir == pombo.dir) {
pombo.dir = (pombo.dir * -1); /* inverte a direção */
dprintf("%d \n",(int)pombo.dir);
}
}
if (timer%delay_aviao == 0) {
dprintf("-- aviao verifica --\n");
if (aviao.ang != pombo.ang) {
aviao.ang = pombo.ang; /* corrige p/ angulo do pombo */
if (aviao.ang >= 360)
aviao.ang = aviao.ang % 360; /* normaliza */
}
if (aviao.dir != pombo.dir) /* corrige a direção */
aviao.dir = pombo.dir;
}
pombo.d += (30 * pombo.dir); /* cada ciclo do 'for' vale 1 seg */
aviao.d += (90 * aviao.dir);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment