Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Actualités


Index du Forum » Actualités » La revue des projets - 124
Lephenixnoir En ligne Administrateur Points: 24673 Défis: 170 Message

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



Lephenixnoir En ligne Administrateur Points: 24673 Défis: 170 Message

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...
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

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
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Lightmare Hors ligne Membre de CreativeCalc Points: 690 Défis: 0 Message

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 )
"Quand je dis à la cour : "Sautez ! ", tout le monde me demande "jusqu'où ?" "
Dijkstra - The Witcher
Shadow15510 Hors ligne Administrateur Points: 5504 Défis: 18 Message

Citer : Posté le 30/09/2018 17:06 | #


@Massena : C'est honteux Je suis d'accord avec D-S : parles-en à la direction !
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Massena Hors ligne Ancien rédacteur Points: 2244 Défis: 11 Message

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
Yatis Hors ligne Membre Points: 581 Défis: 0 Message

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:
SetTimer(1, 1, &game_main);
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... >_<


Lephenixnoir a écrit :
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....

Dark storm a écrit :

Sinon, hâte de voir ce que va donner le projet de Yatis

Moi aussi... x)
J'espère y arriver en tout cas
Lephenixnoir En ligne Administrateur Points: 24673 Défis: 170 Message

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 ?
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Yatis Hors ligne Membre Points: 581 Défis: 0 Message

Citer : Posté le 30/09/2018 18:40 | #


Lephenixnoir a écrit :
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 ?

Fxlib.h a écrit :

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é.
Lephenixnoir En ligne Administrateur Points: 24673 Défis: 170 Message

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.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Yatis Hors ligne Membre Points: 581 Défis: 0 Message

Citer : Posté le 30/09/2018 18:48 | #


Nan, j'aimerais avoir ~64fps mais la avec 1ms de delais je suis a 40fps
Critor Hors ligne Administrateur Points: 2687 Défis: 18 Message

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...
Lephenixnoir En ligne Administrateur Points: 24673 Défis: 170 Message

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.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Massena Hors ligne Ancien rédacteur Points: 2244 Défis: 11 Message

Citer : Posté le 30/09/2018 20:26 | #


J'me merde les exams je suis en troisième è_é
Parisse Hors ligne Membre Points: 520 Défis: 0 Message

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:
Drak Hors ligne Rédacteur Points: 1925 Défis: 40 Message

Citer : Posté le 01/10/2018 18:54 | #


Wow. Y'a du niveau !
Eon the Dragon : version 1.2
Let's have a look!
Marre de ces RPGs qui t'imposent des classes, des compétences et des sorts ? Crée tes propres capacités sur Eon the Dragon ! Des monstres, des dragons et des combats aussi épiques que difficiles t'attendent !
Un RPG unique et immense t'attend ! Joue dès maintenant à Aventura, le Royaume Poudingue !
Vous aussi, soyez swag et rejoignez Planète Casio !

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 177 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd