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 - Autres questions


Index du Forum » Autres questions » Mon premier programme en C
Matt36230 Hors ligne Membre Points: 1888 Défis: 0 Message

Mon premier programme en C

Posté le 17/01/2016 19:45

Comme dit dans le titre je me suis enfin mis au C. J'ai donc fait un petit "jeu" si on peut appeler ça comme ça
Et comme j'aime partager le voici !

En gros c'est un "O" (vous) qui doit aller chopper un "X" mais attention si le "X" sort de l'écran vous perdez une vie. Le but est d'avoir le plus de points possibles à la fin

Même si je me doute bien que vous n'allez pas le mettre dans votre calculatrice chérie, comme il y a les sources, c'est plus pour que vous me dites ca se dit ça ? ce qui ne va ou pas dans mon code. Je n'ai pas envie de prendre des mauvaises habitudes dès le début voyez-vous

Les sources sur hastebin.


Un énorme merci si tu regardes ce que j'ai fait c'est super cool

Bonne prog' !

Dans le zip il y a la version sh4, la sh3 et les sources

Fichier joint


Eltoredo Hors ligne Modérateur Points: 4301 Défis: 35 Message

Citer : Posté le 17/01/2016 19:47 | #


Ce serait bien de dire en quoi consiste le jeu et pourquoi pas un hastebin du code histoire de pas avoir à dl tout le truc, j'ai plus le SDK et j'ai pas le temps de le remettre mais j'aimerais bien voir ton code

http://hastebin.com/ pour partager ton code, tu entres le code et tu fais CTRL + S et l'URL à partager apparaît en haut
La procrastination est une vertu. (voir ma description pour comprendre mon raisonnement)
Matt36230 Hors ligne Membre Points: 1888 Défis: 0 Message

Citer : Posté le 17/01/2016 19:47 | #


Merci Elto je fais ça
Eltoredo Hors ligne Modérateur Points: 4301 Défis: 35 Message

Citer : Posté le 17/01/2016 19:55 | #


Je passe l'éponge sur tout le bordel qu'il y a avant le code de ton jeu, quelqu'un de plus compétent que moi te dira si c'est bien ou non x)

Sinon, mais où est ta fonction principale ? Elle a disparu ? Après ça, l'indentation du code lui même semble correcte mais le code peut être optimisé
La procrastination est une vertu. (voir ma description pour comprendre mon raisonnement)
Matt36230 Hors ligne Membre Points: 1888 Défis: 0 Message

Citer : Posté le 17/01/2016 19:59 | #


Oui je l'ai pas lu non plus x)

Mais tout ce qui compte c'est que la valeur de &key soit la bonne (c'est ce que ça change)

Non non elle commence par
int AddIn_main(int isAppli, unsigned short OptionNum) {

Ok merci Pour l'optimisation je verrai après
Intelligide Hors ligne Membre de CreativeCalc Points: 49 Défis: 5 Message

Citer : Posté le 17/01/2016 20:11 | #


Alors 1)

Âme sensible, s'abstenir
Cliquer pour enrouler



2)
       if (X2<1) { TPperso2();
           vies = vies -1;}
       if (X2+5>127) { TPperso2();
           vies = vies -1;}
       if (Y2<1) { TPperso2();
           vies = vies -1;}
       if (Y2+7>63) { TPperso2();
           vies = vies -1;}


Heeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeu, tu as vraiment besoin de 4 conditions pour faire 1 seule chose

3)
int X2;
   int Y2;
   int DP;

unsigned int key;
char perdu[] = "Tu as perdu !";


C'est des p******* de b******* de c********* de f*** de p*** de sa maman de variables globales! à proscrire immédiatement, NOW, agora, nyní, acum, в настоящее время (je m'assure que le message passe )

4)
TPperso2()


J''espère que je n'aurais jamais à utiliser ce code Je ne comprendrais pas l'utilité de la fonction seulement avec le prototype

5)

#include "MonochromeLib.h"

// Et

Bdisp_AllClr_DDVRAM();
    PrintXY(X,Y,perso,0);
    PrintXY(X2,Y2, perso2,0);


C'est un peu comme avoir accès au paradis et goto vers l'enfer

J'espère que je n'ai pas été trop gentil sévère mais la programmation requiert une discipline, une rigueur à prendre le plus tôt possible
Matt36230 Hors ligne Membre Points: 1888 Défis: 0 Message

Citer : Posté le 17/01/2016 20:18 | #


1) Why not

2) Non maaaaaaaais à la base c'était pas censé être les mêmes et j'ai oublié de changer

3) Pourquoi Comment je fais pour X2 et Y2 sans ça ?

4) J'ai pas compris pourquoi tu n'aimes pas cette fonction

5) Donc dans monochrome lib il y a la même chose en mieux :E. Je n'ai pas encore regardé la doc, je l'ai juste mis pour le test (a la base le prog s'appelait libtest et c'est partit en steack)

Merci Intel grâce à toi je vais peut-être faire moins de [insérez ici quelque chose de pas propre] dans mes prochaines programmes
Ninestars Hors ligne Membre Points: 2462 Défis: 24 Message

Citer : Posté le 17/01/2016 20:19 | #


pas avoir à dl tout le truc
J'ai vu mieux comme excuse pour pas regarder son code :P
Alors j'ai pas testé (faut que je lance la machine virtuelle de Windows ça mets 3 ans ça me gonfle) par contre j'ai regardé ton code, je te fais une liste des ce qui va ou pas :
- Tu as deux codes pour gérer le clavier, une partie dans TestLib.c et une autre dans usefull.h, c'est l'un ou l'autre on va dire

- D'ailleurs évite de mettre tout ce pavé au début de TestLib.c, tu crées un nouveau fichier gros_pave.c et tu le mets dedans. Ensuite tu fais un noveau fichier gros_pave.h où tu mets les headers des fonctions de ce gros pavé, tu fais #include "gros_pave.h" au début de TestLib.c et ça fonctionne

- mettre des sauts de ligne pour aérer, par exemple entre les #include et les #define

- quand tu crées une fonction, tu dois renseigner ce quelle renvoie (int, char, float, ...). Si elle ne renvoie rien, tu mets le type void, qui signifie "rien" justement. Pas la peine de faire int ma_fonction() ... return 0;

- quelques petits problèmes d'indentation

- evites les trucs comme ça
if (X2<1) { TPperso2();
           vies = vies -1;}
à moitié sur une ligne, à moité sur 2 lignes
Un truc comme celà est plus propre
if (X2<1)
{
    TPperso2();
    vies = vies -1;
}

if (X2<1) { TPperso2(); vies = vies -1; }

- Après c'est un peu plus du chipotage là mais c'est toujours bon à entendre
(X+5 >X2-1 & X< X2+6 & Y+7 >Y2-1 & Y<Y2+8)
Les espaces irréguliers c'est moyen
(X+5 > X2-1 & X < X2+6 & Y+7 > Y2-1 & Y < Y2+8)


- Les variables X et Y sont définies en local (dans AddIn_main) alors que X2 et Y2 sont déclarées en globale

- Je vois pourquoi tu as fais cela, en fait il faut les déclarer en même temps que X et Y et quand tu appelles ta fonction TPperso2(); tu fais TPperso2(&X2, &Y2);
La ça envoie l'adresse de tes deux variables
puis dans ta fonction TPperso2(); tu utilises * pour modifier X2 et Y2. Au début c'est assez difficile je te l'accorde, on appelle cela les pointeurs.

- tu inclues fixlib.h en plein milieu d'un truc, il est perdu le pauvre

-
sprintf (buffer,"Vies : %d", vies);
PrintXY(1,1,buffer,0);
Ça c'est très bien

- N'oublies pas que c'est GetKey() qui affiche la VRAM à l'écran, sinon il faut utiliser Bdisp_PutDisp_DD()
Intelligide Hors ligne Membre de CreativeCalc Points: 49 Défis: 5 Message

Citer : Posté le 17/01/2016 20:24 | #


3) Tu les intègre dans la fonction et tu passes X2 et Y2 par paramètres.


4) Parce qu'elle a un nom à chier

5) ML propose des fonctions beaucoup plus simple à utiliser et à retenir comme
ML_display(); // ça affiche la même chose que Bdisp_machin_chose :E


Et c'est un peu plus rapide
Eltoredo Hors ligne Modérateur Points: 4301 Défis: 35 Message

Citer : Posté le 17/01/2016 20:50 | #


Pour le 2), au lieu de faire 'if A, then B, if C, then B, if D, then B', tu fais 'If A OR C OR D, then B', c'est plus logique (j'ai mis OR parce que je me rappelle plus de l'opérateur genre |, me punissez pas svp )

Pour le 3), faut vraiment que tu lises le début du cours, je l'ai appris il y a quelques temps, les variables au début sont des variables globales, utilisables dans tous les fichiers et c'est sale d'après les expérimenté et d'après OC donc tu dois inclure les variables seulement là où tu veux les utiliser, dans une fonction ou ailleurs

Pour le 4), il essaye de t'expliquer qu'on ne comprend pas ce qu'est cette fonction si tu ne lui donnes pas plus d'explications que ça (un nom explicite, des commentaires), je pense.

Et le 5), je laisse quelqu'un d'autre répondre plus précisément vu qu'Intelligide le fait pas
La procrastination est une vertu. (voir ma description pour comprendre mon raisonnement)
Matt36230 Hors ligne Membre Points: 1888 Défis: 0 Message

Citer : Posté le 17/01/2016 21:24 | #


J'ai deux parties pour gérer le clavier ?

Pour le pavé oui la personne qui me l'a passé me l'a dit mais je ne sais pas comment faire >< (je chercherai plus tard)

Si c'est dans le gros pavé c'est pas moi Sinon je vais y penser

On m'a dit que sur calto le void le sdk aimait pas.

Problème d'indentation ? Lesquels s'il-te-plait ?

Oui c'est mieux je vais le faire dans mes prochaines programmes

Je les avais bien mis en global exprès. Alors les pointeurs je débute vraiment mais je vais essayer de faire comme ça

Je ne l'inclus pas au début ? A moins que ce soit dans le gros pavé

C'est bien mais ça ne vient malheureusement pas de moi

Lephe me l'avait dit sur le chat mais là au moins je ne vais pas oublier


Vraiment merci Ninestars d'avoir pris de ton temps pour me dire tout ça Je vais faire très attention a tes remarques dans mes prochains programmes

2) Comme je lai dit c'est un petit fail de ma part

3) Je sais que ce sont des globals c'est pour ça que je les ai mises >< Ninestars m'a dit comment faire je vais donc essayer

4) Perso je comprends bien moi

5) Je vais lire la doc je l'ai pas encore fait (manque de temps)

Merci beaucoup a vous Elto et Intel. Un pas de plus vers un code prochain moins dégueulasse *eyes on fire*
Eltoredo Hors ligne Modérateur Points: 4301 Défis: 35 Message

Citer : Posté le 17/01/2016 21:26 | #


4) Tu comprends bien parce que c'est petit et que tu viens de le coder mais dans un gros projet, ce genre de trucs s'oublient vite
La procrastination est une vertu. (voir ma description pour comprendre mon raisonnement)
Matt36230 Hors ligne Membre Points: 1888 Défis: 0 Message

Citer : Posté le 17/01/2016 21:27 | #


Oui donc je ferais mieux de mettre quelque chose de plus explicite je le ferais
Intelligide Hors ligne Membre de CreativeCalc Points: 49 Défis: 5 Message

Citer : Posté le 18/01/2016 12:24 | #


On te soutient, Matt \o/
Matt36230 Hors ligne Membre Points: 1888 Défis: 0 Message

Citer : Posté le 18/01/2016 18:44 | #


Merci Intel \o/ Je fais mes devoirs et je vous montre ce que j'ai pu améliorer sans internet (et donc sans ce topic)
Xavier59 Hors ligne Membre de CreativeCalc Points: 1337 Défis: 12 Message

Citer : Posté le 19/01/2016 22:03 | #


if (DP == 1) { Y2 = Y2-1;}


Quand il n'y qu'une seule ligne, on peux aussi le mettre sur une ligne. De plus, tu connais surement l'instruction Isz et Dsz en basic. En C, il existe des équivalents :


Y2++     // Y2 = Y2 + 1
Y2--       // Y2 = Y2 - 1
Y2+=3   // Y2 = Y2 + 3
Y2 -=3   // Y2 = Y2 -3

// Ta condition est équivalente à :

if(DP==1) Y2--;

1337
Matt36230 Hors ligne Membre Points: 1888 Défis: 0 Message

Citer : Posté le 19/01/2016 22:08 | #


Wah je savais pas (enfin si mais depuis longtemps oublié) ! Merci Xav ce sera moins chiant a écrire

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 35 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