Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.

Forum Casio - Vos tutoriels et astuces


Index du Forum » Vos tutoriels et astuces » Vos méthodes de programmation
Ray Hors ligne Membre Points: 1338 Défis: 18 Message

Vos méthodes de programmation

Posté le 25/07/2012 23:00

Bonsoir à tous, je créé ce sujet pour vous demander quelles sont vos méthodes de programmation.
Je précise que je ne savais pas où placer ce sujet, alors si son emplacement pose problème, ça ne me dérange pas qu'il soit déplacé.

Bref, voici un modèle de post pour connaître votre méthode :
Modèle
Masquer
Initialisation :
Fenêtre Texte :
codes/explications
Fenêtre Graphique :
codes/explications

Boucle principale du logiciel :
Avant la boucle principale :
codes/explications
Interface :
codes/explications
Partie Getkey :
codes/explications
Partie code du logiciel :
codes/explications

Menu principal :
Interface :
codes/explications
Passage à la boucle principale :
codes/explications

Mémoires utilisées :
Sauvegarde :
Vos Moyens de sauvegarde
Mappage (jeux) :
codes/explications

Autres parties du programme :
Mettez ce que vous voulez ici

Ordre de programmation :
1-
2-
3-
4-
etc...

Comment avez-vous des idées de logiciels ?


Voici ma méthode de programmation :
Initialisation :
Fenêtre Texte :
Lbl 0
ClrText
0->A~Z
[Variables à initialiser]

Je commence souvent mes programmes par un "ClrText", pour dire d'être sur que aucun ancien affichage soit sur l'écran au démarrage du logiciel.
Ensuite je met mes variables à zéro pour éviter d'avoir des problèmes plus tard.
Enfin, je met les chiffres qu'il faut dans les variables.

Fenêtre Graphique :
Lbl 0
[Configurations de l'écran]
ClrGraph:ViewWindow 1,127,0,1,63,0
0->A~Z
[Variables à initialiser]

Tout d'abord, je met les configurations de l'écran (AxesOff, etc...), puis j'efface la fenêtre graphique pour ensuite la réinitialiser. enfin, je fais la même chose pour les variables que pour la fenêtre textuelle.

Boucle principale du logiciel :
Avant la boucle principale :
[Initialisation des variables]
[Début de l'initialisation de l'interface]
While 1
[Boucle Principale]
WhileEnd

Rien à expliquer...

Interface :
Locate X,Y,""
ou
""
ou
[Codes graphiques(PlotOn, etc...)]

Je fais toujours mes interfaces avec ces codes ci-dessus.

Partie Getkey :
Getkey->[TETA]
If [TETA]=[Chiffre]
Then [Le Code]
ifEnd
If [TETA]=[Chiffre]
etc...

Je prend le Getkey que je met dans [TETA] puis je fais le code si tel bouton est appuyé.

Partie code du logiciel :
Je n'ai pas de code spécifique pour les jeux, tout dépend de ce que j'ai décidé de créer, ça peut être des conditions ou des lignes qui s’exécutent automatiquement.
Si le code m'embrouille, je le divise en plusieurs fichiers (exemple : mon RQuest)
et, si les fichiers sont petits, et pas repris à plusieurs reprises, soit je laisse les fichiers séparés, soit je les remets dans le fichier principal.

Menu principal :
Interface :
Locate X,Y,""
ou
""
ou
[Codes graphiques(PlotOn, etc...)]

Exactement la même chose que dans l'interface du programme, j'ai une tendance à faire les menus en utilisant le moteur graphique du programme.

Passage à la boucle principale :
J'initialise un morceau de l'interface, plus précisément les parties fixes pour éviter de faire ramer le programme.

Mémoires utilisées :
Sauvegarde :
j'utilise principalement les listes pour sauvegarder des positions, des variables, et même parfois le programme pioche directement dans les listes pour économiser des variables.

Mappage (jeux) :
J'utilise souvent les matrices, et, comme très souvent mes jeux utilisant les matrices sont en fenêtre textuelle, j'utilise des matrices de 7x21, tout l'écran.

Autres parties du programme :
je n'ai pas d'autres parties spécifiques pour mes programmes

Ordre de programmation :
1-Initialisation
2-Avant la boucle principale
3-Interface
4-Partie GetKey
5-Partie du code du logiciel
6-Menu Principal
7-Optimisations du code

Voilà, j'espère que vous prendrez le temps d'expliquer comment vous programmez


1, 2, 3 Suivante
Javierxd Hors ligne Membre Points: 1899 Défis: 13 Message

Citer : Posté le 25/07/2012 23:35 | #


La mienne est plus ou moins comme ça:
-initialisations pour le menu
-menu
-initialisations pour le jeu
-boucle principale
-fin de partie
-retour au début
Calculatrices: g35+usb modifiée, PRIZM

My program is not working, I have no idea why.
My program is working, I have no idea why.

Programmes
Cliquer pour enrouler
Smashmaster Hors ligne Ancien modérateur Points: 4561 Défis: 253 Message

Citer : Posté le 25/07/2012 23:52 | #


J'ai déplacé ce topic dans la partie astuce ;).
Voici ma méthode de programmation :


[u]Initialisation de la fenêtre graphique[/u]
ViewWindow ...
AxeOff
BG-None
0->A~Z

En mode texte je mets juste ClrText:0->A~Z

[u]Gestion des touches en temps réel[/u]
Do
GetKey -> G
If G=31
Then ...
...
IfEnd
If G= 37
Then ...
...
IfEnd
...
...
LpWhile G!=47

[u]Gestion des touches dans un menu[/u]
0->X
Do
Getkey
Ans=72=>1->X
Ans=62=>2->X
...
LpWhile Not X


->Je décompose souvent mes jeux/programmes en plusieurs sous programme pour plus de clarté dans le code

->Pour les sauvegardes j'utilise des matrices.

->Au niveau de l'optimisation je code comme ceci : Lien

Ordre de programmation:
1-Initialisation
2-Moteur du jeu (boucle principal)
3-Les menus
4-Optimisations du code

Dans tous les autres cas je code comme toi.
Ray Hors ligne Membre Points: 1338 Défis: 18 Message

Citer : Posté le 26/07/2012 00:31 | #


J'ai oublié de préciser que je commençais toujours un programme par "Lbl 0"
On ne sait jamais, si je veut qu'à un moment le jeu redémarre (après avoir fini une partie par exemple)
Projets que je soutiens
Masquer
Dark storm Hors ligne Labélisateur Points: 11541 Défis: 176 Message

Citer : Posté le 26/07/2012 09:34 | #


Lbl

Perso, pour les menus, et le getkey, tant que ce n'est pas un jeu d'action, je préfère cette méthode:


0->A~Z
Do
GetKey
LpWhile Ans!=72 And Ans!=62 And...
Ans=72=>1->X     //généralement, je lance un sous-prog
Ans=62=>2->X
...

Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Ninestars Hors ligne Membre Points: 2413 Défis: 22 Message

Citer : Posté le 26/07/2012 12:14 | #


pour les menus :

0->U:1->C
while 1
If U:Then 0->U
Locate X,Y,">"
Locate X,Y+1,">"
Locate X,Y+2,">"
Locate X,Y-1+C,"}"
Ifend
Getkey->G
If G=37:Then 1->U:Isz C
Ifend
If G=28:Then 1->U:Dsz C
Ifend
G=31=>Break
Whilend
C=...
C=...

Sinon je déteste créer des sous programmes à tout va. Pour limiter leur prolifération je fais
0:Prog "XXX"
ou
1:Prog "XXX"
2:Prog "XXX"
et dans le programme XXX
If Ans=0:Then
...
Ifend
If Ans=1:Then
...
Ifend
Louloux Hors ligne Ancien administrateur Points: 7035 Défis: 61 Message

Citer : Posté le 06/08/2012 10:46 | #


Configuration :

ClearGraph
AxesOff
CoordOff
ViewWindow 1,127,0,63,1,0

Si j'utilise le drawstat :
FuncOff
SWindMan
//réglages de StatGraph1
//réglages de StatGraph2
//réglages de StatGraph3

Et bien sûr initialisation des variables dont j'ai besoin.


Structure du jeu :

Programme principal :
-petit générique avec mon pseudo et le nom du jeu
-menu principal qui envoie vers les sous-programmes

Programme du jeu :
-boucle principale type do/while
-à la fin de la boucle condition puis gagné ou perdu

Programme crédits :
-mon pseudo
-le nom du jeu
-remerciements
-date et contexte (concours, etc)

Programme instructions :
-principe du jeu
-touches
-points, objectifs

Pour un grand jeu, je divise la partie jeu en sous programmes.


Gestion des touches :

2 cas de figure :

-le jeu attend une pression : je bloque après l'affichage
While Getkey!=... And Getkey!=...
WhileEnd


-le jeu tourne toujours et si pression événement : dans la boucle principale j'insère une conditon
If Getkey=...
Then
IfEnd



Mémoires utilisées :

-pour un groupe de données utiles uniquement le temps d'une exécution et pour les données graphiques les listes
-pour des données uniques utiles uniquement le temps de l'exécution les variables
-pour des données à sauvegarder ou la gestion de maps (donc à plusieurs dimensions) les matrices
Dark storm Hors ligne Labélisateur Points: 11541 Défis: 176 Message

Citer : Posté le 06/08/2012 22:04 | #


Pour sauver des données, j'utilise toujours des matrices, puisqu'on utilise les listes en maths...
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Pseudopourri Hors ligne Membre Points: 182 Défis: 9 Message

Citer : Posté le 22/02/2014 19:44 | #


Ray a écrit :
J'ai oublié de préciser que je commençais toujours un programme par "Lbl 0"
On ne sait jamais, si je veut qu'à un moment le jeu redémarre (après avoir fini une partie par exemple)

Met un PROG "aaaaa" à la place comme ça tu économise un lbl
je code en...
je code en:

-ASM (assembleur) sur x86 et gb-Z80
-locomotive basic/amstrad basic
-Basic Casio
-VBS
-Batch
-Bash
-Python 3.4
-html
-CSS
-javascript
-Lua
-brainfuck
-ruby

Il faut savoir que je ne maitrise pas parfaitement tout ces langages

[/spoiler]
Remerciment

Ma calto: graph 75
Alphacreator Hors ligne Membre Points: 1464 Défis: 43 Message

Citer : Posté le 22/02/2014 19:47 | #


/*déterrage: apprend à regarder les dates même si c'est nouveau dans la boîte de réception*/
Et au lieu d'utiliser les lbl vaut mieux utiliser des sous programmes comme ça tu peux revenir là où tu t'es arrêté avant de faire le saut.
Smashmaster Hors ligne Ancien modérateur Points: 4561 Défis: 253 Message

Citer : Posté le 22/02/2014 20:14 | #


Je trouve ce topic assez utile, donc un déterrage n'est pas trop grave

Alphacreator a écrit :

Et au lieu d'utiliser les lbl vaut mieux utiliser des sous programmes comme ça tu peux revenir là où tu t'es arrêté avant de faire le saut.
Le basic ne gère pas la récursivité, au bout du 10 ème niveau de sous-programme l'erreur "Stack Error" sera affiché.
Tenmatx Hors ligne Membre Points: 996 Défis: 2 Message

Citer : Posté le 22/02/2014 20:20 | #


10ème niveau de sous-programme
Dans toute ma carière Basic je n'ai JAMAIS utilisé le moindre petit sous programme.
J'ai horreur de ça. Vive les bons vieux Lbl / Goto !
Mes programmes de maths
Mes programmes de maths

Toutes les formules de Première S.
Toutes les formules de Terminale S.
Un programme de calculs.
Mes meilleurs jeux
Mes meilleurs jeux

Jeu gagnant des 48h CPC n°12

Mon site de discussion pour ados : http://entre-ados.net/ (a brûlé dans l'incendie d'OVH)
Mon éditeur de cours en ligne et plateforme de partage : http://wordline.xyz (a succombé à la concurrence de Google Drive...)
Alphacreator Hors ligne Membre Points: 1464 Défis: 43 Message

Citer : Posté le 22/02/2014 20:29 | #


Peut être que ça met des erreurs mais je ne vais jamais jusque là même avec beaucoup de sous-progs au total, et en plus l'avantage c'est de pouvoir revenir directement, suffit de s'en servir comme les fonctions en C (et on peut toujours mettre un test de valeur au début pour renvoyer au prog principal si on y entre directement, je fais ça à chaque fois quasiment que j'utilise des sous progs)
Ray Hors ligne Membre Points: 1338 Défis: 18 Message

Citer : Posté le 22/02/2014 21:22 | #


ça fait très longtemps que je n'utilise plus le Lbl 0 en début de programme.
Et j'utilise souvent les mêmes sous programmes :
-"JEU" qui est le programme principal;
-"JEU.MAP" pour stocker les niveaux;
-"JEU.F" pour mettre toute les fonctions (généralement je met une valeur dans Z qui est ma variable constamment temporaire dans tout mes programmes qui permettra au sous-programme de savoir qu'es-ce que je lui demande).

Pour les fonctions par exemple un afficheur de texte qu'il faut appeler avec la valeur Z=3 je met 3 dans Z, je met le texte à afficher dans la Str 1 puis j'appelle le sous programme, qui s'occupera du reste.

Projets que je soutiens
Masquer
Pseudopourri Hors ligne Membre Points: 182 Défis: 9 Message

Citer : Posté le 22/02/2014 21:55 | #


Bah ça va juste 2 ans d'écart

Ajouté le 22/02/2014 à 21:57 :
Moi j'utilise aucun sous-prog et j'économise les Lbl (bugé mais utile) et j'essaye d'utiliser le moins de list/matrices
je code en...
je code en:

-ASM (assembleur) sur x86 et gb-Z80
-locomotive basic/amstrad basic
-Basic Casio
-VBS
-Batch
-Bash
-Python 3.4
-html
-CSS
-javascript
-Lua
-brainfuck
-ruby

Il faut savoir que je ne maitrise pas parfaitement tout ces langages

[/spoiler]
Remerciment

Ma calto: graph 75
Alphacreator Hors ligne Membre Points: 1464 Défis: 43 Message

Citer : Posté le 22/02/2014 22:30 | #


Pourquoi? Les listes et les matrices c'est super utile pourtant!
Lephenixnoir Hors ligne Administrateur Points: 21002 Défis: 143 Message

Citer : Posté le 23/02/2014 07:20 | #


J'ai toujours un peu peur que ce soit lent au niveau du CPU (sans compter que les Isz et Dsz sont interdits )
Eltoredo Hors ligne Modérateur Points: 4299 Défis: 35 Message

Citer : Posté le 23/02/2014 08:49 | #


Merci d'avoir déterré, j'avais parlé a totoyo de faire ce genre d'astuce dans le tutoriel (sans réponse ) et la, en fait c'est déjà fait ! Merci pseudopourri quand même
La procrastination est une vertu. (voir ma description pour comprendre mon raisonnement)
Alphacreator Hors ligne Membre Points: 1464 Défis: 43 Message

Citer : Posté le 23/02/2014 09:38 | #


Lephenixnoir a écrit :
J'ai toujours un peu peur que ce soit lent au niveau du CPU (sans compter que les Isz et Dsz sont interdits )
Qu'es ce qui est lent? Et sinon les Isz/Dsz on peut les utiliser mais en s'assurant de mettre Dsz X:1 lorsqu'on sait si X risque d'atteindre 0, pareil pour Isz car avec ces commandes si la variable atteind 0, la ligne suivante saute et ça provoque des bugs, d'où le :1 mais sinon y'a pas trop de soucis
Lephenixnoir Hors ligne Administrateur Points: 21002 Défis: 143 Message

Citer : Posté le 23/02/2014 09:50 | #


Je savais pas pour le Dsz X:1 ; ça pourrait m'éviter des bugs
Pour cette histoire de lenteur, je parlais de la manipulation des listes et matrices.
Et, pour autant que je sache, Dsz List1[2] est interdit
Alphacreator Hors ligne Membre Points: 1464 Défis: 43 Message

Citer : Posté le 23/02/2014 10:04 | #


Enfin Dsz et Isz sont prévus pour les variables, pas pour les listes et les matrices malheureusement.
Après j'ai pas regardé pour la vitesse mais ça m'a l'air correct, j'ai jamais eut de problème de lenteur avec ça.

Sinon, une astuce pour aller plus vite lors de l'affichage d'un terrain avec le tile mapping (une case de matrice = un élément du terrain), le mieux, c'est de tout mettre dans un sous-programme qui les affiches (ou mettre une autre condition qui englobe les affichages) et de n'y aller que si un élément existe: sinon le programme va faire tout les tests d'élément quand il n'y a rien et prendre plus de temps, par exemple:
exemple
Cliquer pour enrouler
For 1→X To Xmax //Xmax= longeur du terrain
For 1→Y To Ymax //Ymax= largeur du terrain
Mat A[Y,X→E
If E //si un élément est présent
Then
//le contenu qui suit peut aussi être mis dans un sous-programme
If E=1
Then //on affiche un mur par exemple
IfEnd
If E=2
Then //on affiche des pièges
IfEnd
...
IfEnd
Next
Next

C'est un exemple mais ça permet d'aller plus vite que si on avait pas mis If E
1, 2, 3 Suivante

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 v42 © créé par Neuronix et Muelsaco 2004 - 2021 | Il y a 51 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