1

Bonjour !
Je voudrais faire un programme simulant un banc de poissons : avec plusieurs poissons (pixels) et un pixel que l'on peut faire bouger sur tout l'écran (je l'appelle pointeur).

Le principe est le suivant :

Si un poisson détecte le pointeur à une certaine distance de lui, il s'en éloigne jusqu'à être au delà de cette distance.
Le groupe de poissons se forme de cette façon : chacun va en direction du poisson le plus proche et s'arrête à une distance donnée de lui.

J'ai déjà fait un début de code avec un poisson mais je me suis presque fait jeter dans un autre forum parce qu'il parait qu'il est nul, donc, s'il vous plait, pas de critiques destructives, je les connais par coeur ! lol
// C Source File
// Created 25/05/2006; 15:45:26

#include <tigcclib.h>

short xa,ya,xta,yta,yy,xx,y,x,yt,xt;          /* Variables de déplacement */
char get;                                     /* Variable de test clavier */
short cy,cx,tecom;                            /* Variables de comptage    */

moduldep()                                    /* Fonction de déplacement  */
{                                             /* du pointeur              */
get=ngetchx();
if((get==81)&&(y>2))
	y-=2;
if((get==82)&&(x>2))
	x-=2;
if((get==84)&&(y<98))
	y+=2;
if((get==88)&&(x<158))
	x+=2;
}

bacomp()                                      /* Fonction de comptage des */
{                                             /* distances                */
cy=ya-y;
cx=xa-x;
if((cy<=10)&&(cx<=10))
{
	tecom=1;
	if(cy<0)
	{
		if(ya<99)
			ya++;
	}
	else
	{
		if(ya>1)
			ya--;
	}
	
	if(cx<0)
	{
		if(xa<159)
			xa++;
	}
	else
	{
		if(xa>1)
			xa--;
	}
}
else
tecom=0;
}

// Main Function
void _main(void)
{
clrscr();
xa=xta=79;
ya=yta=49;
x=y=xt=yt=1;
DrawPix(xa,ya,A_NORMAL);
DrawPix(x,y,A_NORMAL);

dep:
moduldep();
DrawPix(x,y,A_XOR);
DrawPix(xt,yt,A_XOR);
yt=y;
xt=x;

ba:
bacomp();
if (get=8)
	goto zzz;
if(tecom)
{
	DrawPix(xa,ya,A_XOR);
	DrawPix(xta,yta,A_XOR);
	yta=ya;
	xta=xa;
	goto ba;
}
goto dep;
zzz:
}

2

Oui je commence à comprendre pourquoi l'indentation est méga-importante sick

Sinon, tes fonctions n'ont pas l'air d'utiliser des pointeurs, mais en relisant le code je comprends pourquoi. Évite les variables globales comme ça, c'est sale. De plus, tu commentes un peu, mais on ne sait pas quelles variables sont utilisées pour telle entité. Pour finir, je croyais que la distance entre deux points c'était (x² + y²)^(1/2) ???

[edit] Et y'a un Goto ??? Berk..

3

C'est marrant comme projet smile
Par contre, quelle est ta question ?
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

4

naPO :
Je croyais que la distance entre deux points c'était (x² + y²)^(1/2) ???

Ah oui c'est vrai j'ai fait ça l'année dernière... Merci du tuyau !

5

(sachant que c'est plus rapide de faire: "x²+y² < d²" que "(x² + y²)^(1/2) < d", surtout quand d est fixe...)

6

Bah, ça dépend de la distance qu'il utilise trigic

7

confus

8

Je pense que spectras parle de la distance d(a,b)=N(b-a) avec N une norme sur R².
Sachant qu'il n'existe pas que la norme (x,y)->sqrt(x²+y²) ...
avatar
Combien de tas de bois une marmotte pourrait couper si une marmotte pouvait couper du bois ?

9

je crois que spectras voulait dire que distance n'est pas forcément distance euclidienne (distance de manhattan par exemple)


edit : hmm, cross de quelques heures... (gol)