π
<-
Chat plein-écran
[^]

Aide pour un programme en C

Programmation et implémentation d'algorithmes.

Re: Aide pour un programme en C

Message non lude Lionel Debroux » 26 Mar 2011, 15:24

Comment affiches-tu le double ?
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Avatar de l’utilisateur
Lionel DebrouxSuper Modo
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 11.2%
 
Messages: 6860
Inscription: 23 Déc 2009, 00:00
Localisation: France
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: -
GitHub: debrouxl

Re: Aide pour un programme en C

Message non lude Folco » 26 Mar 2011, 15:45

(en affichant deux fois le simple :%): )

Pardon ^^ Tu as regardé la doc de printf ? Y sont décrites toutes les options de formatage de données pour un affichage justement.
Avatar de l’utilisateur
Folco
Niveau 8: ER (Espèce Rare: nerd)
Niveau 8: ER (Espèce Rare: nerd)
Prochain niv.: 21.5%
 
Messages: 150
Inscription: 23 Sep 2010, 00:00
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: anapu :p

Re: Aide pour un programme en C

Message non lude Loulou 54 » 26 Mar 2011, 19:21

J'aimerais bien tester ton prog, Kiligolo ! :): Mais je ne trouve pas le lien de téléchargement ! :s:
Mes programmes => ici !
Avatar de l’utilisateur
Loulou 54Premium
Niveau 13: CU (Calculateur Universel)
Niveau 13: CU (Calculateur Universel)
Prochain niv.: 1.6%
 
Messages: 1985
Images: 8
Inscription: 02 Aoû 2009, 00:00
Localisation: 54, près de Metz
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: Ingé Logiciel chez Amazon

Re: Aide pour un programme en C

Message non lude Kiligolo » 26 Mar 2011, 22:18

Regarde ma signature! :D:
Avatar de l’utilisateur
Kiligolo
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Prochain niv.: 84.3%
 
Messages: 1465
Inscription: 17 Mai 2010, 00:00
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: 1reS

Re: Aide pour un programme en C

Message non lude Kiligolo » 28 Mar 2011, 11:55

Bonjour,

J'ai un problème avec le menu de mon programme (Calcul Mental): pour choisir une option, il faut la sélectionner avec la flèche (voir ma signature). Elle s'affiche bien sur VTI (OS 2.09, HW2) mais pas sur ma Titanium (OS 3.10, HW4)! J'ai essayé preOS et Ghostbuster mais ça n'a pas marché...
On peut toujours choisir les options mais il faut le faire à l'aveuglette. Voici le code qui permet de sélectionner une option:
 
Show/Hide spoilerAfficher/Masquer le spoiler
unsigned char fleche[] = {0b11000000,
0b11110000,
0b10001100,
0b10000011,
0b10000011,
0b10001100,
0b11110000,
0b11000000,
};
//...

Sprite8(2, posS, 8, fleche, LCD_MEM, A_REVERSE); //posS = position y de la flèche
key = ngetchx(); //key = variable qui contient le code touche
Sprite8(2, posS, 8, fleche, LCD_MEM, A_NORMAL);
//...

Le menu est un type BITMAP (fond noir) et c'est pour ça que je ne l'affiche pas à chaque fois que l'utilisateur appuie sur une touche, c'est trop lent (surtout avec des niveaux de gris). J'ai essayé ceci:
 
Show/Hide spoilerAfficher/Masquer le spoiler
for (i = 0; i {
Sprite8(2, posS, 8, fleche, LCD_MEM, A_REVERSE);
}
key = ngetchx();

La sprite c'est correctement affichée pendant un laps de temps puis s'est effacée...

Si quelqu'un saurait comment résoudre ce problème ça serait gentil (je crois qu'il vient de ngetchx() mais je ne suis pas sûr). :):
Avatar de l’utilisateur
Kiligolo
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Prochain niv.: 84.3%
 
Messages: 1465
Inscription: 17 Mai 2010, 00:00
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: 1reS

Re: Aide pour un programme en C

Message non lude Folco » 28 Mar 2011, 12:11

Je ne crois pas que ça vienne de ngetchx().

Par contre, tu dessines directement à LCD_MEM, c'est à dire à l'adresse 0x4C00.
Sur VTI, donc sur HW1, LCD_MEM est bien utilisé dans le double buffering.
Sur HW3/4, pas sûr. Faudrait que je regarde comment c'est codé dans gray.s, mais si les deux plans sont alloués sur le heap, tu dessines au final sur une partie jamais affichée à l'écran.

Remplace LCD_MEM par GrayGetPlane(LIGHT_PLANE/DARK_PLANE) ou assimilé, je ne connais pas les noms. Je veux parler des adresses des plans clair et foncé.


--------


Par contre, pourquoi afficher 2500 fois ton sprite à la même place, surtout en A_REVERSE, qui n'est pas documenté dans Sprite8 ? Tu dois utiliser SPRT_* à la place, dans le mode désiré.
Avatar de l’utilisateur
Folco
Niveau 8: ER (Espèce Rare: nerd)
Niveau 8: ER (Espèce Rare: nerd)
Prochain niv.: 21.5%
 
Messages: 150
Inscription: 23 Sep 2010, 00:00
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: anapu :p

Re: Aide pour un programme en C

Message non lude Folco » 28 Mar 2011, 13:13

Autre chose qui me vient : il serait peut-être beaucoup plus simple de faire quelque chose comme ça :

Code: Tout sélectionner
SetAMSPlane(LIGHT_PLANE);
BitmapPut(x, y, ImageDeFond_CLAIR, A_REPLACE);
SetAMSPlane(DARK_PLANE);
BitmapPut(x, y, ImageDeFond_FONCE, A_REPLACE);


short Loop = TRUE;
short key;

while (Loop)
{
    Sprite8(x, y, Curseur, SPRT_XOR);
    key = ngetchx();
    Sprite8(x, y, Curseur, SPRT_XOR);

    if (key == KEY_DOWN) {};
    if (key == ...) {};
    ....
    if ((key == KEY_ENTER) or (key == KEY_ESC))
        Loop = FALSE;
}

Ce n'est qu'une manière de faire, en pseudo-C, à ne surtout pas recopier bêtement ^^. Tu affiches une fois tout le fond, et tu affiches ton curseur en XOR avant et après le ngetchx (comme ça il est effacé en restaurant le fond pendant le traitement du clavier que tu fais).
= Ca évite de tout redessiner, c'est hyper rapide et simple.

J'espère en tout cas que j'ai bien compris ce que tu veux.
Avatar de l’utilisateur
Folco
Niveau 8: ER (Espèce Rare: nerd)
Niveau 8: ER (Espèce Rare: nerd)
Prochain niv.: 21.5%
 
Messages: 150
Inscription: 23 Sep 2010, 00:00
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: anapu :p

Re: Aide pour un programme en C

Message non lude Kiligolo » 28 Mar 2011, 16:44

Folco a écrit:Je ne crois pas que ça vienne de ngetchx().

Ah ok!

Folco a écrit:Par contre, tu dessines directement à LCD_MEM, c'est à dire à l'adresse 0x4C00.
Sur VTI, donc sur HW1, LCD_MEM est bien utilisé dans le double buffering.
Sur HW3/4, pas sûr. Faudrait que je regarde comment c'est codé dans gray.s, mais si les deux plans sont alloués sur le heap, tu dessines au final sur une partie jamais affichée à l'écran.

Tu parles du Graph buffer qui s'affiche sur l'écran qu'avec une fonction? (sinon la ROM de vti que j'utilise est HW2 mais je pense que ça ne change rien ^^)

Folco a écrit:Par contre, pourquoi afficher 2500 fois ton sprite à la même place, surtout en A_REVERSE, qui n'est pas documenté dans Sprite8 ? Tu dois utiliser SPRT_* à la place, dans le mode désiré.

J'ai fait ceci pour bien vérifier que le sprite s'affichait (puisqu'il s’effaçait après...). Sinon le A_REVERSE marche! :):

Folco a écrit:Autre chose qui me vient : il serait peut-être beaucoup plus simple de faire quelque chose comme ça :
Code: Tout sélectionner
SetAMSPlane(LIGHT_PLANE);
BitmapPut(x, y, ImageDeFond_CLAIR, A_REPLACE);
SetAMSPlane(DARK_PLANE);
BitmapPut(x, y, ImageDeFond_FONCE, A_REPLACE);


short Loop = TRUE;
short key;

while (Loop)
{
    Sprite8(x, y, Curseur, SPRT_XOR);
    key = ngetchx();
    Sprite8(x, y, Curseur, SPRT_XOR);

    if (key == KEY_DOWN) {};
    if (key == ...) {};
    ....
    if ((key == KEY_ENTER) or (key == KEY_ESC))
        Loop = FALSE;
}

Ce n'est qu'une manière de faire, en pseudo-C, à ne surtout pas recopier bêtement ^^. Tu affiches une fois tout le fond, et tu affiches ton curseur en XOR avant et après le ngetchx (comme ça il est effacé en restaurant le fond pendant le traitement du clavier que tu fais).
= Ca évite de tout redessiner, c'est hyper rapide et simple.
J'espère en tout cas que j'ai bien compris ce que tu veux.

Merci je vais essayer (surtout faire le fond gris foncé/clair avant il était en noir/gris foncé :D: ).

Bon en tout cas merci! :#love#:


Merci, ça marche!!!! :D:


Lionel Debroux a écrit:Comment affiches-tu le double ?


Folco a écrit:(en affichant deux fois le simple :%): )

Pardon ^^ Tu as regardé la doc de printf ? Y sont décrites toutes les options de formatage de données pour un affichage justement.

Ah je suis désolé je n'avais pas vu vos posts! :s: (notés comme lus par forum actif)
Je vais y jeter un coup d’œil!
Avatar de l’utilisateur
Kiligolo
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Prochain niv.: 84.3%
 
Messages: 1465
Inscription: 17 Mai 2010, 00:00
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: 1reS

Re: Aide pour un programme en C

Message non lude Folco » 28 Mar 2011, 17:51

Sinon le A_REVERSE marche!

Oui, évidemment que A_REVERSE marche, voici comment ça fonctionne :

Dans la doc de GCC4TI, on lit ça à la page Attrs :
Code: Tout sélectionner
enum Attrs {A_REVERSE, A_NORMAL, A_XOR, A_SHADED, A_REPLACE, A_OR, A_AND, A_THICK1, A_SHADE_V, A_SHADE_H, A_SHADE_NS, A_SHADE_PS};

Ce qui veut dire en clair que A_REVERSE vaut 0.
Et à la page SprtModes, on a ça :
Code: Tout sélectionner
enum SprtModes {SPRT_XOR, SPRT_OR, SPRT_AND, SPRT_RPLC};

Et ici, c'est SPRT_XOR qui vaut 0.

Donc en fait, tu obtiens du code qui marche en passant 0 comme argument à Sprite8(). Seulement, pour être propre, tu dois utiliser le symbole défini pour Sprite*(), et non pour BitmapPut(). Parce que sinon, tu pourrais aussi utiliser F_4x6 qui vaut également zéro, mais qui désigne la petite police dans les fonctions de chaines de caractères.

Voilà, j'espère que j'ai été clair :%):
Avatar de l’utilisateur
Folco
Niveau 8: ER (Espèce Rare: nerd)
Niveau 8: ER (Espèce Rare: nerd)
Prochain niv.: 21.5%
 
Messages: 150
Inscription: 23 Sep 2010, 00:00
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: anapu :p

Re: Aide pour un programme en C

Message non lude Kiligolo » 28 Mar 2011, 17:55

Bien vu! :D:
Et c'est pour ça que A_NORMAL marche aussi (avec le SPRT_OR)!
En tout cas merci ça marche j'ai pu finir une nouvelle activité pour mon programme! (surprise...)
Avatar de l’utilisateur
Kiligolo
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Prochain niv.: 84.3%
 
Messages: 1465
Inscription: 17 Mai 2010, 00:00
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: 1reS

PrécédenteSuivante

Retourner vers Programmation

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 8 invités

-
Rechercher
-
Social TI-Planet
-
Sujets à la une
"1 calculatrice pour tous", le programme solidaire de Texas Instruments. Reçois gratuitement et sans aucune obligation d'achat, 5 calculatrices couleur programmables en Python à donner aux élèves les plus nécessiteux de ton lycée. Tu peux recevoir au choix 5 TI-82 Advanced Edition Python ou bien 5 TI-83 Premium CE Edition Python.
Enseignant(e), reçois gratuitement 1 exemplaire de test de la TI-82 Advanced Edition Python. À demander d'ici le 31 décembre 2024.
Offre de test des nouveautés de rentrée 2024 par Casio. Enseignant(e), reçois gratuitement 1 exemplaire, à ton choix, de la Graph Light ou bien de la Graph Math+
14€ remboursés par Casio sur l'achat de ta calculatrice Graph 35 d'ici le 31 Octobre 2024
10€ remboursés par Casio sur l'achat de ta calculatrice Graph 90+E d'ici le 31 Décembre 2024
10€ remboursés par Casio sur l'achat de ta calculatrice Graph 25 d'ici le 31 Décembre 2024
8€ remboursés par Casio sur l'achat de ta calculatrice Graph Math+ d'ici le 31 Octobre 2024
Reprise de ton ancienne fx-92 Collège ou Graph 25/35/90 à 3€ peu importe son état. Même non fonctionnelle et donc invendable, même ancienne Graph 35 non conforme aux programmes (pas de Python), même ancienne Graph 25/35 inutilisable aux examens (pas de mode examen) et donc invendable. Etiquette de retour fournie, pas de frais de port à payer.
3€ remboursés par Casio sur l'achat de ta calculatrice fx-92 Collège d'ici le 30 Septembre 2024
5€ de remise immédiate sur l'achat de ta calculatrice TI-83 Premium CE Edition Python chez les revendeurs partenaires
4€ de remise immédiate sur l'achat de ta calculatrice TI-82 Advanced Edition Python chez les revendeurs partenaires
3€ de remise immédiate sur l'achat de ta calculatrice TI-82 Advanced chez les revendeurs partenaires
Comparaisons des meilleurs prix pour acheter sa calculatrice !
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
1234567891011121314
-
Faire un don / Premium
Pour plus de concours, de lots, de tests, nous aider à payer le serveur et les domaines...
Faire un don
Découvrez les avantages d'un compte donateur !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partenaires et pub
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
1523 utilisateurs:
>1507 invités
>11 membres
>5 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Autres sites intéressants
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)