/* Voici un code source ColecoVision qui fait je pense ce que tu cherches. Ca utilise un algo de bresenham modifié. En gros, il y à un vaisseau au milieu de l'écran et toi du tourne autour, et lui tire vers toi quelquesoit ta position dans l'écran. J'espère que ça peut t'aider ... */ #include #include #include #define MAXBULLET 8 struct Bullet { byte flags; byte sprite; byte dx,dy; int err; } bullet[MAXBULLET]; #define BUL_ACTIVE 0x80 #define BUL_UP 0x1 #define BUL_LEFT 0x2 void updatebullet(int id) { byte s=bullet[id].sprite; byte dx=bullet[id].dx; byte dy=bullet[id].dy; int e2; if((bullet[id].flags&BUL_ACTIVE)==0) return; // not active. if(sprites[s].x==255 || sprites[s].x==0 || sprites[s].y==0 || sprites[s].y==191) { bullet[id].flags=0; // sprite inactive. sprites[s].y=192; // off screen. } e2=bullet[id].err<<1; if( e2 > -dy) { bullet[id].err-=dy; sprites[s].x+=(bullet[id].flags&BUL_LEFT)?-1:1; } if( e2 < dx ) { bullet[id].err+=dx; sprites[s].y+=(bullet[id].flags&BUL_UP)?-1:1; } } int newsprite(int id,int x0,int y0) { const int reserved=2; sprites[id+reserved].x=x0; // reserve first two sprites for player and enemy. sprites[id+reserved].y=y0; sprites[id+reserved].pattern=8; // Our bullet pattern sprites[id+reserved].colour=15; // VDP_WHITE return id+reserved; } int newbullet(int x0,int y0,int x1,int y1) { int i; for(i=0;i