La revue des projets - 124
Posté le 30/09/2018 15:53
Bonsoir à vous, cher visiteur. Cette semaine se tient la 124ème édition de la désormais célèbre Revue des Projets. Alors c'est parti !
Notre premier sujet ce soir est
le moteur de calcul formel de Bernard Parisse, KhiCAS. Depuis qu'il a été
porté sur la Graph 90, cet add-in lui confère des capacités mathématiques dignes de calculatrices haut de gamme !
KhiCAS fonctionne avec son propre langage de programmation, qui est très proche du Python : il ajoute donc le Python en plus du calcul formel sur votre calculatrice ! Et il le faut mieux que Casio, en supportant de nombreux modules de dessin et calcul scientifique, alors que l'application officielle
ne propose que math et random.
Un tel outil peut paraître difficile à aborder, mais les efforts de Bernard Parisse en font un outil progressivement plus adapté à l'algorithmique Python et le dessin, avec notamment :
* Des fonctions de dessin en tortue
* Du dessin au pixel où à la ligne, comme en Basic
* Des tracés de courbes ou de graphes
De très beaux résultats qui n'attendent plus que votre attention. Allez y jeter un oeil sur
le topic dédié !
-
Le tour suivant est à Masséna, qui n'a pas de très bonnes nouvelles à nous raconter.
Masséna a écrit :Où il est démontré qu'une équipe éducative peut détruire vos projets.
Enfant, prend garde !
Jeudi. Très belle journée, ensoleillée (ce qui est le bienvenue en ces retombées de température). Mais bon j'arrête de parler de la météo.
Deux heures pour manger. Chouette, je vais pouvoir passer 1h30 sur Evocalc !
Après avoir pris mon [ironie] délicieux festin au self [/ironie], je m'assois sur un banc et sortis ma Graph 35+.
Laissez-moi vous conter ça en poésie
désolé d'avance...
Notez que ça fait longtemps que je publie pas dans la RdP, mais j'étais à l'aboutissement de la partie textuelle !
Ayant sorti sa calculatrice
Survint un pion
Il vit en moi le Vice
Qu'est le non-respect de la règlementation.
- Bonjour, me dit-il
- Bonjour, lui répondis-je
- Donne moi ta calculatrice, demanda-t-il d'un air subtil
J'obéis, soumission oblige
Mais avec l'ordre on ne badine
Il descendit mon menu
Il vit donc tous mes add-ins
Je su donc que j'étais foutu
Par sa grâce il me laissa une chance
Il me demanda de tout reset
Je le fis, quoi que je pense
C'est... Vraiment... Bête
Voyant un espoir je sauva mon projet
En le mettant dans la mémoire secondaire
La situation devenait précaire
Je supprima tous les autres jouets
Mais la calto peut êtres cocu
Car ma mémoire
Fut corrompue !
En gros, comme je fais jamais de sauvegardes et bosse pas sur BIDE, je suis comme qui dirait "dans la merde".
Je ne sais pas pourquoi mes programmes se sont corrompus dans la mémoire secondaire, en tout cas c'est bien chiant. Rip mes pictures et mon gm1.
Cela dit, je devrait peut être en tirer deux choses :
- Maintenant je me lance dans la programmation in-computo
- Je vais pouvoir m'impliquer pleinement dans le triconcours !
De même, le projet n'est pas mort. Il me reste encore mon scénario couché sur papier et deux trois images publiées sur imgur. Peut être même que le dieu de la programmation sera clément et que j'aurais pensé à faire une sauvegarde !
Conclusion : Les add-ins, c'est trop voyant. Et ça cause des problèmes.
Pas très motivant, ce genre de problèmes ! Si vous n'avez pas encore fait de sauvegarde sur mémoire seconde ou sur ordinateur de votre projet, hâtez-vous, ça ne pourra que vous aider !
-
Notre dernier intervenant est Yatis, aux nouvelles de son portage de Warning Forever, un shooter constitué uniquement de boss. En remaniant le concept pour modéliser un boss unique qui s'adapte de combat en combat, il nous a déjà montré des graphismes pétés dans les précédentes RdP.
Yatis a écrit :Des petites nouvelles de Warning Forever
Le projet a totalement migré sous Linux et ça m'a permis de revoir certaines choses du code notamment les fonctions de rotation de bmp. Pour information j'utilise la fonction
ML_bmp_rotate() de
Ninestars que j'ai entièrement refait d'ailleurs voila le code pour les curieux:
void ML_bmp_rota(const unsigned char *bmp, int x, int y, int width, int height, int angle)
{
char i;
char j;
char nb_width;
int ox;
int oy;
int dx;
int dy;
int xr;
int yr;
int sinus;
int cosinus;
if (bmp)
{
i = -1;
ox = x + (width >> 1);
oy = y + (height >> 1);
nb_width = width + 7 >> 3;
cosinus = cos_table[angle];
sinus = cos_table[modulo_360(angle + 90)];
while (++i < width)
{
j = -1;
dx = x + i - ox;
while (++j < height)
{
if (bmp[(i >> 3) + nb_width * j] & 0x80 >> (i & 7))
{
dy = y + j - oy;
xr = ox + (dx * cosinus - dy * sinus + 8191 >> 14);
yr = oy + (dx * sinus + dy * cosinus + 8191 >> 14);
if (!(yr & 0xffffffc0 || xr & 0xffffff80))
vram[(yr << 4) + (xr >> 3)] |= 128 >> (xr & 7);
}
}
}
}
}
J'ai essayé d'ajouter
8191 (a la fonction de trigo) ce qui correspond à la valeur 0.5 ça me permet de dire, par exemple, "si à position du pixel est égal à 3,9 alors tu le mets à la position 4,4". ça règle toujours pas le problème des "trous" mais l'image est carrément moins déformé.
De plus j'applique la fonction de trigo (qui est très lourde) uniquement au pixel "allumé" de l'image. J'ai donc gagné en fps mais je tombe toujours vers 54 fps quand le boss devient "gros".
Je suis donc en train de me débarrasser de
setFPS() au profit des
Timers car je la soupçonne de réduire complètement mes fps (sans
setFPS() je suis vers ~100fps et avec ~52fps). Pour l'instant j'utilise
SetTimer() et
KillTimer() ce qui devrait changer à l'avenir par mes propres fonctions de timer (parce que j'aime bien comprendre comment une fonction....fonctionne et ça va me permettre de comprendre l'INTC et les interruptions).
Sinon j'ai réglé tous les problèmes de "norme" (j'en avais beaucoup) maintenant le code est "lisible" et disponible sur
un repos
Voilà "c'est tout" ce que j'ai faits en 2 semaines (j'ai repris les cours j'ai donc carrément moins le temps
)
Ça reste un joli travail ! Attention toutefois, tu ne peux pas remplacer les timers et le contrôleur d'interruptions n'importe comment, sinon tu vas tout casser !
Cette semaine, six programmes a été posté :
-
LE Basket de Manolo
-
KanColle AS Sim 1.1 d'Oradimi
-
Stat Reglin,
Evol,
Étude lim et
Domaine de Samourai37
Lire la dernière RDP : La revue des projets - 123
Soumettre un article à la RDP : Formulaire de soumission
Citer : Posté le 30/09/2018 15:55 | #
Pour préciser ma remarque, Yatis : tu ne peux pas remplacer SetTimer() par une fonction du TMU à moins de réécrire tout le gestionnaire d'interruptions (gint) ou effectuer des gourouteries hasardeuses avec le système (auto-debugger de Kristaba). Franchement je te le conseille pas trop...
Citer : Posté le 30/09/2018 16:03 | #
Concernant le problème de Massena, c'est complètement abusif de la part du surveillant. Même en cas d'examen, tout ce qu'il a le droit de faire est de confisquer la calculatrice, et non effacer les données présentes dedans.
Je te conseille de signaler l'incident à la direction, qui pourra faire un rappel de la loi auprès des surveillants de l'établissement (et des profs par la même occasion).
Dans tous les cas faites des backups !
Sinon, hâte de voir ce que va donner le projet de Yatis
Citer : Posté le 30/09/2018 16:17 | #
@Massena : on est tous avec toi ! j'ai connu ca, et il ne faut pas rester passif ! Il n' a pas le droit de te priver d'un outil scolaire et encore moins en dehors des périodes d'examens ( et dans le pire des cas tu dis que tu sais pas reset )
Dijkstra - The Witcher
Citer : Posté le 30/09/2018 17:06 | #
@Massena : C'est honteux Je suis d'accord avec D-S : parles-en à la direction !
Citer : Posté le 30/09/2018 18:26 | #
Merci de vos retour !
D'accord, je penserais à en parler à la direction.
de tout façon moi et lui on se voit pas en photo...
Mais je n'ai fait que supprimer tous mes add-ins, et c'est un bug de la calto ou une manip foireuse qui a supprimé mon prog.
Je sais pas quoi.
En tout cas, je retiendrais la leçon.
Et je vais en profiter pour refaire les graphismes en mieux
et je vais enfin pouvoir jouer à Aventura. Ouèèèè !
~~~
@Yatis : Fonce ! J'ai hâte de jouer à ton jeu
Citer : Posté le 30/09/2018 18:32 | #
Bon...en utilisant la fonction SetTimer() je tombe sur des résultats très étranges, vraiment.
Déjà si je fais ça:
SetTimer(1, 1, &game_main);
while (exit > 0);
KillTimer(1);
Ou exit sert d'attente pour que la partie se finisse.
Eh bien, impossible de sortir de la boucle (alors qu' exit change bien) et je suis à 40 Fps.
Mais maintenant si je le modifie un peu:
while (exit > 0)
{
asm_clear_vram(vram);
print_uint(exit, 0, 0, 0);
}
KillTimer(1);
Ici le code rajouté sert à rien car je n'affiche même pas la VRAM a l'écran.
Mais grace à ça, j'arrive à sortir de la boucle (exit est pris en compte) et je reste à 40 Fps.
Je sais pourquoi je suis aussi bas en Fps et pourquoi ça fait ça... >_<
Pour préciser ma remarque, Yatis : tu ne peux pas remplacer SetTimer() par une fonction du TMU à moins de réécrire tout le gestionnaire d'interruptions (gint) ou effectuer des gourouteries hasardeuses avec le système (auto-debugger de Kristaba). Franchement je te le conseille pas trop...
Bon, bah d'accord je ne mis frotterais pas Même si les interruptions m'intéressent de plus en plus....
Sinon, hâte de voir ce que va donner le projet de Yatis
Moi aussi... x)
J'espère y arriver en tout cas
Citer : Posté le 30/09/2018 18:36 | #
Euh, tu sais que le délai de SetTimer() il a une granularité de 25 ms mais il est quand même exprimé en ms ?
Citer : Posté le 30/09/2018 18:40 | #
Euh, tu sais que le délai de SetTimer() il a une granularité de 25 ms mais il est quand même exprimé en ms ?
Une fonction pas si simple à utiliser mais TRES utile. Elle permet de lancer un timer qui appellera une fonction à intervalle régulier. En premier argument on passe l'ID du timer (de 1 à 5). En second argument le temps entre 2 répétitions (en millisecondes), et enfin la fonction à appeler. Attention, le passage de la fonction par pointeur s'effectue avec uniquement le nom de la fonction, sans parenthèses (un timer ne peut pas passer d'arguments).
Si la fonction réussit, elle retourne l'ID du timer (utilité ?). Sinon elle retourne une valeur négative correspondant à un code d'erreur. Un échec survient si un paramètre est mauvais ou si le timer est utilisé.
Citer : Posté le 30/09/2018 18:46 | #
Donc si tu veux 40 FPS, tu veux 25 ms de délai, pas 1 ms de délai.
Citer : Posté le 30/09/2018 18:48 | #
Nan, j'aimerais avoir ~64fps mais la avec 1ms de delais je suis a 40fps
Citer : Posté le 30/09/2018 18:48 | #
Je suis dans l'incapacité totale de comprendre l'histoire du pion.
A supposer qu'il ait assimilé la calculatrice à un smartphone, désormais interdit de façon générale dans l'enceinte des écoles et collèges cour de récréation incluse...
A supposer que ton lycée ait formulé une interdiction similaire au règlement intérieur... au mieux on te demandait de le ranger pour aller bosser ou pratiquer des jeux meilleurs pour la santé, ou au pire on te la confisquait.
Mais même aux examens on n'a pas le droit de fouiller les calculatrices ou d'en effacer le contenu. Alors là, sur un blanc dans la cour, tu parles...
Citer : Posté le 30/09/2018 18:50 | #
Comme je l'ai dit, la granularité est de 25 ms. Le délai est soit 25 ms, soit 50 ms, il n'y a pas d'entre-deux.
Actuellement ton 1 est arrondi à 0 par SetTimer() (le multiple de 25 inférieur) et ça donne un TCOR pour le timer sous-jacent de 0 ; comme c'est pas raisonnable SetTimer() prend une valeur complètement arbitraire de 25 ms à la place, résultat ton callback tourne à 40 Hz.
Tu ne peux pas avoir 64 Hz, mais 40 suffisent largement sur la calculatrice.
Citer : Posté le 30/09/2018 20:26 | #
J'me merde les exams je suis en troisième è_é
Citer : Posté le 01/10/2018 09:06 | #
Quelques captures d'ecran de KhiCAS, plus à jour:
tableau de variations
graphe
shell de calcul
tortue logo
source correspondant
fractale de Mandelbrot
en cours d'execution:
Citer : Posté le 01/10/2018 18:54 | #
Wow. Y'a du niveau !