40Fermer42
EthanielLe 23/10/2003 à 10:15
Tout d'abord, juste histoire de jouer le boulet qui s'attarde sur un détail sans importance aucune :
[...] en changeant l'angle de déplacement avec le curseur gauche et droit.

[...]

		if (_keytest ([4]RR_DOWN[/4])) rad-=2;
		if (_keytest ([4]RR_UP[/4])) rad+=2;

[...]
Concernant les variables :
[...]
	// avant _main
short pcos=0, psin=0;
[...]

//64 octets, pcos
const char Tbl_pcos [256] = {127,126,126,126,126,126,125,125,124,123,123,122,121,120,119,118,117,116,114,113,111,110,108,107,105,103,101,99,97,95,93,91,89,87,85,82,80,77,75,72,70,67,64,62,59,56,53,51,48,45,42,39,36,33,30,27,24,21,18,14,11,8,5,2,0,-3,-6,-10,-13,-16,-19,-22,-25,-28,-31,-34,-37,-40,-43,-46,-49,-52,-55,-57,-60,-63,-66,-68,-71,-73,-76,-78,-81,-83,-86,-88,-90,-92,-94,-96,-98,-100,-102,-104,-106,-107,-109,-111,-112,-113,-115,-116,-117,-118,-119,-120,-121,-122,-123,-124,-124,-125,-125,-126,-126,-126,-126,-126,-126,-126,-126,-126,-126,-125,-125,-124,-124,-123,-122,-121,-121,-120,-119,-117,-116,-115,-114,-112,-111,-109,-108,-106,-104,-102,-101,-99,-97,-95,-92,-90,-88,-86,-84,-81,-79,-76,-74,-71,-69,-66,-63,-61,-58,-55,-52,-49,-46,-43,-40,-38,-35,-32,-28,-25,-22,-19,-16,-13,-10,-7,-4,-1,2,5,8,11,14,17,20,23,26,29,32,35,38,41,44,47,50,53,56,59,61,64,67,69,72,75,77,79,82,84,87,89,91,93,95,97,99,101,103,105,106,108,110,111,113,114,115,117,118,119,120,121,122,123,123,124,125,125,125,126,126,126,126,127};
const char Tbl_psin [256] = {0,-3,-6,-9,-12,-15,-18,-21,-24,-27,-30,-33,-36,-39,-42,-45,-48,-51,-54,-57,-60,-62,-65,-68,-70,-73,-75,-78,-80,-83,-85,-87,-90,-92,-94,-96,-98,-100,-102,-104,-105,-107,-109,-110,-112,-113,-115,-116,-117,-118,-119,-120,-121,-122,-123,-124,-124,-125,-125,-126,-126,-126,-126,-126,-126,-126,-126,-126,-126,-125,-125,-124,-124,-123,-123,-122,-121,-120,-119,-118,-117,-115,-114,-113,-111,-110,-108,-106,-105,-103,-101,-99,-97,-95,-93,-91,-89,-86,-84,-82,-79,-77,-74,-72,-69,-66,-64,-61,-58,-56,-53,-50,-47,-44,-41,-38,-35,-32,-29,-26,-23,-20,-17,-14,-11,-8,-4,-1,1,4,7,10,13,16,20,23,26,29,32,35,38,41,44,47,50,52,55,58,61,63,66,69,71,74,76,79,81,84,86,88,90,93,95,97,99,101,103,104,106,108,109,111,112,114,115,116,118,119,120,121,122,122,123,124,124,125,125,126,126,126,126,126,126,126,126,126,126,125,125,124,124,123,122,121,120,119,118,117,116,115,113,112,110,109,107,106,104,102,100,98,96,94,92,90,88,85,83,81,78,76,73,71,68,65,63,60,57,54,52,49,46,43,40,37,34,31,28,25,22,19,16,12,9,6,3,0};

[...]
	// dans _main
	short rad=124;
	
[...]
		for (int i=0;i<10000;i++);
[...]


Les 2 tables Tbl_pcos et Tbl_psin vont de 0 à 255:
0=0
63=pi/2
127=pi
191=-pi/2
255=2pi
[...]
Pourquoi ne pas déclarer rad avant _main ?
Pourquoi ne pas déclarer rad en tant que unsigned char (si ce type existe) pour être sûr que rad reste dans [[0 ; 255]], donc qu'il n'y a pas de débordement de table, et même pour boucler automatiquement le début et la fin des tables sans avoir à ramener rad dans [[0 ; 255 ]] (le proc s'en charge lui-même avec juste le CF qui s'allume) ?
0) rad=255; if (rad>255) rad=0;Ca permettrait de s'affranchir de : if (rad<Sinon, plutôt que ce double-test, pourquoi ne pas faire un modulo 256 ?

Pourquoi ne pas déclarer pcos et psin après les tables pour leur donner des valeurs valides (au lieu de 0 et 0, mathématiquement impossible), voire les déclarer dans _main ?

Sachant que Cos(2pi)=Cos(0) et que Sin(2pi)=Sin(0), pourquoi mettre à la fois 0 et 2pi dans les tables ?
Pourquoi ne pas faire simplement une relation de proportionnalité de coefficient pi/128 entre l'indice rad et l'angle représenté ?
* 0 -> 0
* 64 -> pi/2
* 128 -> pi
* 192 -> 3pi/2
* 256 -> 2pi, avec 256<=>0 grâce à l'overflow (oui, je sais, c'est un abus de langage, puisque l'overflow ne concerne que les signés ...) et 2pi<=>0 grâce à la 2pi-périodicité de sinus et cosinus

Tu n'aurais pas oublié de déclarer i, à tout hasard ?
Concernant la vitesse (linéaire et de rotation) de la balle :
		if (_keytest (RR_DOWN)) rad-=2;
		if (_keytest (RR_UP)) rad+=2;
Si tu n'utilise que les indices pairs, pourquoi faire des tables 2 fois trop grandes ?
cos=vitesse_lin*Tbl_pcos [rad]; psin=vitesse_lin*Tbl_psin [rad];
Il serait peut-être plus intéressant de faire quelque chose comme :	//avant _main
char vitesse_lin=2, vitesse_rot=2;

[...]
		if (_keytest (RR_UP)) vitesse_lin+=1;
		if (_keytest (RR_DOWN)) vitesse_lin-=1;
		if (vitesse_lin<0) vitesse_lin=0;
		if (vitesse_lin>32) vitesse_lin=32;

		if (_keytest (RR_F1)) vitesse_rot+=1;
		if (_keytest (RR_F5)) vitesse_rot-=1;
		if (vitesse_rot<1) vitesse_rot=1;
		if (vitesse_rot>32) vitesse_rot=32;

		if (_keytest (RR_LEFT)) rad+=vitesse_rot;
		if (_keytest (RR_RIGHT)) rad-=vitesse_rot;

[...]

		p
Je pense ne pas avoir besoin de préciser le détail de ceci ...

1) rad=256-rad; // idem
Enfin, pour le rebond :		if (xpos==0) rad=128-rad;	// rebouclage automatique nécessaire, sinon faire un modulo 256 ou un double-test pour rester dans [[0 ; 255]]
		if (xpos+8==LCD_WIDTH-1) rad=128-rad;	// idem
		if (ypos==0) rad=256-rad;		// 256, pas 255, voire rad=-rad, s'il y a rebouclage automatique
		if (ypos+8==LCD_HEIGHT-
Donc tout pareil que Sasume, mais en un seul pavé indigeste embarrassed ...

@++